C++ 竞赛入门
8-循环结构
循环结构
本节学会什么
- 用
for重复执行固定次数的操作 - 用
while在条件成立时持续执行 - 理解循环变量、循环边界、
break和continue
为什么需要它
让程序加十个数、输出一百行、检查每个学生的成绩时,不能把相似的代码抄写一百次。循环把“重复做同一件事”写成一次,并让变化的部分交给循环变量。
最小可运行示例
读入 n 个整数并求和:
#include <iostream>
int main() {
int n;
std::cin >> n;
int sum = 0;
for (int i = 1; i <= n; i += 1) {
int x;
std::cin >> x;
sum += x;
}
std::cout << sum << '\n';
return 0;
}
for (初始化; 条件; 更新) 的执行顺序是:先初始化一次;条件为真时执行循环体;再更新;回到条件继续判断。这里 i 依次是 1, 2, ..., n,刚好读取 n 个数。
关键过程与易错点
- 循环次数先用具体的小例子数一遍。
i <= n会执行n次;从i = 0开始时通常写i < n。 - 循环体有多条语句时必须使用
{}。少写括号会让只有第一条语句处于循环中。 while (condition)适合“不知道要重复多少次,只知道何时停止”的情形:
int x;
while (std::cin >> x && x != 0) {
std::cout << x * x << '\n';
}
break立即结束当前这一层循环;continue跳过本轮剩余语句,直接开始下一轮。它们能用,但不要用来掩盖混乱的循环条件。- 每一轮都要让循环变量或停止条件发生变化,否则会造成死循环。
动手检查
用 for 输出 1 到 10 的平方。然后把它改成只输出奇数的平方:可以在循环条件中每次加 2,也可以用 if 跳过偶数。
再读入一个正整数 n,计算 1 + 2 + ... + n。分别输入 1、3、100 检查结果。
立即练习
| 难度 | 题目 | 题解 | 训练目标 |
|---|---|---|---|
| 基础 | 洛谷 P5718:找最小值 | 题解 | 重复读入数据,并维护当前最小值。 |
| 巩固 | 洛谷 P5719:分类平均 | 题解 | 在循环中按条件分类,分别维护计数和总和。 |
| 挑战 | 洛谷 P5720:一尺之棰 | 题解 | 用 while 模拟直到满足停止条件的过程。 |