女孩和机器人一起思考

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

女孩把三天读书页数 2、3、4 累加。机器人得记住前一天已经累计多少。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 开始total = 0
  2. 第一天0 加 2 得 2
  3. 第二天2 加 3 得 5
  4. 第三天5 加 4 得 9

累加变量把上一轮的结果带到下一轮。

把 total 初始化放在循环外,就像准备一张持续使用的统计表。每次更新都在已有结果上继续。

01循环变量为什么一直在变?

for (int i = 1; i <= 3; i++) {
    std::cout << i << '\n';
}
第 1 轮

i = 1

第 2 轮

i = 2

第 3 轮

i = 3

每轮结束后的 i++ 修改了同一个循环控制变量的值。

02循环会复制三份 i 吗?

不是。这个例子中不是预先复制三份 i,而是循环控制流反复使用并修改同一个对象。

03循环外的变量怎样累积结果?

int sum = 0;

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

sum = 0

第 1 轮后

sum = 1

第 2 轮后

sum = 3

第 3 轮后

sum = 6

04循环体里声明变量会怎样?

for (int i = 0; i < 3; i++) {
    int x = i * 10;
    std::cout << x;
}

x 的作用域只在循环体的大括号内。每次进入这个块时,会开始一个新的 x 对象生命周期;离开这一轮的块后,它的生命周期结束。

05循环结束后还能用 i 吗?

for (int i = 0; i < 3; i++) {
    // ...
}

std::cout << i; // 错误

这里的 i 声明在 for 初始化部分,它的作用域属于整个 for 语句,离开循环后就不能再用这个名字。

06怎样追踪多个变量?

可以画一张小表格:

轮次isum
开始10
第 1 轮后21
第 2 轮后33
第 3 轮后46

这就是读循环最有效的方法之一。

你已经知道了什么

  • 循环不会预先复制很多份变量。
  • 循环控制变量会按更新规则不断改变。
  • 循环外变量可以在多轮之间保存累积结果。
  • 循环体内部变量有自己的作用域和生命周期。
  • 用表格追踪变量,是读懂循环的重要方法。

下一篇:循环里面还能放循环吗?

轮到你来试一试

每轮都先令 total = 0,再加当天页数,最后会是 9 吗?

想好了吗?点开看解释

不会,最后只留下第三天的 4。要累计三天,应只在开始时清零。