C++ 竞赛入门

8-循环结构

循环结构

本节学会什么

  • for 重复执行固定次数的操作
  • while 在条件成立时持续执行
  • 理解循环变量、循环边界、breakcontinue

为什么需要它

让程序加十个数、输出一百行、检查每个学生的成绩时,不能把相似的代码抄写一百次。循环把“重复做同一件事”写成一次,并让变化的部分交给循环变量。

最小可运行示例

读入 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,检查 i 是否不超过 n,读入并累加,更新 i 后回到条件

关键过程与易错点

  • 循环次数先用具体的小例子数一遍。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 输出 110 的平方。然后把它改成只输出奇数的平方:可以在循环条件中每次加 2,也可以用 if 跳过偶数。

再读入一个正整数 n,计算 1 + 2 + ... + n。分别输入 13100 检查结果。

立即练习

难度 题目 题解 训练目标
基础 洛谷 P5718:找最小值 题解 重复读入数据,并维护当前最小值。
巩固 洛谷 P5719:分类平均 题解 在循环中按条件分类,分别维护计数和总和。
挑战 洛谷 P5720:一尺之棰 题解 while 模拟直到满足停止条件的过程。