各位帮帮我吧,本人是大一新生,这道矩阵转置题我解出来不对,但是我不知道是哪里错了,也没有可以询问的人


我看到你的代码中有一些问题,我会帮你一一指出并提供修改建议。
在C语言中,数组的索引是从0开始的,而不是从1开始。所以在你的for循环中,i和j应该从0开始,而不是1。
在你的transpose函数中,你试图将a[i][j]的值赋给a[j][i],这实际上并没有完成转置,因为你同时也改变了a[i][j]的值。你需要一个临时变量来存储a[i][j]的值。
printMatrix函数中,你应该在每一行的末尾打印一个换行符。以下是修改后的代码:
#define N 3
void transpose(int a[][N], int n) {
int i, j, tmp;
for (i = 0; i < n; i++) {
for (j = i+1; j < n; j++) {
tmp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = tmp;
}
}
}
void printMatrix(int a[][N], int n) {
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%d\t", a[i][j]);
}
printf("\n");
}
}
int main() {
int a[N][N] = {{1,2,3},{4,5,6},{7,8,9}};
int n = N;
printMatrix(a, n);
transpose(a, n);
printf("transpose results is:\n");
printMatrix(a, n);
return 0;
}
输出结果如下:
原始矩阵:
1 2 3
4 5 6
7 8 9
转置后的矩阵:
1 4 7
2 5 8
3 6 9