c语言中,3行3列矩阵的转置,这样编写fun函数为什么不对?该怎样??

void fun(int array[3][3])
{int i,j; for (i=0;i<3;i++)
{for (j=0;j<3;j++)
array[i][j]=array[j][i];}
}

错了,这样下三角被上三角覆盖了

改为下面就可以了

void fun(int array[3][3])
{int i,j,temp;
for (i=0;i<3;i++)
for (j=0;j<;j++)
{
trmp=array[i][j];
array[i][j]=array[j][i];
array[j][i]=temp;
}
}

其实很好理解,打个比方
int a=5,b=6;
a=b;
b=a;
其实 ab的值都被6覆盖了追问

不行,这样输出的是原矩阵

追答

for (i=0;i<3;i++)
for (j=0;j<i;j++)
j<i 你上面代码交换了两次,那肯定是原矩阵了,改一下就可以了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-13
矩阵转置意味着array[i][j]和array[j][i]数据发生了交换
即你需要一个临时变量,temp,使
temp=array[i][j];
array[i][j]=array[j][i];
array[j][i]=temp;
这样才能做到数据交换
你的错误在于丢失了array[i][j]的原始数据
第2个回答  2013-09-13
你这样原来数组里面的数据被后来修改的覆盖了。
比如说当i=1、j=2时,执行array[i][j]=array[j][i]时,araay[1][2]的值被araay[2][1]的值所替代,(你认为)只是简单地将所谓的旧的array[2][1]的值赋值给所谓的新的araay[1][2]。
相似回答