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

C语言二维矩阵原地转置失败:新手求助错误原因

问题分析:原地矩阵转置失效的原因

嘿,你的问题其实很典型——你把每个对称元素交换了两次,相当于又把它们换回了原位!

咱们来拆解一下你的循环逻辑:

for(int f=0;f<3;f++) {
    for(int h=0;h<3;h++) {
        int t=A[f][h];
        A[f][h]=A[h][f];
        A[h][f]=t;
    }
}

当f=0, h=1时,你交换了A[0][1]和A[1][0];但等到f=1, h=0时,你又把这两个元素交换了一次。这么一来,这两个元素等于没动!对角线的元素(比如f=h=0)交换自己和自己,也不会有任何变化。所以整个矩阵转置后和原来完全一样。

修正方案:只交换一次对称元素

要实现原地转置,你只需要处理上三角(或下三角)区域的元素,也就是只交换f < h(或h < f)的情况,避免重复操作。修改后的循环应该是这样:

for(int f=0;f<3;f++) {
    // 内层循环从f+1开始,只处理f < h的情况
    for(int h=f+1;h<3;h++) {
        int t=A[f][h];
        A[f][h]=A[h][f];
        A[h][f]=t;
    }
}

这样一来,每个对称元素对只会被交换一次,对角线元素完全不用碰(因为它们转置后位置不变)。

修正后的运行效果

输入同样的矩阵1 2 3 4 5 6 7 8 9,输出会变成:

Enter the numbers: 
1 2 3 4 5 6 7 8 9
-------------------------------
1 2 3 
4 5 6 
7 8 9 
Now transposing------------------
1 4 7 
2 5 8 
3 6 9 

完美实现了原地转置!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:57:29