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

C语言使用两个自定义数组填充2×5矩阵时打印输出异常

问题原因

你的矩阵填充逻辑存在下标使用错误,这是导致输出异常的直接原因:

  • 你定义的二维数组m[2][5]访问格式为m[行下标][列下标],合法行下标范围是01,合法列下标范围是04。
  • 填充矩阵的嵌套循环里,外层循环变量i仅遍历0、1两个值(对应2行),内层循环变量j才会遍历0~4全部5个列下标,但你赋值时完全没有使用j作为列下标,反而用仅能取到0、1的i当列下标,相当于内层5次循环一直在重复给m[0][0]、m[1][0]、m[0][1]、m[1][1]这四个位置赋值,列下标为2、3、4的6个元素从未被写入。
  • 局部数组m是栈上分配的未初始化变量,未写入的位置残留值为0,最终输出就只有前两列元素正确,后三列全为0。
修复方案

你可以选择任意一种写法修正,都能得到预期输出:

写法1:按行单独填充(逻辑最清晰,无冗余循环)

不需要嵌套循环填充,逐行拷贝对应数组即可:

int p[5] = {1, 2, 3, 4, 5}; 
int w[5] = {5, 4, 3, 2, 1};
int i, j;
int m[2][5]; // 2行5列存储矩阵

printf("This is the instance you entered: \n\n");
printf("----------------------------------------- \n");

// 填充第0行(利润数组)
for (j = 0; j < 5; j++) {
    m[0][j] = p[j];
}
// 填充第1行(重量数组)
for (j = 0; j < 5; j++) {
    m[1][j] = w[j];
}

// 打印矩阵
for (i = 0; i < 2; i++) {
    for (j = 0; j < 5; j++) {
        printf("%d ", m[i][j]);
    }
    printf("\n");
}

写法2:修正原嵌套循环的下标对应关系

如果要保留两层嵌套遍历的结构,需要把列下标替换为内层循环变量j,按当前行号判断数据源:

// 填充矩阵
for (i = 0; i < 2; i++) // 遍历行
{
    for (j = 0; j < 5; j++) // 遍历列
    {
        m[i][j] = (i == 0) ? p[j] : w[j];
    }
}

注意:写循环操作数组时,一定要确认循环变量和数组下标的对应关系,避免出现循环正常执行但下标没跟着迭代的无效逻辑,这类问题不会触发编译报错,只会出现逻辑结果异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:45:44