题目要求
写一函数,使给定的一个二维数组(3×3)转置,即行列互换。
思路分析
得知道行类互换,不清楚没关系,自己画个图就明白了,假设a[3][3]={{1,2,3},{4,5,6},{7,8,9}}
0 1 2 0 1 2 3 1 4 5 6 2 7 8 9 a[0][0]=1,a[0][1]=2,a[0][2]=3,a[1][0]=4...
进行行列互换之后,a[0][0],a[1][1],a[2][2]对应的元素是不会改变的,
a[0][1] 就应该转换为 a[1][0], 此时 a[1][0]=2, a[0][1]=4...
0 1 2 0 1 4 7 1 2 5 8 2 3 6 9
用函数的代码不好写,那就先写不用函数的
#include <stdio.h> #define N 3 int main() { int a[N][N] = {{1,2,3},{4,5,6},{7,8,9},}; int i, j, temp; //显示原数组 printf("The array is:\n"); for(i=0;i<N;i++) { for(j=0;j<N;j++) printf(" %d", a[i][j]); printf("\n"); } //以下代码是对行列进行互换的核心代码。 //主要思想是对从左上至右下以下的半个数组进行分析,找出全部可以进行对调的数 //找出i、j和N之间的规律。 for(i=1;i<N;i++) for(j=0;j<i;j++) { temp=a[i][j]; a[i][j]=a[j][i]; a[j][i]=temp; } //显示转制后数组 printf("After twist the array is:\n"); for(i=0;i<N;i++) { for(j=0;j<N;j++) printf(" %d", a[i][j]); printf("\n"); } return 0; }
查看结果
代码是没毛病的,然后咱们把代码改成调用函数形式的
#include <stdio.h> #define N 3 int f(int a[][N]) { int b[N][N],i,j; printf("交换前:\n"); for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("%d\t",a[i][j]); } printf("\n"); } for(i=0;i<N;i++) //行列转换 { for(j=0;j<N;j++) { b[i][j]=a[j][i]; } } printf("交换后:\n"); for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("%d\t",b[i][j]); } printf("\n"); } } int main() { int a[][N]={{1,2,3},{4,5,6},{7,8,9}}; f(a); return 0; }
查看结果