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

为何下述C语言代码输出不符合预期?求问题原因排查

问题分析与解决

代码核心问题

你的矩阵转置逻辑存在重复交换的错误:双重循环遍历了所有i和j的组合,导致每一对非对角线元素被交换两次,最终又回到初始状态。同时对角线元素(i=j时)的自交换属于无意义操作。

输出对比

  • 预期的转置输出(原矩阵行转列):
    135
    246
    797
    
  • 代码实际输出(与原矩阵完全一致):
    127
    349
    567
    

原因解释

举个例子:当i=0,j=1时,你交换了a[0][1]和a[1][0];但当循环走到i=1,j=0时,又会把这两个元素交换回去。所有非对角线元素都经历了两次交换,等于没有改变;对角线元素自交换后值不变,最终矩阵和原矩阵完全相同,输出自然和原矩阵遍历结果一致。

修正后的代码

只需要让内层循环从j = i + 1开始,避免重复交换,同时将转置操作和输出操作分离,逻辑更清晰:

#include <stdio.h>
int main()
{
    int a[3][3] = {{1, 2, 7}, {3, 4, 9}, {5, 6, 7}};
    int temp;
    
    // 完成矩阵转置,仅交换上三角与下三角元素
    for (int i = 0; i < 3; i++)
    {
        for (int j = i + 1; j < 3; j++)
        {
            temp = a[i][j];
            a[i][j] = a[j][i];
            a[j][i] = temp;
        }
    }
    
    // 遍历输出转置后的矩阵
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            printf("%d", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:07:10