🔷 第五章 循环语句
📄 一句话概括

for (①初始化; ②条件; ③更新) { 循环体 } 的执行顺序:①只跑一次 → ②判条件 → 真 → 循环体 → ③更新 → 回②……假 → 出循环。两个细节最容易漏:括号里两个分号钉死不动;在括号里声明的 i 只活到循环结束。实例03 用 for 重写累加,循环体瘦成一行。

📝 本节和前面几节的关系

5.2 画了 for 与 while 的位置对应,本篇把执行顺序按编号走一遍——你会发现就是 5.1.1 的流程图换了标签。变量作用域(2.1.5)在这里出新考点:for 括号里声明、大括号里用,出了循环就失效。

一、执行顺序:按编号走一遍

#include <iostream>
using namespace std;

int main() {
    int sum = 0;                       // 累加器仍然清零

    for (int i = 1; i <= 10; i++) {    // ①②③ 排排站
        sum += i;                      // 循环体只剩正事
    }

    cout << "1 到 10 的累加结果是 " << sum << endl;
    return 0;
}

看到什么算成功:输出 55。对比 5.1.1 的 while 版:初始化和更新搬进了括号,循环体只剩 sum += i; 一行正事——这就是"数圈用 for"的舒适感。

步骤 执行几次 说明
① int i = 1 1 次 进圈前
② i <= 10 11 次 每圈判 + 最后一次"假"
循环体 sum += i 10 次 条件真才跑
③ i++ 10 次 每次循环体跑完才跑

二、变量 i 的"寿命":括号生、大括号死

for (int i = 1; i <= 10; i++) {
    cout << i << " ";      // 活着:在作用域内
}
cout << i << endl;         // 编译错误:i 已经不存在

i 声明在 for 的括号里,作用域就是整个 for 语句(括号 + 大括号),出了循环直接销毁——需要循环后再用 i,就把它声明到 for 前面:

int i;
for (i = 1; i <= 10; i++) { ... }
cout << "循环结束时 i = " << i << endl;   // 11(最后一次"假"判断用的值)

30 秒实验:跑上面"声明在外"的版本,看 i 出来是 11 不是 10——出循环靠的是"i=11 时条件为假",这个 11 正是留给你的"案发现场"。再故意写 for (int i = 1; i <= 10; i++) 循环外用 i,读一遍编译器报错:undeclared identifier。

三、常见误区

  1. "以为更新在循环体前"——顺序是体 → 更新 → 回判;把"打印"和"更新"的先后当回事:for (i=1; i<=3; i++) cout << i; 打出 123(先打印后更新)。
  2. "两个分号写成逗号"——for (int i = 1, i <= 10, i++) 直接语法错误;逗号是 5.2.2 变体里的另一回事。
  3. "括号后面加分号"——for (...); { 循环体 } 的分号让循环体变成空语句,大括号块只执行一次——for 的分号坑和 while 同款,多写必翻车。
自测三问(点开对答案) 1. for 三段各执行几次(1 加到 10)?——①1 次;②11 次;③10 次(跟着循环体走)。 2. for 括号里声明的 i 出循环后还在吗?——不在,作用域到 for 语句结束;要用就声明在 for 前。 3. 循环正常结束后"声明在外"的 i 是多少?——11:最后那次判断 i=11 为假才出循环。

相关笔记