写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。
#include<stdio.h>
void transpose(int a[3][3]);
int main(){
int a[3][3];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
scanf("%d",&a[i][j]);
}
}
transpose(a);
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
}
void transpose(int a[3][3]){
int i,j,temp;
for(i=0;i<3;i++){
for(j=i+1;j<3;j++){
temp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = temp;
}
}
}
要注意,transpose函数中,j是从i+1开始。
如果对所有的j值都交换(i,j)处的元素和(j,i)处的元素,我们最终会交换每个元素两次,这会导致矩阵被恢复到原始状态。
因此,我们只需要交换对角线上方的元素。