8 for循环

正在加载视频播放器…

GESP C++ 一级:for 循环精讲

核心目标:掌握 for 循环的语法、执行流程、三要素、嵌套循环、break 与 continue,会写累加、累乘、计数、枚举、打印图形等常见程序。
for 适合次数已知的循环;初始化只做一次,条件每次判断,循环体执行后更新,再回到条件。


一、为什么用 for 循环

当一段代码需要重复执行,并且重复次数已知时,用 for 最方便。

例如:

  • 求 1 到 100 的和
  • 输出 1 到 n
  • 求 n 的阶乘
  • 打印 5 行 5 列星号
  • 枚举 1 到 n 判断质数

这些场景都适合 for。


二、for 循环基本语法

for (初始化; 条件; 更新) {
    循环体;
}

三要素:

部分 作用 示例
初始化 循环变量从哪开始 int i = 1
条件 什么时候继续循环 i <= n
更新 每次循环后变量怎么变 i++

示例:输出 1 到 5

for (int i = 1; i <= 5; i++) {
    cout << i << " ";
}

输出:

1 2 3 4 5

三、for 循环执行流程

以 for (int i = 1; i <= 5; i++) 为例:

  1. 执行初始化:int i = 1,只执行一次。
  2. 判断条件:i <= 5。
  3. 条件为真,执行循环体。
  4. 执行更新:i++。
  5. 回到第 2 步,再次判断条件。
  6. 条件为假,结束循环。

口诀:

初始化只一次;
判断条件在每次;
循环体后做更新;
条件为假就停止。

四、for 循环的常见写法

1. 从 1 到 n

for (int i = 1; i <= n; i++) {
    // ...
}

2. 从 0 到 n-1

for (int i = 0; i < n; i++) {
    // ...
}

3. 从 n 到 1 倒序

for (int i = n; i >= 1; i--) {
    // ...
}

4. 每次增加 2

for (int i = 1; i <= n; i += 2) {
    // ...
}

5. 每次乘以 2

for (int i = 1; i <= n; i *= 2) {
    // ...
}

6. 循环变量在循环外声明

int i;
for (i = 1; i <= n; i++) {
    // ...
}
cout << i << endl;   // 循环结束后 i 仍可用

如果写成:

for (int i = 1; i <= n; i++) {
    // ...
}
// cout << i;   // 错误,i 只在循环内有效

一级建议:通常直接在 for 里写 int i = 1,简单清晰。


五、for 循环的省略写法

for 的三个部分都可以省略,但分号不能省。

1. 省略初始化

int i = 1;
for (; i <= 5; i++) {
    cout << i << " ";
}

2. 省略更新

for (int i = 1; i <= 5; ) {
    cout << i << " ";
    i++;
}

3. 省略条件(死循环)

for (;;) {
    // 需要 break 跳出
}

一级考试中建议写完整形式,避免出错。


六、for 循环常见模型

1. 求和

int sum = 0;
for (int i = 1; i <= n; i++) {
    sum += i;
}
cout << sum << endl;

注意:sum 必须初始化为 0。

2. 求阶乘

long long fac = 1;
for (int i = 1; i <= n; i++) {
    fac *= i;
}
cout << fac << endl;

注意:fac 必须初始化为 1。

3. 计数

int cnt = 0;
for (int i = 1; i <= n; i++) {
    if (i % 3 == 0) {
        cnt++;
    }
}
cout << cnt << endl;

4. 求最大值

int maxv = a[0];   // 一级不考数组,可用第一个输入值

一级更常见的是边输入边比较:

int n, x;
cin >> n;
int maxv = -1000000000;
for (int i = 1; i <= n; i++) {
    cin >> x;
    if (x > maxv) maxv = x;
}
cout << maxv << endl;

5. 判断质数

bool isPrime = true;
if (n < 2) isPrime = false;

for (int i = 2; i * i <= n; i++) {
    if (n % i == 0) {
        isPrime = false;
        break;
    }
}

if (isPrime) cout << "质数";
else cout << "不是质数";

6. 枚举所有可能

for (int i = 1; i <= 100; i++) {
    if (i % 3 == 0 && i % 5 == 0) {
        cout << i << " ";
    }
}

7. 打印图形

打印 3 行 4 列星号:

for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 4; j++) {
        cout << "*";
    }
    cout << endl;
}

输出:

****
****
****

打印直角三角形:

for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= i; j++) {
        cout << "*";
    }
    cout << endl;
}

8. 九九乘法表

for (int i = 1; i <= 9; i++) {
    for (int j = 1; j <= i; j++) {
        cout << j << "*" << i << "=" << i * j << " ";
    }
    cout << endl;
}

七、嵌套 for 循环

1. 基本形式

for (初始化1; 条件1; 更新1) {
    for (初始化2; 条件2; 更新2) {
        循环体;
    }
}

执行流程:

  • 外层循环走一步,内层循环跑一圈。
  • 外层执行一次,内层完整执行一遍。

2. 示例:输出坐标

for (int i = 1; i <= 2; i++) {
    for (int j = 1; j <= 3; j++) {
        cout << i << j << " ";
    }
    cout << endl;
}

输出:

11 12 13 
21 22 23 

3. 嵌套循环易错点

  • 内层循环变量不能和外层同名。
  • 内层循环变量要在内层初始化。
  • 内层 break 只跳出内层循环,不影响外层。
  • 换行 cout << endl; 应放在内层循环结束后、外层循环内。

八、break 与 continue

1. break

立即跳出整个循环。

for (int i = 1; i <= 10; i++) {
    if (i == 5) break;
    cout << i << " ";
}

输出:

1 2 3 4

2. continue

跳过本次循环剩余语句,进入下一次循环。

for (int i = 1; i <= 5; i++) {
    if (i == 3) continue;
    cout << i << " ";
}

输出:

1 2 4 5

3. 对比

语句 作用
break 跳出整个循环
continue 跳过本次,继续下一次

九、for 与 while 的对比

项目 for while
适合场景 次数已知 次数未知,条件驱动
三要素位置 集中在括号内 分散在循环内外
最少执行次数 0 次
示例 for (int i = 1; i <= n; i++) while (n > 0)
可读性 次数已知时更清晰 条件驱动时更自然

互相转换示例:

for 版:

int sum = 0;
for (int i = 1; i <= n; i++) {
    sum += i;
}

while 版:

int i = 1, sum = 0;
while (i <= n) {
    sum += i;
    i++;
}

十、易错点

  1. for 括号内用逗号分隔

    for (int i = 1, i <= n, i++)   // 错误
    for (int i = 1; i <= n; i++)   // 正确
    
  2. 忘记写分号

    for (int i = 1; i <= n i++)   // 错误
    
  3. 条件后多写分号

    for (int i = 1; i <= n; i++);   // 错误,循环体为空
    
  4. 循环变量未初始化

    for (; i <= n; i++)   // 如果 i 之前没定义,错误
    
  5. 循环变量未更新

    for (int i = 1; i <= n; ) {
        cout << i;   // 忘记 i++,死循环
    }
    
  6. 循环边界错误

    for (int i = 1; i < n; i++)   // 少一次
    for (int i = 1; i <= n; i++)  // 正确
    
  7. 累加变量未初始化

    int sum;
    for (...) sum += i;   // 错误
    int sum = 0;          // 正确
    
  8. 累乘变量初始化为 0

    long long fac = 0;   // 错误
    long long fac = 1;   // 正确
    
  9. 在循环内重复初始化累加变量

    for (int i = 1; i <= n; i++) {
        int sum = 0;     // 错误,每次循环都清零
        sum += i;
    }
    
  10. 嵌套循环变量同名

    for (int i = 1; i <= 3; i++) {
        for (int i = 1; i <= 4; i++) {   // 错误
        }
    }
    
  11. break 和 continue 混淆

    • break:整个循环结束。
    • continue:只跳过本次。
  12. 输出格式错误
    注意空格、换行,按题目要求输出。


十一、阅读程序写结果

题目 1

for (int i = 1; i <= 4; i++) {
    cout << i << " ";
}

输出:

1 2 3 4

题目 2

for (int i = 5; i >= 1; i--) {
    cout << i << " ";
}

输出:

5 4 3 2 1

题目 3

int sum = 0;
for (int i = 1; i <= 5; i++) {
    sum += i;
}
cout << sum << endl;

输出:

15

题目 4

long long fac = 1;
for (int i = 1; i <= 5; i++) {
    fac *= i;
}
cout << fac << endl;

输出:

120

题目 5

for (int i = 1; i <= 5; i++) {
    if (i == 3) continue;
    cout << i << " ";
}

输出:

1 2 4 5

题目 6

for (int i = 1; i <= 5; i++) {
    if (i == 3) break;
    cout << i << " ";
}

输出:

1 2

题目 7

for (int i = 1; i <= 2; i++) {
    for (int j = 1; j <= 3; j++) {
        cout << "*";
    }
    cout << endl;
}

输出:

***
***

题目 8

for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= i; j++) {
        cout << "*";
    }
    cout << endl;
}

输出:

*
**
***

题目 9

int cnt = 0;
for (int i = 1; i <= 10; i++) {
    if (i % 2 == 0) cnt++;
}
cout << cnt << endl;

输出:

5

题目 10

for (int i = 1; i <= 10; i += 3) {
    cout << i << " ";
}

输出:

1 4 7 10

十二、速查表

需求 写法
从 1 到 n for (int i = 1; i <= n; i++)
从 0 到 n-1 for (int i = 0; i < n; i++)
从 n 到 1 for (int i = n; i >= 1; i--)
每次加 2 for (int i = 1; i <= n; i += 2)
每次乘 2 for (int i = 1; i <= n; i *= 2)
求和 sum = 0; for (...) sum += i;
求阶乘 fac = 1; for (...) fac *= i;
计数 cnt = 0; for (...) if (条件) cnt++;
嵌套循环 for (...) { for (...) { ... } }
跳出循环 break
跳过本次 continue
死循环 for (;;) { ... break; }

十三、总结

for 循环是一级考试中最重要的循环结构。

  1. for 适合次数已知的循环。
  2. 三要素:初始化、条件、更新,用分号分隔。
  3. 初始化只执行一次,条件每次判断,更新在循环体后执行。
  4. 循环变量通常写在 for 内部,作用域只在循环内。
  5. 累加变量初始化为 0,累乘变量初始化为 1。
  6. 嵌套循环中外层走一步,内层跑一圈。
  7. break 跳出整个循环,continue 跳过本次。
  8. 注意循环边界:i < n 和 i <= n 结果不同。

复习时多练“阅读程序写结果”“求和求积”“打印图形”“嵌套循环”四类题,重点注意分号、边界、初始化、更新、花括号和输出格式。考试中先确定循环次数,再确定循环变量从哪开始、到哪结束、每次怎么变,最后逐行模拟。