📄 一句话概括
循环 = 让同一批语句"回头再来一次",直到条件说停。所有循环都由三要素搭起来:①初始化(从哪开始)、②继续条件(啥时候停)、③更新(怎么一步步靠近停)。本章两兄弟只差一件事:while 先验后跑(可能一次不跑),do...while 先跑后验(至少跑一次)。
📝 本节和前面几节的关系
第四章 if 让程序"看情况办事",本章让程序"反复办事"——判断条件仍然是 bool 表达式(3.1.3),循环体仍然是大括号作用域(2.1.5)。4.1 画过三大结构(顺序/分支/循环),前两块已经上岗,本章补上最后一块。顺序 + 分支 + 循环凑齐,任何逻辑都写得出来——这是编程语言的"地基三件套"。
一、循环三要素:所有循环的共同骨架
不管写法叫 while、do...while 还是下一节的 for,拆开看都是同三件事:
| 要素 | 回答的问题 | 实例01 里对应 |
|---|---|---|
| ① 初始化 | 循环从哪开始? | int i = 1; |
| ② 继续条件 | 啥时候继续、啥时候停? | i <= 10 |
| ③ 更新 | 每圈怎么靠近"停"? | i++ |
三要素缺一不可:缺①条件没法判断(垃圾值上岗);缺③条件永远不变 → 死循环(程序转不停,只能强关)。
二、两兄弟:只差"第一次跑不跑"
| while | do...while | |
|---|---|---|
| 顺序 | 先判条件,真才跑 | 先跑一圈,再判条件 |
| 最少执行次数 | 0 次(条件一开始就假) | 1 次(跑了才验) |
| 好比 | 先看票再上车 | 先上车后补票 |
| 典型用途 | 次数不定、可能一次都不做 | 菜单循环、输入校验(总得先问一次) |
记忆锚点:do...while 的 do 在前——先干(do)再说;而且它末尾必须带分号 while (条件);,这是它独有的记号。
三、动手 Demo:纸面跑一圈(不写代码先跑脑子)
用实例01 的任务"1 加到 10",把 while 的流程在纸上走前三轮:
| 轮次 | 进循环前 i | 条件 i<=10? |
循环体 sum += i | 更新后 i |
|---|---|---|---|---|
| 1 | 1(初始化) | 真,进 | sum = 1 | 2 |
| 2 | 2 | 真,进 | sum = 3 | 3 |
| 3 | 3 | 真,进 | sum = 6 | 4 |
| … | … | … | … | … |
| 10 | 10 | 真,进 | sum = 55 | 11 |
| 11 | 11 | 假,停 | —— | 输出 sum = 55 |
看到什么算成功:数得出"判断执行了 11 次、循环体只跑 10 次"——判断总比执行多一次(最后那次的"假"就是出口)。
30 秒实验:把上表第一行的 i 改成 11(初始化就超标)——判断第一次就是假,循环体一次不跑,sum 还是 0。这正是 while 与 do...while 的分水岭(下一节实验)。
四、常见误区
- "循环就是重复,随便写写"——循环体里必须有让条件趋向假的更新,否则是死循环;写完循环先默数三要素齐不齐。
- "while 和 do...while 随便换"——绝大多数场景等价,但"至少做一次"的语义(先问再验)只有 do...while 表达得干净。
- "条件写得越复杂越厉害"——继续条件要能一眼看出何时停;看不出停点的循环,读者(包括三周后的你自己)不敢改。
自测三问(点开对答案)
1. 循环三要素是什么?——①初始化 ②继续条件 ③更新(缺更新就是死循环)。 2. while 和 do...while 最大的差别?——while 先判后跑(最少 0 次);do...while 先跑后判(最少 1 次)。 3. "判断执行了 11 次、循环体 10 次"说明什么?——循环靠最后一次"假"的判断出场;判断永远比执行多一次。- ☐ 5.1.1 while 循环(下一节)
相关笔记
- 决策分支 —— 三大结构在此集齐最后一块
- 逻辑运算符 —— 继续条件就是 bool 表达式
- 🔷 C++基础 · 索引 —— 全课路线图