c语言 写一个函数,使给定的一个二维数组(3*3)转置

#include<stdio.h>
void zz(int a[3][3])
{ int i,j,t;
t=0;
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;

}
}

void main()
{int i,j;
int a[3][3]={{4,5,2},{32,9,1},{15,17,31}};
zz(a);
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%d ",a[i][j]);
putchar('\n');
}
}
为什么不对?

第1个回答  2009-09-23
把第六行的j<3改成j<i
j<3你就又转回去了。
第2个回答  推荐于2016-03-07
对称位置上的元素被对调了两次,比如a[0][1]与a[1][0],在i=0,j=1时他们对调了一次,在i=1,j=0的时候他们又对调了一次,所以执行完程序后输入矩阵和输出矩阵式一样的。
只需要把j<3改成j<i就可以了本回答被提问者采纳