写一个函数,使给定的一个3X3的二维整型数组转置,即行列互换.

#include<stdio.h>
void f(int b[][3])
{
int t,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++) //这里是否有什么问题,为什么输出结果不对呢?
{
t=b[i][j];
b[i][j]=b[j][i];
b[j][i]=t;
}
for(i=0;i<3;i++)
{
{
for(j=0;j<3;j++)
printf("%d ",b[i][j]);
}
printf("\n");
}
}
void main()
{

int a[3][3]={1,2,3,4,5,6,7,8,9};
f(a);

}
高手请指点.!

for(i=0;i<3;i++)
for(j=0;j<3;j++){
}
改为
for(i=0;i<3;i++)
for(j=i;j<3;j++){
}
注意,在你转置的代码中,出了一个小错误,就是覆盖问题,拿你的代码来说,在处理之前,数组是
1 2 3
4 5 6
7 8 9
经过第一次内循环之后,外圈是
1 4 7
2
3
在你的代码里,再次对a[1][0]和a[0][1]进行了交换操作,这样一来,刚置换完成的数组又乱了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-21
你打注释那行中改成 j=i就好了。
矩阵转置的算法搞错了。
第2个回答  2012-12-21
你实际上将数组转置了2次
第3个回答  2012-12-21
老兄你这个太复杂了
void f(int a[][3],int n)
{
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
printf("%d ",a[j][i]);
printf("\n");
}
}
void main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
f(a,3);
}
相似回答