适用对象: 完成了第 3 课(if 判断、猜数字游戏)的同学 使用方式: 自学讲义。放在电脑旁边,边读边照着做 学完本课,你应该能:
for
循环让电脑自动重复做同一件事,不用自己敲很多遍while,知道它和 for是"表兄弟"遇到问题怎么办: 老规矩——先把出问题的那一步重新读一遍,逐字对照。这节课最容易错的地方是循环体里忘了给变量"往前走一步"。
打开上节课的猜数字游戏文件,重新运行一遍,分别验证"猜对""猜大""猜小"三种情况都还记得。确认没问题再往下学。
想象一下:要输出 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。写循环前先想清楚:"这个变量每一轮怎么变?什么时候会停?"
新建 check1.cpp:用 for 循环输出 1 到
10(每个数换行,不要空格)。
累加是循环里最常用的模式:先准备一个变量装"目前的总和",让它从 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 += 这一轮的数。忘了归零,结果会比正确答案多出一开始的垃圾值。
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
就够了。
错误 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。
⭐ 基础题 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×1 到 7×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 |
| 程序卡住不动 | 循环变量忘了变化(死循环) |
for (int i=1; i<=10; i++)
默写出来,解释三段话各自的意思