c语言矩阵转置问题

void covert(int a[3][3])
{int i,j,t;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}
}
#include<stdio.h>
int main()
{
int a[3][3],i,j;
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
}
printf("The original array:\n");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%2d",a[i][j]);
printf("\n");
}
printf("The covert array:\n");
covert(a);
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}
帮忙看看哪里有错,为什么转置不了?

void covert(int a[3][3])
{int i,j,t;
for(i=0;i<2;i++)
for(j=1;j<3;j++)
{t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}
}
只要把循环次数修改一下就可以了;这里用到的是两个数组元素交换,只用遍历一个三角就行,完全遍历又交换回来了。比如(1,2)和(2,1)只交换一次即可。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-02
void covert(int a[3][3])有问题, 没有把结果保存下来,其实计算正确,但结果丢掉啦,
像下面,把打印部分移入子程序,你试试,就是正确的
void covert(int a[3][3])
{int i,j,t;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}
printf("%2d",a[i][j]);
printf("\n");}
第2个回答  2013-06-02
c语言是值传递,建议用指针操作
相似回答