女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

屏幕答案不对,机器人建议放慢:每执行一条,就在纸上记一次变量。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 开始x = 2
  2. 加 3x = 5
  3. 乘 2x = 10
  4. 输出10

追踪程序,就是按执行顺序记录状态变化。

表格里可放“当前语句”“执行前”“执行后”三列。先用很小的输入,才能看清每一步。

01为什么“看懂代码”还不够?

很多孩子看完一段代码会觉得“每个单词都认识”,却不知道最后输出什么。

原因是:代码不是静态文字,它会按照控制流动态执行

02读程序最重要的三个区域

当前执行行

现在程序走到哪里?

变量状态

每个重要变量现在是什么值?

输出结果

到目前为止已经输出了什么?

03先看一个小例子

int sum = 0;

for (int i = 1; i <= 3; i++) {
    sum = sum + i;
}

std::cout << sum;

不要直接在脑中“猜”结果,应该逐轮追踪。

04画变量表

时刻isum输出
循环前0
第 1 轮后11
第 2 轮后23
第 3 轮后36
循环后66

用表格把“脑内运行”变成可见过程,会容易很多。

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。追踪能看出顺序影响,而不只看到最后不同。