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

C语言图案生成代码疑问:为何输出与预期不符?

理解C语言嵌套循环生成目标图案的逻辑

问题背景

我想要用C语言生成如下图案:

1 1 2 1 3 1
1 2 2 2 3 2
1 3 2 3 3 3
1 4 2 4 3 4
1 5 2 5 3 5

参考了一段代码:

#include <stdio.h>

int main ()
{
    int i;
    int j;
    
    for (i = 1 ; i <= 5 ; i++)
    {
        for (j = 1 ; j <= 3 ; j++)
        {
            printf("%i %i",j,i);
        }
        printf("\n");
    }
    
    return 0;
}

但我不明白为什么这段代码输出的是上面的目标图案,而不是我预想的:

1 2 3 1
1 2 3 2
1 2 3 3
1 2 3 4
1 2 3 5

代码执行逻辑拆解

核心要搞懂嵌套循环的执行顺序和每次printf的输出内容:

  • 外层循环for (i = 1 ; i <= 5 ; i++)控制输出的行数,i从1到5对应5行,每轮外层循环结束后执行printf("\n")换行。
  • 内层循环for (j = 1 ; j <= 3 ; j++)控制每行的输出内容,每轮内层循环会执行3次printf("%i %i",j,i):
    • 当i=1(第一行)时,j依次取1、2、3,分别输出1 1、2 1、3 1,拼接后就是第一行的1 1 2 1 3 1。
    • 当i=2(第二行)时,j依次取1、2、3,分别输出1 2、2 2、3 2,拼接后就是第二行的1 2 2 2 3 2。
    • 以此类推,每一行的i值固定,内层循环每次输出j和当前的i,所以每行都是三组j值+空格+i值的组合。

你预想图案的实现逻辑

你预想的图案是每行先输出1、2、3,再输出当前行号i,但原代码的printf是每次输出两个值(j和i),而非先输出所有j再输出i。如果要得到你预想的图案,代码应该改成:

#include <stdio.h>

int main ()
{
    int i;
    int j;
    
    for (i = 1 ; i <= 5 ; i++)
    {
        // 先输出1、2、3
        for (j = 1 ; j <= 3 ; j++)
        {
            printf("%i ",j);
        }
        // 再输出当前行号i
        printf("%i\n",i);
    }
    
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:02:41