使给定的一个3X3的二维整形数组置换
15
Dec
0
数组置换的部分代码如下:
1 2 3 4 5 6 7 8 9 | for(int i=0; i<3; i++) for(int j=i; j<3; j++) { //a[j][i]<->a[i][j] int t; t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t; } |
其中注意的部分是“ for(i=0;i<3;i++) for(j=0;j<3;j++)把所有的元素都循环了,例如a[1][2]对换了,然后a[2][1]也对换了,实际上没有作用了就,你可以改成for(i=0;i<3;i++) for(j=i;j<3;j++) 这样就不会重复对换,就可以实现转置的目的了”,所以需要一个中间变量t来做交换。
看到这里,想到书上之前在数组一章提到过一个[2][2]数组的置换,没有用到函数,直接是使b[j][i]=a[i][j],本着这个方法,我写在了函数里,可是无奈函数中不能返回数组,只能返回数组指针(还没有接触到),所以程序无法运行。本以为卡在了这里,但是看到后面的习题中,我找到了问题所在,只要把置换过的新数组放在全局变量里声明,就可以在主函数中调用了,这样置换函数也不用返回值,只要算出新的数组值就可以了!
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | void change(int a[3][3]); int b[3][3]; //这里声明新数组b为全局变量,方便在主函数调用 void main() { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; change(a); for(int i=0; i<=2; i++) { for (int j=0; j<=2; j++) printf("%d ",b[i][j]); //这里可以直接调用函数 printf("\n"); } } void change(int a[3][3]) { for(int i=0; i<=2; i++) { for (int j=0; j<=2; j++) b[j][i]=a[i][j]; //每次循环把值输入到新数组里 } |
本以为我的方法行不通,结果只是因为没有声明全局变量。这样置换完的数据也完全正确,不管怎那么说,两种方式都会也不错~
Filed Under: 职业生涯
No Comments