
一起动脑筋 · 先看一个小故事
屏幕答案不对,机器人建议放慢:每执行一条,就在纸上记一次变量。
把过程摊开来看
- 开始x = 2
- 加 3x = 5
- 乘 2x = 10
- 输出10
追踪程序,就是按执行顺序记录状态变化。
表格里可放“当前语句”“执行前”“执行后”三列。先用很小的输入,才能看清每一步。
01为什么“看懂代码”还不够?
很多孩子看完一段代码会觉得“每个单词都认识”,却不知道最后输出什么。
原因是:代码不是静态文字,它会按照控制流动态执行。
02读程序最重要的三个区域
当前执行行
现在程序走到哪里?
变量状态
每个重要变量现在是什么值?
输出结果
到目前为止已经输出了什么?
03先看一个小例子
int sum = 0;
for (int i = 1; i <= 3; i++) {
sum = sum + i;
}
std::cout << sum;
不要直接在脑中“猜”结果,应该逐轮追踪。
04画变量表
| 时刻 | i | sum | 输出 |
|---|---|---|---|
| 循环前 | — | 0 | 空 |
| 第 1 轮后 | 1 | 1 | 空 |
| 第 2 轮后 | 2 | 3 | 空 |
| 第 3 轮后 | 3 | 6 | 空 |
| 循环后 | — | 6 | 6 |
用表格把“脑内运行”变成可见过程,会容易很多。
05遇到 if 怎么追踪?
先算条件,再决定只进入哪一个分支。
if (x % 2 == 0) {
std::cout << "偶数";
} else {
std::cout << "奇数";
}
先算 x % 2→再比较是否 == 0→选择一个分支
06遇到循环怎么追踪?
每一轮都按同样顺序问:
① 条件
还能继续吗?
② 循环体
本轮修改了什么?
③ 更新
控制变量怎样变化?
④ 下一轮
重新检查条件。
07遇到 break / continue 怎么办?
不要再按原来的直线顺序读下去。
break
立即跳到循环结束后的代码。
continue
结束当前轮,按该循环规则进入下一轮。
08程序执行图和真实 CPU 完全一样吗?
不是。我们追踪的是C++ 源代码层面的语义执行过程。
真实 CPU 执行的是经过编译和优化后的机器指令,底层还可能出现流水线、乱序执行、缓存等机制。
你已经知道了什么
- 读程序要按控制流追踪,而不是只看代码外观。
- 可以同步记录当前执行行、变量状态和输出。
- if 要先算条件,再选择分支。
- 循环要逐轮记录条件、循环体、更新和下一轮。
- break 和 continue 会立即改变追踪位置。
- 源代码追踪描述的是语言语义,不等于 CPU 底层逐指令实现。
本专题完成:下一专题进入“数组与字符串”。
轮到你来试一试
若把加 3 和乘 2 交换顺序,结果仍是 10 吗?
想好了吗?点开看解释
不是。先乘得到 4,再加得到 7。追踪能看出顺序影响,而不只看到最后不同。