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

C语言嵌套while循环实现乘法表:代码异常原因及差异分析

两层while循环实现乘法表的问题分析

第一段代码的问题

#include <stdio.h>

int main(void) {
    int i = 2, j = 1;
    
    while (i < 10) {
        
        while (j < 10) {
            printf("%d * %d = %d\n", i, j, i * j);
            j++;
        }
        
        i++;
    }
    return 0;
}

这段代码仅输出2×1=2至2×9=18的结果,无法生成完整乘法表,问题出在变量j的生命周期:

  • j在程序开头仅初始化一次为1,第一次外层循环(i=2)执行时,内层循环会将j递增到10,此时内层循环的j < 10条件不成立,循环结束。
  • 后续外层循环迭代(i=3、4……9)时,j的取值仍为10,内层循环的触发条件直接不满足,因此不会输出任何内容。

第二段代码的修正逻辑

#include <stdio.h>

int main(void) {
    int i = 2, j = 0;
    
    while (i < 10) {
        j = 1; // *关键修正点*
        while (j < 10) {
            printf("%d * %d = %d\n", i, j, i * j);
            j++;
        }
        
        i++;
    }
    return 0;
}

这段代码能正常生成完整乘法表,核心改动就是把j = 1的重置操作放到了外层循环内部:

  • 每一次外层循环切换到新的乘数i时,都会将j重新初始化为1,确保内层循环能从1开始遍历到9,输出当前i对应的所有乘法表达式。

核心差异

两段代码的本质区别仅在于变量j的重置时机:

  • 第一段代码中j仅在程序启动时初始化一次,后续没有重置,导致外层循环后续迭代时内层循环无法触发。
  • 第二段代码在每次外层循环启动时重置j为1,保证了每个i值都能对应完整的j遍历过程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:46:21