CC++ & Algorithm

for循环

中等7
语言版本:C++
概述:用生活中的小帮手“计数器”来理解for循环,学会让电脑重复做事情。

for循环:让电脑乖乖重复工作的计数器

你有没有遇到过这种情况?老师让你抄写10遍“我要考满分”,你才抄了两遍就手酸。如果让电脑来做,你只需要告诉它“重复10次”,它就会不厌其烦地执行。在C++里,for循环就是这个帮你重复做事的“机器人助手”。它的特别之处在于:自带一个“计数器”,从开始数到结束,每数一次就做一件事,数完就自动停下。

1. for循环的“三件套”

先看它的固定格式:

for (初始化计数器; 判断条件; 更新计数器) {
    // 每次要重复做的事情
}

这三部分就像你设置闹钟的三个步骤:

  • 初始化计数器:比如“从第1天开始记”。通常定义一个变量并赋初值。
  • 判断条件:比如“如果还没到第11天,就继续”。条件为真时,循环继续;假时结束。
  • 更新计数器:每次做完事情后,让计数器增加(或减少),比如“天数加1”。
  • 大括号里:就是你要电脑重复做的事,比如“写一遍‘我要考满分’”。

一个生活中的例子
妈妈让你每天吃1颗维生素,连续吃7天。用for循环描述就是:

for (int day = 1; day <= 7; day = day + 1) { // 从第1天到第7天
    吃一颗维生素;  // 这是循环体
}

2. 一步步看它如何工作:从1数到10

还记得原文的例子吗?输出1到10。我们放大来看每一步:

#include <iostream>
using namespace std;
int main() {
    for (int i = 1; i <= 10; i = i + 1) { // i从1开始,不超过10,每次加1
        cout << i << endl;  // 输出当前的i
    }
    return 0;
}

执行过程就像排队报数

  1. 先叫到第1号(初始化 i=1)。
  2. 检查1号是否≤10号(条件 i<=10),是,让他喊“1”。
  3. 喊完,1号往前走一步变成2号(更新 i=i+1)。
  4. 再检查2号是否≤10,是,喊“2”……
  5. 直到10号喊完,变成11号,检查11≤10?不成立,结束。

运行结果

1
2
3
4
5
6
7
8
9
10

3. 更多生活中的例子,帮你彻底搞懂

例1:抄写20遍“我要认真听课”

#include <iostream>
using namespace std;
int main() {
    for (int count = 1; count <= 20; count = count + 1) { // 从1到20
        cout << "我要认真听课" << endl;
    }
    return 0;
}

屏幕会打印20行“我要认真听课”。这里 count 只是用来计数的,循环体里可以不使用它。

例2:计算妈妈一周给你的零花钱总和

假设妈妈每天给你5元零花钱,连续7天,一共多少钱?

#include <iostream>
using namespace std;
int main() {
    int total = 0;               // 总钱数,初始0元
    for (int day = 1; day <= 7; day = day + 1) { // 从第1天到第7天
        total = total + 5;       // 每天加5元
    }
    cout << "一周零花钱总共:" << total << "元" << endl;
    return 0;
}

运行结果:

一周零花钱总共:35元

思考:如果把条件改成 day < 7,结果是多少?(提示:只会加6次,得到30元。)这里 <=< 的差别很重要。

4. 新手最容易掉进去的坑

坑1:忘记更新计数器 → 死循环

for (int i = 1; i <= 10; ) {   // 忘记写 i = i + 1
    cout << i << endl;
}

i 永远是1,条件永远成立,电脑会疯狂输出“1”,停不下来!如果你运行了这种程序,可以按 Ctrl+C 强制终止,但最好一开始就写对。

坑2:分号位置写错

for 循环的括号里用的是分号隔开三部分,不是逗号。很多人写成:

for (int i = 1, i <= 10, i = i + 1)  // 错误!应该用分号

这样编译器会报错。正确写法是:

for (int i = 1; i <= 10; i = i + 1)

坑3:循环变量作用域搞错

如果在 for 循环里定义变量 i,循环结束后 i 就不存在了。比如:

for (int i = 1; i <= 5; i = i + 1) {
    // 这里能用 i
}
cout << i;  // 错误!i 已经“消失”了

如果想在循环外使用 i,需要在外面定义:

int i; // 在主函数里定义
for (i = 1; i <= 5; i = i + 1) {
    // ...
}
cout << i; // 可以,此时 i 为6(因为最后更新到了6,条件不成立退出)

坑4:边界条件判断错

例如想输出1到10,写成 i < 10 只会输出19;写成 i <= 10 才是110。想清楚“包含不包含终点”很重要。

5. 完整示例:帮小明算考试总分

小明考了5门课,成绩分别是85, 92, 78, 90, 88。用for循环计算总分和平均分。

#include <iostream>
using namespace std;
int main() {
    int score[5] = {85, 92, 78, 90, 88}; // 5门课的成绩
    int sum = 0;                         // 总分,初始0
    for (int index = 0; index < 5; index = index + 1) { // 索引从0到4
        sum = sum + score[index];        // 累加每门成绩
    }
    double average = sum / 5.0;          // 平均分,注意用5.0得到小数
    cout << "总分:" << sum << "分" << endl;
    cout << "平均分:" << average << "分" << endl;
    return 0;
}

运行结果:

总分:433分
平均分:86.6分

这里我们用了数组 score 来存放成绩,index 从0开始(因为数组下标从0开始)。注意条件 index < 5,不是 <=,否则会访问到越界的下标5(数组只有0~4)。

6. 学完for循环,下一步学什么?

for循环是编程中最常用的重复结构,但还有两种也能实现循环:

  • while循环:适合“不知道要重复多少次,但知道什么条件满足时继续”。
  • do-while循环:至少执行一次再判断条件。

另外,循环嵌套(循环里面套循环)可以做出九九乘法表、画三角形等有趣图案。比如用两个for循环嵌套打印一个矩形:

for (int row = 1; row <= 5; row = row + 1) {    // 外层控制行
    for (int col = 1; col <= 3; col = col + 1) { // 内层控制列
        cout << "* ";
    }
    cout << endl; // 每一行结束后换行
}

掌握好for循环,就等于学会了让电脑“自动化”的钥匙。下次再遇到重复任务时,记得用for循环给它派活吧!

例题精讲

1单选题

以下关于C++中for循环的语法格式,正确的是哪个?

Afor (int i = 0; i < 10; i++) { }
Bfor int i = 0; i < 10; i++ { }
Cfor (int i = 0; i < 10; i++)
Dfor (int i = 0; i < 10; i++); { }
2判断题

在for循环中,初始化表达式(如int i=0)只在循环开始时执行一次,后续迭代不再执行。

3填空题
以下代码使用for循环计算1到100的累加和,请补全空缺部分。
#include <iostream>
using namespace std;
int main() {
    int sum = 0;
    for (int i = 1; i <= 100; ___) {
        sum += i;
    }
    cout << sum << endl;
    return 0;
}
4单选题

执行以下for循环后,输出结果是什么? int s = 0; for (int i = 1; i <= 5; i++) { s += i; } cout << s;

A10
B15
C20
D25
5填空题
以下代码使用for循环输出数组a中的所有元素,请补全空缺。
#include <iostream>
using namespace std;
int main() {
    int a[] = {2, 4, 6, 8, 10};
    int n = sizeof(a) / sizeof(a[0]);
    for (int i = 0; i < n; ___) {
        cout << a[i] << " ";
    }
    return 0;
}