You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言矩阵转置函数未更新矩阵问题求助

问题原因

你的转置函数逻辑有误:两层循环遍历了所有行和列,导致每个对称位置的元素被交换了两次,相当于没做任何修改。举个例子:

  • 当row=0, col=1时,交换matrix[0][1]和matrix[1][0];
  • 当row=1, col=0时,又把这两个元素交换回原位置。
    最终矩阵和初始状态完全一致。
解决方案

修改转置函数的内层循环,只处理矩阵的上三角区域(对角线元素无需交换,因为转置后位置不变),确保每个对称对只交换一次。以下是两种实现方式:

方式1:使用数组下标(更直观)

void transposeMatrix(int matrix[3][3]) {
    int row;
    int col;
    int temp = 0;
    for (row = 0; row < 3; row++) {
        // 从row+1开始,避免重复交换
        for (col = row + 1; col < 3; col++) {
            temp = matrix[row][col];
            matrix[row][col] = matrix[col][row];
            matrix[col][row] = temp;
        }
    }
}

方式2:使用指针(符合作业要求)

void transposeMatrix(int matrix[3][3]) {
    int row;
    int col;
    int temp = 0;
    for (row = 0; row < 3; row++) {
        for (col = row + 1; col < 3; col++) {
            temp = *(*(matrix + row) + col);
            *(*(matrix + row) + col) = *(*(matrix + col) + row);
            *(*(matrix + col) + row) = temp;
        }
    }
}
验证效果

运行修改后的代码,输入的示例矩阵:

int sampleM1[3][3] = {{2,2,4}, {1,1,1}, {1,1,1}};

转置后会输出:

matriks before transposition:
 2 2 4
 1 1 1
 1 1 1
matriks after transposition:
 2 1 1
 2 1 1
 4 1 1

内容的提问来源于stack exchange,提问作者k12293139

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 13:45:32