C 班 第 4 课:让电脑重复做事——循环

适用对象: 完成了第 3 课(if 判断、猜数字游戏)的同学 使用方式: 自学讲义。放在电脑旁边,边读边照着做 学完本课,你应该能:

  1. for 循环让电脑自动重复做同一件事,不用自己敲很多遍
  2. 会写"累加"这个最常见的循环套路(比如算 1 加到 100)
  3. 认识 while,知道它和 for是"表兄弟"

遇到问题怎么办: 老规矩——先把出问题的那一步重新读一遍,逐字对照。这节课最容易错的地方是循环体里忘了给变量"往前走一步"。


1. 热身:把猜数字游戏再跑一遍(10 分钟)

打开上节课的猜数字游戏文件,重新运行一遍,分别验证"猜对""猜大""猜小"三种情况都还记得。确认没问题再往下学。


2. for 循环:让电脑帮你重复(25 分钟)

想象一下:要输出 5 遍"你好",你可以这样写:

#include <bits/stdc++.h>
using namespace std;

int main() {
    cout << "你好" << endl;
    cout << "你好" << endl;
    cout << "你好" << endl;
    cout << "你好" << endl;
    cout << "你好" << endl;
    return 0;
}

敲 5 遍还行,要是要求敲 1000 遍呢?这时候就需要循环——让电脑自己重复,不用你手敲很多遍:

#include <bits/stdc++.h>
using namespace std;

int main() {
    for (int i = 1; i <= 5; i++) {
        cout << "你好" << endl;
    }
    return 0;
}

运行结果和上面手敲 5 遍完全一样,但代码只有一行循环体。

for 括号里的三段话,用逗号分成三份,从左到右读:

部分 例子 意思
① 起点 int i = 1 从哪个数开始(这里造了一个新盒子 i,从 1 开始)
② 继续条件 i <= 5 这个条件成立就继续循环,不成立就停
③ 每轮怎么变 i++ 每跑完一轮大括号里的内容,i 就自动加 1

完整流程: 先做①一次 → 检查②满不满足 → 满足就执行大括号里的内容 → 执行完做③ → 回到检查②……直到②不满足才停下来。

再看一个例子:从 1 数到 5

#include <bits/stdc++.h>
using namespace std;

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

输出:1 2 3 4 5

倒着数,从 5 数到 1:

#include <bits/stdc++.h>
using namespace std;

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

输出:5 4 3 2 1 ——起点从 5 开始,继续条件是 i >= 1,每轮用 i--(减 1)往回走。

📝 i++ 就是"让 i 变成 i+1",i-- 就是"让 i 变成 i-1"。这两个符号以后天天用,记熟。

⚠️ 大坑:循环体里忘了让变量变化,会死循环。 亲手试一次(运行前想清楚会发生什么,卡住了按 Ctrl+C 强制结束):

int i = 1;
while (i <= 5) {
    cout << i << " ";
    // 忘了写 i++,i 永远是 1
}

这个程序会永远运行下去——因为 i 永远是 1,永远满足 i <= 5。写循环前先想清楚:"这个变量每一轮怎么变?什么时候会停?"

动手检查点 1(5 分钟)

新建 check1.cpp:用 for 循环输出 1 到 10(每个数换行,不要空格)。


3. 累加:循环里最常见的套路(20 分钟)

累加是循环里最常用的模式:先准备一个变量装"目前的总和",让它从 0 开始,每轮循环加一个新数进去。

计算 1 加到 10 的和:

#include <bits/stdc++.h>
using namespace std;

int main() {
    int sum = 0;             // 先归零,这一步千万别漏
    for (int i = 1; i <= 10; i++) {
        sum += i;             // 每轮把 i 加进 sum
    }
    cout << sum << endl;
    return 0;
}

输出:55

sum += i;sum = sum + i; 的简写,意思是"把 i 加到 sum 上"。跟着代码走一遍:sum 从 0 开始,第 1 轮变成 1,第 2 轮变成 1+2=3,第 3 轮变成 3+3=6……一直到加完 10,变成 55。

📝 累加的固定写法:循环外先让 sum = 0(归零),循环里每轮 sum += 这一轮的数。忘了归零,结果会比正确答案多出一开始的垃圾值。


4. while 循环:了解一下就好(10 分钟)

C++ 还有另一种循环写法 while,跟 for 做的事情一样,只是写法不同——把"起点"挪到外面,"继续条件"留在括号里,"变化"挪进大括号:

#include <bits/stdc++.h>
using namespace std;

int main() {
    int i = 1;              // 起点,挪到外面
    while (i <= 5) {        // 继续条件
        cout << i << " ";
        i++;                 // 变化,挪进大括号
    }
    cout << endl;
    return 0;
}

输出和 for (int i=1; i<=5; i++) 完全一样:1 2 3 4 5

📝 今天只需要认识 while 长什么样,知道它和 for 是同一件事的两种写法。本课练习一律用 for 就够了。


5. 读错误:2 个典型坑(10 分钟)

错误 1:for 括号里的分号写成了逗号

#include <bits/stdc++.h>
using namespace std;

int main() {
    for (int i = 1, i <= 5, i++) {    ← 应该是分号 ; 不是逗号 ,
        cout << i << " ";
    }
    return 0;
}

编译器会报一堆看不懂的错误信息,多半提到 expected 之类的词——先检查 for 括号里的三段话是不是用两个分号隔开的,逗号在这里不管用。

错误 2:忘了给 sum 归零

int sum;              // 没写 = 0!
for (int i = 1; i <= 10; i++) {
    sum += i;
}
cout << sum << endl;  // 结果可能是任何奇怪的数字

sum 一开始没有明确赋值,里面是垃圾值,之后不管怎么加都是"垃圾值 + 正确的和",结果不对。

📝 累加之前,先检查那个"总和"变量是不是老老实实写了 = 0


6. 本课练习(30 分钟起步)

⭐ 基础题 1:数到 10(文件名 t1.cpp

for 循环输出 1 到 10(空格分隔)。

输出样例:
1 2 3 4 5 6 7 8 9 10
参考答案
#include <bits/stdc++.h>
using namespace std;

int main() {
    for (int i = 1; i <= 10; i++) {
        cout << i << " ";
    }
    cout << endl;
    return 0;
}

⭐⭐ 实战题 2:求 1~n 的和(文件名 t2.cpp

输入一个正整数 n,输出 1 加到 n 的和。提示:想想上节课猜数字游戏里,变量是怎么用 cin 读进来存起来的。

输入样例:
100

输出样例:
5050
参考答案
#include <bits/stdc++.h>
using namespace std;

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

⭐⭐⭐ 冲刺题 3:乘法表的一行(文件名 t3.cpp

输出 7 的乘法表:7×17×9 的结果,一行一个。

输出样例:
7
14
21
28
35
42
49
56
63
参考答案
#include <bits/stdc++.h>
using namespace std;

int main() {
    for (int i = 1; i <= 9; i++) {
        cout << 7 * i << endl;
    }
    return 0;
}

这就是乘法表的秘密——每一行都是"固定的数 × 循环变量"。完整的九九乘法表(9 行 9 列)需要循环里再套一层循环,以后学


本课要点速查

写法 意思
for (int i = 1; i <= n; i++) { ... } 从 1 循环到 n,每轮 i 自动加 1
for (int i = n; i >= 1; i--) { ... } 从 n 倒着循环到 1
sum = 0; + sum += i; 累加固定写法:先归零,循环里一次次加
while (条件) { ...; 变化; } for 做同一件事的另一种写法

易错点:

症状 原因
for 括号报一堆看不懂的错 把分号写成了逗号
累加结果是奇怪的数字 忘了给"总和"变量写 = 0
程序卡住不动 循环变量忘了变化(死循环)

结束前的自我检查

  1. 不看讲义,把 for (int i=1; i<=10; i++) 默写出来,解释三段话各自的意思
  2. 练习 1、2 都运行成功;⭐⭐⭐ 乘法表能做出来更好,做不出来也没关系
  3. 向家里人解释:为什么循环能省去"敲很多遍相同代码"的麻烦?
  4. 合上讲义,把"累加 1 到 n"的模板一次性写对