第 9 课:循环结构
本课学习目标: 1. 彻底读懂
for循环、while循环和do-while循环的执行过程。 2. 掌握循环三要素:初始化、条件、更新,学会避免死循环。 3. 熟练掌握循环中累加(sum += i)与计数(湿cnt++)的标准模型。 4. 深刻理解并区分break(直接结束整个循环)与continue(跳过当前这一轮,进入下一轮)。 5. 掌握用while循环处理数位拆分(取个位、去个位)的经典套路。
一、 为什么要用循环结构?
如果我们要输出 1 到 5,手写 5 行 cout 还能应付:
cout << 1 << " ";
cout << 2 << " ";
cout << 3 << " ";
cout << 4 << " ";
cout << 5 << " ";
如果要输出 1 到 100 呢?手写 100 行显然不现实。循环结构就是用来让计算机帮我们“重复执行某段代码”的利器。
二、 最常见的 for 循环
for 循环是一级考试中最常出现的循环结构。
1. 基本语法结构
for (初始化; 条件; 更新) {
// 循环体(重复执行的代码)
}
2. 执行步骤拆解(以输出 1 到 5 为例)
for (int i = 1; i <= 5; i++) {
cout << i << " ";
}
- 第 1 步(初始化):执行
int i = 1;(整个循环只在最开始跑这一次)。 - 第 2 步(条件判断):检查
i <= 5是否成立。如果成立,进入第 3 步;如果不成立,循环直接结束。 - 第 3 步(执行循环体):打印当前的
i。 - 第 4 步(更新):执行
i++;(此时i变成 2)。 - 第 5 步:回到第 2 步继续循环,直到条件不成立退出。
📌 循环次数怎么算? *
for(int i = 1; i <= 10; i++)➡️i取值1, 2, 3, ..., 10,共执行 10 次。 *for(int i = 0; i < 10; i++)➡️i取值0, 1, 2, ..., 9,共执行 10 次。
三、 while 循环与数位处理
while 循环通常适用于循环次数不确定、只知道结束条件的场景。
1. 基本语法结构
int i = 1; // 1. 初始化
while (i <= 5) { // 2. 条件判断
cout << i;
i++; // 3. 更新(千万别漏,否则死循环!)
}
2. 🌟 必考杀手锏:while 处理整数数位(黄金模板)
在一级考试中,经常要求“输入一个整数,求它的数位和 / 反转数字 / 统计奇数位”。这依赖 while 的经典数位拆分法:
int n;
cin >> n;
while (n != 0) {
int d = n % 10; // 步骤1:用 % 10 取出当前个位数
// 这里可以对 d 进行处理(如累加、判断奇偶)
n /= 10; // 步骤2:用 / 10 悄悄去掉个位数,向右进位
}
- 例如输入
123: - 第 1 轮:
n = 123,个位d = 3,之后n变成12。 - 第 2 轮:
n = 12,个位d = 2,之后n变成1。 - 第 3 轮:
n = 1,个位d = 1,之后n变成0。 n == 0循环结束。完美把每一位剥离出来!
四、 累加与计数模型(考试核心考点)
- 累加模型(求总和):
cpp int sum = 0; // ⚠️ 注意:累加器必须初始化为 0! for (int i = 1; i <= 5; i++) { sum += i; // 等价于 sum = sum + i; } - 计数模型(数个数):
cpp int cnt = 0; // ⚠️ 计数器也必须初始化为 0! for (int i = 1; i <= 10; i++) { if (i % 2 == 0) { cnt++; // 满足条件时,个数加 1 } }
五、 break 与 continue 的本质区别
这是程序阅读题和判断题的常客:
| 关键字 | 英文直译 | 核心作用 | 代码表现 |
|---|---|---|---|
break |
中断 / 逃跑 | 直接彻底结束整个循环,后面的轮次全都不过了。 | 见下方对比代码 1 |
continue |
继续 / 跳过 | 跳过当前这一轮循环剩下的代码,直接强行进入下一轮。 | 见下方对比代码 2 |
🔍 代码直观对比:
// 1. 使用 break
for (int i = 1; i <= 5; i++) {
if (i == 3) break;
cout << i << " ";
}
// 输出结果:1 2 (当 i=3 时直接整个循环罢工了)
// 2. 使用 continue
for (int i = 1; i <= 5; i++) {
if (i == 3) continue;
cout << i << " ";
}
// 输出结果:1 2 4 5 (当 i=3 时只跳过了当轮的cout,接着去执行 i=4 去了)
六、 GESP 一级真题与例题精讲
练一练 1:for 循环与累加
【题目】 下面程序输出是( )。
int sum = 0;
for (int i = 1; i <= 5; i++)
sum += i;
cout << sum;
A. 5
B. 10
C. 15
D. 20
正确答案:C 名师解析: 循环变量
i依次取1, 2, 3, 4, 5。sum依次加上这些数:0 + 1 + 2 + 3 + 4 + 5 = 15。最终输出15。
练一练 2:break 提前终止循环
【题目】 下面程序输出是( )。
for (int i = 1; i <= 5; i++) {
if (i == 3)
break;
cout << i;
}
A. 12
B. 123
C. 1245
D. 12345
正确答案:A 名师解析: 当
i = 1, 2时正常输出;当i = 3时触发if (i == 3),执行break,循环立即彻底终止,3及其后面的4, 5均不输出。所以屏幕上打印出12。
练一练 3:while 数位求和
【题目】
输入 123 后,下面程序的输出是( )。
int n;
cin >> n;
int sum = 0;
while (n != 0) {
sum += n % 10;
n /= 10;
}
cout << sum;
A. 123
B. 6
C. 3
D. 1
正确答案:B 名师解析: 标准的数位求和模板: * 第 1 轮:取个位
3加到sum(sum=3),n变成12; * 第 2 轮:取个位2加到sum(sum=5),n变成1; * 第 3 轮:取个位1加到sum(sum=6),n变成0; * 循环结束,输出sum的值为6(即 $1+2+3=6$)。
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com