考纲要求
- 掌握 if 嵌套与 if-else if 多分支的写法,理解条件按从上到下的顺序依次判断。
- 掌握 for 与 while 的嵌套,能确定内外层循环各自执行的次数和先后关系。
- 能根据嵌套结构推算执行次数,例如外层 3 次、内层 4 次时循环体共执行 12 次。
- 能用嵌套结构解决查表、图形输出、简单统计这类综合问题。
典型题型
- 给出嵌套循环,要求写出输出内容或统计循环体执行次数。
- 用嵌套分支完成成绩等级划分、闰年判断等分段问题。
- 输出指定行数与列数的图形,例如三角形或乘法表。
常见错误
- 多分支写成多个独立 if,导致同时满足多个条件时重复执行。互斥条件应使用 else if。
- 内外层循环变量用混,内层循环次数依赖外层变量时导致次数错误。
- 把累加变量定义在循环内部,导致每次进入循环都被清零。
- 以为 break 能跳出所有嵌套循环。break 只跳出当前所在的那一层。
深入理解
先问「每一层各管什么」
嵌套结构的难点从来不是语法,而是职责划分。外层循环通常管「第几轮」,内层循环管「这一轮里做几件事」。例如输出九九乘法表,外层 i 是行号,内层 j 是列号,且 j 的上界依赖 i:
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++)
cout << j << "*" << i << "=";
cout << endl;
}写之前先用一句中文说清每一层的作用,说不清就是还没想明白,直接写一定会乱。
内层执行次数是乘出来的
外层执行 m 次、内层固定执行 n 次时,内层循环体一共执行 m × n 次。如果内层的次数随外层变化,就要把每一轮相加:上例中内层执行 1 + 2 + … + 9 = 45 次。
数「执行多少次」的题,一定要区分问的是内层循环体还是整个内层循环,也一定要区分「循环条件判断次数」和「循环体执行次数」——for (i = 1; i <= n; i++) 的条件判断执行 n + 1 次,循环体执行 n 次,多出来的那一次是退出时的那次判断。这是选择题的高频陷阱。
break 和 continue 只认最内层
在嵌套循环里,break 只跳出当前所在的这一层,外层继续跑。如果确实需要一次跳出所有层,常用做法是设一个标志变量,内层跳出后由外层检查标志再 break;或者把嵌套循环封装成函数,用 return 直接返回。
continue 同理,只跳过最内层的本轮,内层继续下一轮,外层完全不受影响。嵌套结构里出现这两个关键字时,先确定它写在哪一层,再想它影响谁,答案就出来了。
自编例题
用嵌套循环输出乘法表
输出 1 到 5 的乘法表,第 i 行输出 i×1 到 i×i。请说明内外层循环各执行多少次。
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) cout << i * j << ' ';
cout << endl;
}外层 i 从 1 到 5 共执行 5 次,内层 j 从 1 到 i,因此第 i 行输出 i 个数,总共输出 1+2+3+4+5 等于 15 个结果。每行结束要换行,换行语句必须放在内层循环之外、外层循环之内;放错位置会让所有结果挤在一行,或者每输出一个数就换一次行。分析嵌套循环时,先分别写出两层的起止与步长,再相乘或累加,比凭感觉数更可靠。
相关真题
这块内容在整条路线里的位置:GESP C++ 2 级备考路径。
READY TO START
开始练习
先做一套本级别测评,报告会指出哪些知识点需要重点补;再回到本页对照考纲要求逐条核对,把不确定的条目记下来集中练。
常见问题
嵌套循环执行次数怎么算?
内层次数固定时,总次数等于外层次数乘以内层次数;内层次数随外层变化时,把每一轮的内层次数相加。
if 和 else if 有什么区别?
多个独立 if 会逐个判断,可能同时执行多个分支;else if 只有前面条件都不成立时才继续判断,适合互斥的多分支。
break 和 continue 在嵌套里的作用?
两者都只作用于当前这一层循环:break 结束本层循环,continue 跳过本层本次剩余语句,外层循环不受影响。
