第5章 - 循环语句
嗨,朋友!我是长安。
想象一下,如果让你在屏幕上输出1到100的数字,你会怎么做?
写100行 cout 吗?那也太累了!
这一章,我要教你一个超级强大的技能——循环。有了它,你只需要几行代码就能完成重复性的工作!
🤔 什么是循环?
生活中的循环
生活中到处都是循环:
- 跑步 - 绕着操场跑10圈
- 做题 - 做完整本练习册的每道题
- 听歌 - 单曲循环播放
- 上课 - 每周一到周五都上课
编程中的循环
编程中的循环就是让程序重复执行某段代码。
C++ 有三种循环:
- for 循环 - 知道要循环多少次
- while 循环 - 不确定循环次数,满足条件就继续
- do-while 循环 - 至少执行一次,然后判断是否继续
🔄 for 循环
for 循环是最常用的循环,适合循环次数确定的场景。
基本格式
for (初始化; 条件; 更新) {
// 循环体:要重复执行的代码
}
第一个示例
输出1到10的数字:
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 10; i++) {
cout << i << " ";
}
cout << endl;
return 0;
}
输出:
1 2 3 4 5 6 7 8 9 10
执行流程:
int i = 1- 初始化,定义变量 i,值为1i <= 10- 判断条件,i 小于等于10吗?- 如果条件为真,执行循环体
cout << i << " "; i++- 更新,i 加1- 回到步骤2,继续判断
- 直到条件为假,退出循环
可视化理解
i = 1,判断 1 <= 10 ✓,输出 1,i 变成 2
i = 2,判断 2 <= 10 ✓,输出 2,i 变成 3
i = 3,判断 3 <= 10 ✓,输出 3,i 变成 4
...
i = 10,判断 10 <= 10 ✓,输出 10,i 变成 11
i = 11,判断 11 <= 10 ✗,退出循环
更多示例
示例1:输出1到100
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 100; i++) {
cout << i << " ";
}
cout << endl;
return 0;
}
示例2:输出偶数
#include <iostream>
using namespace std;
int main() {
cout << "1到20之间的偶数:";
for (int i = 2; i <= 20; i += 2) {
cout << i << " ";
}
cout << endl;
return 0;
}
输出:
1到20之间的偶数:2 4 6 8 10 12 14 16 18 20
示例3:倒计时
#include <iostream>
using namespace std;
int main() {
cout << "倒计时:";
for (int i = 10; i >= 1; i--) {
cout << i << " ";
}
cout << "发射!" << endl;
return 0;
}
输出:
倒计时:10 9 8 7 6 5 4 3 2 1 发射!
示例4:计算1到100的和
#include <iostream>
using namespace std;
int main() {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i; // sum = sum + i
}
cout << "1到100的和是:" << sum << endl;
return 0;
}
输出:
1到100的和是:5050
⏳ while 循环
while 循环适合循环次数不确定的场景,只要条件为真就继续循环。
基本格式
while (条件) {
// 循环体
}
示例1:输出1到10
#include <iostream>
using namespace std;
int main() {
int i = 1;
while (i <= 10) {
cout << i << " ";
i++;
}
cout << endl;
return 0;
}
输出:
1 2 3 4 5 6 7 8 9 10
示例2:猜数字游戏(不限次数)
#include <iostream>
using namespace std;
int main() {
int secret = 42;
int guess;
cout << "===== 猜数字游戏 =====" << endl;
cout << "我想了一个1-100之间的数字,你能猜出来吗?" << endl;
while (true) { // 无限循环
cout << "请输入你的猜测:";
cin >> guess;
if (guess == secret) {
cout << "恭喜你,猜对了!" << endl;
break; // 跳出循环
} else if (guess > secret) {
cout << "太大了,再试试!" << endl;
} else {
cout << "太小了,再试试!" << endl;
}
}
return 0;
}
示例3:输入验证
#include <iostream>
using namespace std;
int main() {
int age;
cout << "请输入你的年龄(1-120):";
cin >> age;
while (age < 1 || age > 120) {
cout << "输入错误!请重新输入(1-120):";
cin >> age;
}
cout << "你的年龄是:" << age << " 岁" << endl;
return 0;
}
🔁 do-while 循环
do-while 循环的特点是至少执行一次,然后再判断条件。
基本格式
do {
// 循环体
} while (条件);
示例1:菜单系统
#include <iostream>
using namespace std;
int main() {
int choice;
do {
cout << "\n===== 主菜单 =====" << endl;
cout << "1. 开始游戏" << endl;
cout << "2. 查看设置" << endl;
cout << "3. 退出程序" << endl;
cout << "请选择(1-3):";
cin >> choice;
switch (choice) {
case 1:
cout << "游戏开始..." << endl;
break;
case 2:
cout << "显示设置..." << endl;
break;
case 3:
cout << "感谢使用,再见!" << endl;
break;
default:
cout << "无效选择,请重新输入!" << endl;
}
} while (choice != 3);
return 0;
}
示例2:求和(用户控制)
#include <iostream>
using namespace std;
int main() {
int num;
int sum = 0;
char cont;
do {
cout << "请输入一个数字:";
cin >> num;
sum += num;
cout << "当前总和:" << sum << endl;
cout << "继续吗?(Y/N):";
cin >> cont;
} while (cont == 'Y' || cont == 'y');
cout << "最终总和:" << sum << endl;
return 0;
}
🛑 循环控制语句
break - 跳出循环
break 用来立即终止循环。
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break; // 当 i 等于 5 时,跳出循环
}
cout << i << " ";
}
cout << endl;
return 0;
}
输出:
1 2 3 4
continue - 跳过本次循环
continue 用来跳过本次循环的剩余代码,直接进入下一次循环。
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // 跳过偶数
}
cout << i << " ";
}
cout << endl;
return 0;
}
输出:
1 3 5 7 9
🔢 嵌套循环
循环里面还可以有循环,这叫嵌套循环。
示例1:打印乘法表
#include <iostream>
using namespace std;
int main() {
cout << "===== 九九乘法表 =====" << endl;
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
cout << j << "×" << i << "=" << (i * j) << "\t";
}
cout << endl;
}
return 0;
}
输出:
===== 九九乘法表 =====
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
1×4=4 2×4=8 3×4=12 4×4=16
...
示例2:打印星号图案
#include <iostream>
using namespace std;
int main() {
int rows = 5;
// 打印三角形
for (int i = 1; i <= rows; i++) {
for (int j = 1; j <= i; j++) {
cout << "* ";
}
cout << endl;
}
return 0;
}
输出:
*
* *
* * *
* * * *
* * * * *
🌟 实战案例
案例1:阶乘计算
#include <iostream>
using namespace std;
int main() {
int n;
long long factorial = 1;
cout << "请输入一个正整数:";
cin >> n;
for (int i = 1; i <= n; i++) {
factorial *= i;
}
cout << n << "! = " << factorial << endl;
return 0;
}
运行效果:
请输入一个正整数:5
5! = 120
案例2:水仙花数
找出所有3位数的水仙花数(各位数字的立方和等于该数本身)。
#include <iostream>
using namespace std;
int main() {
cout << "所有3位水仙花数:" << endl;
for (int num = 100; num <= 999; num++) {
int a = num / 100; // 百位
int b = (num / 10) % 10; // 十位
int c = num % 10; // 个位
if (a*a*a + b*b*b + c*c*c == num) {
cout << num << " ";
}
}
cout << endl;
return 0;
}
输出:
所有3位水仙花数:
153 370 371 407
案例3:素数判断
#include <iostream>
using namespace std;
int main() {
int num;
bool isPrime = true;
cout << "请输入一个正整数:";
cin >> num;
if (num <= 1) {
isPrime = false;
} else {
for (int i = 2; i < num; i++) {
if (num % i == 0) {
isPrime = false;
break;
}
}
}
if (isPrime) {
cout << num << " 是素数" << endl;
} else {
cout << num << " 不是素数" << endl;
}
return 0;
}
案例4:简易ATM系统
#include <iostream>
using namespace std;
int main() {
double balance = 1000.0; // 初始余额
int choice;
double amount;
do {
cout << "\n===== ATM 系统 =====" << endl;
cout << "当前余额:¥" << balance << endl;
cout << "1. 存款" << endl;
cout << "2. 取款" << endl;
cout << "3. 查询余额" << endl;
cout << "4. 退出" << endl;
cout << "请选择操作(1-4):";
cin >> choice;
switch (choice) {
case 1:
cout << "请输入存款金额:¥";
cin >> amount;
if (amount > 0) {
balance += amount;
cout << "存款成功!当前余额:¥" << balance << endl;
} else {
cout << "金额无效!" << endl;
}
break;
case 2:
cout << "请输入取款金额:¥";
cin >> amount;
if (amount > 0 && amount <= balance) {
balance -= amount;
cout << "取款成功!当前余额:¥" << balance << endl;
} else {
cout << "余额不足或金额无效!" << endl;
}
break;
case 3:
cout << "当前余额:¥" << balance << endl;
break;
case 4:
cout << "感谢使用,再见!" << endl;
break;
default:
cout << "无效选择!" << endl;
}
} while (choice != 4);
return 0;
}
案例5:成绩统计
#include <iostream>
using namespace std;
int main() {
int studentCount;
double score, sum = 0;
double maxScore = 0, minScore = 100;
cout << "请输入学生人数:";
cin >> studentCount;
for (int i = 1; i <= studentCount; i++) {
cout << "请输入第 " << i << " 个学生的成绩:";
cin >> score;
sum += score;
if (score > maxScore) {
maxScore = score;
}
if (score < minScore) {
minScore = score;
}
}
double average = sum / studentCount;
cout << "\n===== 成绩统计 =====" << endl;
cout << "总分:" << sum << endl;
cout << "平均分:" << average << endl;
cout << "最高分:" << maxScore << endl;
cout << "最低分:" << minScore << endl;
return 0;
}
🎯 小结
这一章我们学习了三种循环语句:
| 循环类型 | 适用场景 | 格式 |
|---|---|---|
| for | 循环次数确定 | for (初始化; 条件; 更新) { ... } |
| while | 循环次数不确定 | while (条件) { ... } |
| do-while | 至少执行一次 | do { ... } while (条件); |
| break | 跳出循环 | break; |
| continue | 跳过本次循环 | continue; |
如何选择循环?
- 知道循环次数 → 用
for - 不知道循环次数,但知道结束条件 → 用
while - 需要至少执行一次 → 用
do-while
💪 练习题
动手练习,巩固知识:
- 写一个程序,输出1到100之间所有3的倍数
- 写一个程序,计算1到100之间所有偶数的和
- 写一个程序,输入一个正整数n,输出斐波那契数列的前n项(1 1 2 3 5 8...)
- 写一个程序,打印一个直角三角形(用户输入行数)
- 写一个程序,判断一个数是否是回文数(如121、1221)
点击查看参考答案
题目1 参考答案:
#include <iostream>
using namespace std;
int main() {
cout << "1到100之间所有3的倍数:" << endl;
for (int i = 3; i <= 100; i += 3) {
cout << i << " ";
}
cout << endl;
return 0;
}
题目3 参考答案:
#include <iostream>
using namespace std;
int main() {
int n;
cout << "请输入项数:";
cin >> n;
int a = 1, b = 1;
cout << "斐波那契数列前" << n << "项:" << endl;
for (int i = 1; i <= n; i++) {
if (i == 1 || i == 2) {
cout << 1 << " ";
} else {
int c = a + b;
cout << c << " ";
a = b;
b = c;
}
}
cout << endl;
return 0;
}
🚀 下一步
太棒了!你现在能让程序自动完成重复性工作了!
下一章,我们要学习函数,让代码更加模块化、可复用!
➡️ 第6章 - 函数基础
