#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
int m;
int a[10]={0};
int b[3][3];
scanf("%d",&n);
while(n--){
for(int i=0;i<9;i++){
scanf("%d",&m);
a[i]=m;
}
/*
for(int i=0;i<9;i++){
printf("%d ",a[i]);
if((i+1)%3==0)
printf("\n");
}
*/
int k=0;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
b[i][j]=a[k];
// printf("%d ",b[i][j]);
k++;
}
}
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
printf("%d ",b[j][i]);
}
}
}
return 0;
}
重点代码部分:(转制部分)
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
printf("%d",b[j][i]); //求转置矩阵重点代码
}
}
把原矩阵的输出b[i][j]换为b[j][i].
原因:
原矩阵的二位数组下标为: 转置后的二位数组下标为:
00 01 02 00 10 20
10 11 12 01 11 21
20 21 22 02 12 22
原来的列变为行,那么每个二位数组的下标的x与y都进行了一次对换,所以在求转置矩阵时只需把行下标与列下标对换输出即可。