核心执行舞台 · 卡片逐位剥离
等待执行
1.进入循环
2.取个位(%10)
3.处理当前位
4.删个位(/10)
5.判断(!=0)
统计位数累计结果:
尚未开始
当前 number进入状态
495
number % 10当前个位
-
number / 10整数除法
-
count (位数)累计状态
0
number != 0退出判定
准备中
各轮次状态演化跟踪表 (do-while)
记录每轮进入时的 number、计算得到的个位与除法后的新状态
| 轮次 | 进入时 number | number % 10 (个位) | number / 10 (新值) | 当前 count | 判断 (number != 0) |
|---|
C 语言程序对应代码 (模式A: 统计位数)
单步同步高亮
循环不变操作 · 每一轮都在做什么?
4步循环体原型
① 取当前个位
digit = number % 10;
剥离最末尾数字供处理
② 处理这一位
count++; 或 printf("%d", digit);
统计位数或输出当前数字
③ 剔除当前个位
number = number / 10;
整数截断,数字向右收缩
④ 判定剩余数字
while (number != 0);
不为 0 继续,归 0 退出
核心认知:每轮操作完全相同,但
number 的数值逐步递减,驱动循环迈向终点。
为什么输入 0 时 do-while 特别自然?
核心考点
数学上 0 是一位整数。若采用普通
do-while 保证循环体至少执行一次:先进入循环体处理个位 0(count 增加为 1),再判断
while (number != 0),输入为 0 时条件一开始就为假,循环体一次都不执行,得到错误结果 0 位。do-while 保证循环体至少执行一次:先进入循环体处理个位 0(count 增加为 1),再判断
0 != 0 为假而优雅终止!
普通 while 语句:
while (number != 0) { ... }
输入 0: 执行 0 次 ➔ 统计为 0 位 (错误)
do-while 语句:
do { ... } while (number != 0);
输入 0: 至少执行 1 次 ➔ 统计为 1 位 (正确)