是5.1呀 2023-11-09 17:37 采纳率: 83.3%
浏览 3
已结题

我这道矩阵的转置做出来是错的

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

img

img

  • 写回答

2条回答 默认 最新

  • 山亦玉 2023-11-09 17:52
    关注

    我看到你的代码中有一些问题,我会帮你一一指出并提供修改建议。

    1. 在C语言中,数组的索引是从0开始的,而不是从1开始。所以在你的for循环中,ij应该从0开始,而不是1。

    2. 在你的transpose函数中,你试图将a[i][j]的值赋给a[j][i],这实际上并没有完成转置,因为你同时也改变了a[i][j]的值。你需要一个临时变量来存储a[i][j]的值。

    1. 在你的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    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月17日
  • 已采纳回答 11月9日
  • 创建了问题 11月9日