C语言中二维数组的转置

程序任务是:编程一个4行4列的矩阵输出,然后再转置;
下图是我写的代码,是按照教程写的(对照了几遍,没发现有错误的地方)

img

下图是演示结果:

img

我的问题:
为啥没有转置成功呢?错在哪里了?
我这个是用t做中间值交换的行和列,为啥转置不成功呢?

感谢大家能帮帮我,万分感谢~

你没有理解什么是转置

【以下回答由 GPT 生成】

问题出在转置矩阵的代码部分。在代码matrix[j][i] = t;之前,应该添加一个条件判断,以避免交换对角线上的元素。

以下是修改后的代码:

// 以下是我修改后的代码
#include <stdio.h>

int main() {
    int matrix[4][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12},
        {13, 14, 15, 16}
    };

    int i, j, t;

    // 输出矩阵
    printf("原矩阵:\n");
    for (i = 0; i < 4; i++) {
        for (j = 0; j < 4; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    // 转置矩阵
    for (i = 0; i < 4; i++) {
        for (j = 0; j < i; j++) {
            if (i != j) { // 添加条件判断,避免交换对角线上的元素
                t = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = t;
            }
        }
    }

    // 输出转置后的矩阵
    printf("转置后的矩阵:\n");
    for (i = 0; i < 4; i++) {
        for (j = 0; j < 4; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}

代码的修改在if (i != j)上。这样可以避免对角线上的元素被交换,确保只交换上三角和下三角中的元素。重新编译和运行程序,就能得到正确的转置矩阵。

注意:在实际的应用中,还可以优化转置过程,避免对图像进行不必要的访问。这里提供的解决方案是根据您的代码,并进行必要的修改。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^