循环结构(while、for 与嵌套)

一句话目标:让程序学会”重复做事”,而且知道什么时候停


第一部分:while 循环 —— 先判断,后执行

while (条件成立) {
    // 循环体:重复执行的代码
}

执行逻辑:检查条件,为真才进去执行;执行完回来检查,直到条件为假才停。

例 1:输出 1 到 100。

int i = 1;
while (i <= 100) {
    cout << i << endl;
    i++;               // 别忘了让 i 变化,否则死循环!
}

⚠️ 循环里一定要有让条件最终变假的语句(这里是 i++),否则程序永远停不下来。


第二部分:do-while —— 先执行,后判断

do {
    // 循环体
} while (条件成立);

和 while 唯一的区别:先执行一次,再判断条件。所以至少会执行一次

whiledo-while
判断时机先判断后判断
最少执行0 次1 次

第三部分:i++++i

  • i++(后置):先用 i 的值,然后 i 加 1。
  • ++i(前置):先把 i 加 1,再用新值。
int i = 5;
cout << i++;   // 输出 5,之后 i 变 6
int j = 5;
cout << ++j;   // 输出 6(先加再用)

单独占一行当计数器时,i++++i 效果一样,随便用。


第四部分:for 循环 —— 固定次数的首选

for (初始化; 循环条件; 每轮结束操作) {
    // 循环体
}

执行步骤:

  1. 先执行初始化(只一次);
  2. 判断循环条件:真→执行循环体;假→结束;
  3. 执行每轮结束操作(如 i++),回到第 2 步。
for (int i = 1; i <= 100; i++) {
    cout << i << endl;
}

计数器 i 可以”当场定义”(写在 for 里),它的作用范围就只在这个循环内。


第五部分:循环嵌套

循环里再套循环,常用于二维的事情(打印图形、处理表格)。

例 2:输入 n,打印边长为 n 的 * 正方形。

int n;
cin >> n;
for (int i = 1; i <= n; i++) {      // 外层:控制行
    for (int j = 1; j <= n; j++) {  // 内层:控制每行的列
        cout << "*";
    }
    cout << endl;                   // 每行结束换行
}

理解口诀:外层管行,内层管列;内层整个跑完,外层才走一步。


第六部分:break 与 continue

  • break直接跳出整个循环。
  • continue跳过本轮剩下的语句,直接进入下一轮。

例 3:2~100 的偶数求和,但排除 10 的倍数。

int sum = 0;
for (int i = 2; i <= 100; i += 2) {
    if (i % 10 == 0) continue;   // 是 10 的倍数,跳过本轮
    sum += i;
}
cout << sum;

课堂预测题:下面会输出什么?

for (int i = 1; i <= 10; i++) {
    if (i % 2 == 0) continue;   // 偶数跳过
    cout << i << " ";
    if (i >= 5) break;          // 到 5 就停
}

答案:1 3 5(输出 1、3、5 后,i=5 触发 break)。


小结

  • while 先判断后执行;do-while 先执行后判断(至少一次)。
  • for 适合固定次数:初始化 → 判断 → 循环体 → 结束操作。
  • 嵌套循环:外层管行、内层管列。
  • break 跳出整个循环,continue 跳过本轮。
  • 永远确保循环条件最终会变假,避免死循环。

课后小练

  1. 输入 n,求 1+2+…+n(洛谷 P5718 类)。
  2. 打印 n 行的直角三角形 *(提示:内层次数随行变化)。
  3. for 习题:洛谷 P5720、P5721。