題目要求
寫一函數,使給定的一個二維數組(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; }
查看結果