C++ 将一个二维数组行列互换 求大神注释讲解下程序

#include<iostream>
using namespacestd;

main()
{
int t,i,j,r[3][3]={{1,2,3},{7,8,9}};
for(i=0;i<2;i++)
{ for(j=i;j<3;j++)
{t=r[i][j];
r[i][j]=r[j][i];
r[j][i]=t;}
}
for(i=0;i<3;i++)
{ for(j=0;j<2;j++)
printf("%d ",r[i][j]);
printf("\n");}
}

#include<iostream>
using namespacestd;
main()
{
 int t,i,j,r[3][3]={{1,2,3},{7,8,9}};//定义要交换的数组r,大小为3*3,实际只使用了2*3
 for(i=0;i<2;i++){ //r的大小是2*3,把2*3变为3*2
     for(j=i;j<3;j++){
       t=r[i][j];
       r[i][j]=r[j][i];
       r[j][i]=t;//交换过程,相当于交换了下标
     }
 }
 for(i=0;i<3;i++){ //显示,因为2*3已经是3*2了
     for(j=0;j<2;j++)
       printf("%d ",r[i][j]);
     printf("\n");
 }
}

追问

for(j=i;j<3;j++)
{t=r[i][j];
r[i][j]=r[j][i];
r[j][i]=t;} 这里不是很明白 初值为什么设置成j=i,交换的话比如r[0][2],要换成r[2][0],但是并没有这个元素啊?

追答

r的大小定义的时候是3*3,最大的是r[2][2],只是没有被赋值而已。
j=i是为了避免又把数值给换回去了,比如原来[1][2]和[2][1]换了,然后你又[2][1]和[1][2]换了,那还有什么意义。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-20
就是把第i行第j列的数字和第j行第i列的数字进行了交换
进行交换要使用中间变量t,数据类型都用int
相似回答