📄 一句话概括
第五章解决同一个问题:让程序"回头再来一次"。四块拼图——三要素(5.1:初始化/条件/更新)、三种写法(5.1~5.2:while 先验后跑、do...while 先跑后验、for 三段式)、循环控制(5.3:控制变量 + break 收工 / continue 告假 / goto 别用)、嵌套(5.4:外管行、内管个数)。顺序 + 分支 + 循环三大结构至此集齐——有了它们,任何逻辑都写得出来。
一、本章知识地图
| 块 | 小节 | 一句话要点 |
|---|---|---|
| 三要素 | 5.1 | 初始化(从哪开始)· 继续条件(啥时候停)· 更新(怎么靠近停);缺更新 = 死循环 |
| 两个兄弟 | 5.1.1 / 5.1.2 | 实例01/02 都算 1~10 累加 = 55;差别只在"第一次跑不跑" |
| for | 5.2 / 5.2.1 / 5.2.2 | 三要素收进一行;①只一次 ②③每圈;变体:省段要搬责任、for(;;) = forever |
| 控制 | 5.3.1 | 控制变量三种身份:计数器 / 累加器 / 哨兵 |
| 5.3.2 / 5.3.3 | 实例04 找到就停(break)· 实例05 不及格跳过(continue) | |
| 5.3.4 | 实例06 用 goto 手搓循环 → 语法成立、做法不推荐 | |
| 嵌套 | 5.4 | 实例07 打印三角形;外圈 5 行、内层 j <= i 打 1~5 个,共 15 星 |
二、必须记住的五个结论
- 三要素缺一不可——初始化、继续条件、更新;更新漏了 = 死循环,写完默数一遍
- while 与 do...while 只差"第一次"——可能 0 次 vs 至少 1 次;"先问再做"(菜单、校验)用 do...while
- 数圈用 for,看情况用 while——三要素排排站是 for 的舒适区;哨兵循环(数据决定圈数)是 while 的主场
- break 收工、continue 告假——break 跳过更新与判断、直接出循环;continue 回更新、下一圈照跑。while 里 continue 前必须先更新,否则死循环
- 嵌套 = 外圈一格、内圈一整圈——总次数 = 外 × 内;两层变量名必须不同,break 只跳最内层
三、动手 Demo:两关自测
第一关(写程序):打印九九乘法表的下三角(第 i 行只打到 i × i),格式 1*1=1、2*1=2 2*2=4……
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 9; i++) { // 外圈:9 行
for (int j = 1; j <= i; j++) { // 内圈:每行 i 个
cout << j << "*" << i << "=" << j * i << "\t";
}
cout << endl;
}
return 0;
}
看到什么算成功:输出下三角的乘法表,第 1 行只有 1*1=1,第 9 行有 9 个式子。卡住回看:5.4 的 j <= i(内层上界跟外层走)、\t 是制表符(2.2.3 转义字符)。
第二关(找错):下面这段想"把 1 到 100 里第一个能被 7 整除的数打出来"并在打印后停下,有四处问题:
#include <iostream>
using namespace std;
int main() {
int i = 1;
while (i <= 100);
if (i % 7 == 0)
cout << i << endl;
break;
i++;
return 0;
}
答案(四处):
while (i <= 100);——分号 = 空语句循环体,真循环体成了"只执行一次的普通代码"break;没套在 if 里(缺大括号)——它在 if 之外,只要走到就无条件退出循环i++的位置——若 break 生效,i++ 被跳过(本题正好要停,但习惯上更新必须在 continue/break 之前想清楚)- 真要"找到就停",用 for + break 更清楚:
for (int i = 1; i <= 100; i++)
if (i % 7 == 0) { cout << i << endl; break; } // 输出 7
30 秒实验:把上面修好的 while 版跑通,确认输出 7;再把 % 7 改成 % 11,输出应为 11。
四、常见误区(本章汇总)
- "编译通过 = 逻辑对"——本章又是"不报错三连":分号空语句、忘更新死循环、continue 跳掉更新。循环跑不动或跑不停,先查三要素与更新位置
- "break 和 continue 差不多"——一个收工一个告假;混用会让"后面的数据该不该处理"完全反掉
- "嵌套越深越强"——超过三层先想能不能拆;内层上界能用外层变量是好事,但变量名必须分开
- "goto 是万能钥匙"——结构化三件套足够表达一切;goto 只作"了解"
自测五问(点开对答案)
1. 循环三要素?——初始化、继续条件、更新;缺更新是死循环。 2. while 与 do...while 的区别?——先验后跑(可 0 次)vs 先跑后验(至少 1 次)。 3. `for(;;)` 是什么意思?——三段全省略、条件永真,靠 break 出门(forever)。 4. break 与 continue 的区别?——break 结束整个循环(跳过更新与判断);continue 只跳本轮剩余、回更新。 5. 嵌套循环 4 行 × 每行 5 个,循环体共跑几次?——20 次(外 × 内)。- ☑ 第六章 函数 —— 已完结:小结(函数 = 把一段活儿打包成一条命令)
相关笔记
- 小结 —— 上一章知识地图(真假的来源)
- while 和 do...while 循环 —— 三要素与两兄弟
- 循环的嵌套 —— 本关自测的地基
- 小结 —— 下一章知识地图:把逻辑装进零件盒
- 🔷 C++基础 · 索引 —— 全课路线图