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

为何我的C语言阶梯方阵函数中MAX_LENGHT-1可正常工作?

阶梯方阵打印的循环条件问题解析

以MAX_LENGHT=5的情况为例,预期输出每行恰好包含5个带空格的符号(*或+):

* + + + +
 * * + + +
 * * * + +
 * * * * +
 * * * * *

你的当前代码如下:

void quadratoScalaPiu(int MAX_LENGHT) {
    printf("\nCaso 4\n\n");
    // Colonna
    for (int i = 0; i < MAX_LENGHT; i++) {
        for (int j = 0; j <= i; j++) {
            printf("* ");
        }
        for (int j = i; j < MAX_LENGHT - 1; j++) {
            printf("+ ");
        }
        printf("\n");
    }
}

正确循环的计数逻辑

每行由两个循环协作完成符号打印:

  • 打印*的循环:j从0到i(包含i),循环次数是i+1次,每次输出* ,对应i+1个带空格的*。
  • 打印+的循环:条件j < MAX_LENGHT -1意味着j从i开始,最多到MAX_LENGHT-2,循环次数为(MAX_LENGHT-2 - i +1) = MAX_LENGHT -i -1次,每次输出+ ,对应MAX_LENGHT -i -1个带空格的+。

将两个循环的次数相加:(i+1) + (MAX_LENGHT -i -1) = MAX_LENGHT,刚好等于方阵的边长,所以每行的符号总数正好是MAX_LENGHT个,完全匹配预期输出。

错误条件的问题所在

如果把第二个循环条件改成j < MAX_LENGHT,循环次数会变成MAX_LENGHT -i次,两个循环的总次数就成了:(i+1) + (MAX_LENGHT -i) = MAX_LENGHT +1,相当于每行多打印了一个+ ,这就是错误输出每行末尾多一个+的原因。

对应错误输出如下:

* + + + + +
* * + + + +
* * * + + +
* * * * + + 
* * * * * +

最后一行的验证

拿最后一行(i=MAX_LENGHT-1,即i=4)来说:

  • 正确条件下:j=4时,4 < 5-1不成立,第二个循环直接跳过,只打印5个*,符合预期的最后一行。
  • 错误条件下:j=4时,4 <5成立,第二个循环会执行一次,多打印一个+,就出现了错误输出里的* * * * * +。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:30:27