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

while (条件) { 循环体 } —— 先验后跑:条件真就执行循环体,跑完回来再判,直到条件为假。它把循环三要素摆得明明白白:初始化写在循环前、条件写在括号里、更新写在循环体里。实例01 用它把 1 加到 10,顺手见识"删掉更新就是死循环"。

📝 本节和前面几节的关系

5.1 画了循环三要素和两兄弟全景,本篇落地第一个:while。判断条件就是 3.1.3 的 bool 表达式;sum += i 是 3.1.4 复合赋值上岗;i++ 是第二章自增的实战。while 是所有循环的"母版"——下一节 do...while 只是挪了判断的位置,5.2 的 for 只是把三要素收进一行。

一、while 的完整流程

while (继续条件) {
    循环体;   // 干活 + 更新(让条件趋向假)
}

执行顺序一行读完:判条件 → 真 → 执行 → 回头再判 → … → 假 → 出循环。三要素各就各位:

要素 位置 实例01
① 初始化 while 之前,只做一次 int i = 1, sum = 0;
② 继续条件 while 括号里,每圈都判 i <= 10
③ 更新 循环体最后一行 i++

数次数:判断比执行多一次(最后那次的"假"是出口)——1 加到 10,判断 11 次、执行 10 次。

二、实例 01:用 while 计算 1 到 10 的累加结果

#include <iostream>
using namespace std;

int main() {
    int i = 1;        // ① 初始化:从 1 开始
    int sum = 0;      // 累加器先清零

    while (i <= 10) {          // ② 继续条件
        sum += i;              // 攒一笔
        i++;                   // ③ 更新:往 10 靠近一步
    }

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

看到什么算成功:输出 1 到 10 的累加结果是 55(1+2+…+10 = 10×11÷2 = 55,数学可验)。

while 的两个必查项(写完默数一遍):

  1. 条件里有变量吗? 没有变量就是恒真死循环。
  2. 循环体里动它了吗? 不更新就是死循环——i 永远是 1,i <= 10 永远真。

三、死循环长什么样(故意写一次)

int i = 1;
while (i <= 10) {
    cout << i << endl;   // 只打印不更新
}

现象:屏幕上 1 无限刷。处理:控制台里按 Ctrl + C 强停(Dev-C++ 关掉黑窗口也行)。

死循环不全是错误——"while (true) + 条件 break"是正规写法(5.3.2 详说),但那是有意设计;无意死循环是 bug,三要素自查能拦下九成。

30 秒实验:把实例01 的 i++ 挪到 sum += i 前面再跑——输出变成 65(多加了 11)。一行代码的顺序,就是循环"数到几"的差异:先加后增是加到 10,先增后加是加到 11。

四、常见误区

  1. "条件后面顺手加分号"——while (i <= 10); 的分号是空语句循环体:条件真就无限空转,下面的真循环体反而不归它管。和 4.2 的 if 分号坑同源,编译器警告别无视。
  2. "循环体忘加大括号"——不带大括号时 while 只管紧跟的一条语句;while (...) sum += i; i++; 里 i++ 在循环外,照样死循环。永远写大括号最稳。
  3. "浮点当循环变量"——double d = 0.0; while (d != 1.0) d += 0.1; 因浮点近似值(2.2.2)永远凑不准 1.0,死循环。循环变量用整数最稳。
自测三问(点开对答案) 1. while 执行顺序?——判条件 → 真 → 执行 → 回判……假 → 出循环;判断比执行多一次。 2. 实例01 删掉 `i++` 会怎样?——条件永远真,死循环刷 1,`Ctrl + C` 强停。 3. `while (i <= 10);`(带分号)的后果?——空语句当循环体:条件真时空转不停,真循环体反而一次不执行。

相关笔记