女孩和机器人一起思考

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

机器人先穿鞋再穿袜子,女孩笑了:步骤都对,顺序却不对。程序也关心先后。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 初始score 是 3
  2. 先加score 变 5
  3. 再显示屏幕看到 5

顺序执行表示语句按规定顺序发生,后面的语句会看到前面产生的变化。

如果先输出再加分,屏幕显示的就是旧分数。判断、循环和函数调用会改变接下来执行的位置。

01代码为什么有先后顺序?

看一段最简单的程序:

int a = 3;
int b = 5;
int c = a + b;
std::cout << c;

如果没有遇到条件、循环、函数调用等改变控制流的结构,程序通常会按照语句顺序继续往下执行

① a = 3② b = 5③ c = a + b④ 输出 c

02“当前执行到哪一行”是什么意思?

学习程序时,可以想象有一个“执行指针”沿着代码移动,帮助我们观察下一步会发生什么。

但这个“指针”只是教学模型,不是说 CPU 里真的有一根箭头在源代码上移动。

03一行 C++ 就是一条 CPU 指令吗?

不是。一行 C++ 代码可能生成多条机器指令,也可能经过优化后和其他代码合并,甚至被完全优化掉。

04什么会改变执行顺序?

if / else

根据条件选择不同道路。

循环

让一段代码重复执行。

函数调用

暂时去执行另一个函数。

break / continue

改变循环中的正常流程。

05为什么先后顺序很重要?

int a = 3;
int b = a + 2;

第二行要使用第一行得到的 a。如果数据还没准备好,就可能无法得到正确结果。

程序流程就是在研究:下一步执行哪里,以及为什么执行那里。

06怎样手动追踪一段程序?

执行前

a:还没有创建

第 1 行后

a = 3

第 2 行后

a = 3,b = 5

这叫做程序追踪(trace):按实际执行顺序记录变量和输出的变化。

你已经知道了什么

  • 程序有明确的控制流。
  • 没有其他控制结构改变流程时,语句通常按顺序继续执行。
  • “执行指针”是帮助学习的模型,不是真实硬件箭头。
  • 一行 C++ 不一定对应一条机器指令。
  • 读程序时要同步追踪变量、条件和输出。

下一篇:if:让程序学会做选择

轮到你来试一试

先输出 score,再把它加 2,刚才屏幕上的数字会自己改变吗?

想好了吗?点开看解释

通常不会。那次输出已经完成;要显示新分数,需要再次执行输出。