第5章 循环和关系表达式

学习如何教会计算机重复执行任务。本章我们将探索 `for`、`while` 等循环结构,让程序变得更强大、更智能。

环节 1:三步走机器人 (for 循环)

`for` 循环就像一个指令清晰的机器人,你只需告诉它三件事:**从哪开始** (初始化),**到哪结束** (测试条件),以及**每步怎么走** (更新),它就能精确地重复任务。

#include <iostream> int main() { // for (1. 初始化; 2. 测试条件; 3. 更新) for (int i = 0; i < 5; i++) { std::cout << "报数!" << std::endl; } return 0; }

`for` 循环模拟器 🤖

点击“下一步”按钮,观察“三步走机器人”如何执行一个从0数到4的循环。

int i = 0;
i < 5;
i++

> Console Output:

环节 2:条件守卫 (while 循环)

`while` 循环就像一个忠诚的“条件守卫”。它会**先检查条件**,只有条件为真,才允许执行循环内的代码。只要条件一直为真,它就会一直重复放行。

Cleo 的投资计算器 💰

Cleo 投资了 $100,年复利 5%。她的目标是达到 $150。`while` 循环会一直计算,直到她的资金达标。

> 等待计算...

double cleo_funds = 100.0; int years = 0; // 只要资金还没达到 150... while (cleo_funds < 150.0) { cleo_funds = cleo_funds * 1.05; years++; } std::cout << years << " 年后达标";

环节 3:俄罗斯套娃 (嵌套循环)

当一个循环被放在另一个循环内部时,就形成了**嵌套循环**,就像一个俄罗斯套娃。外层循环每执行一圈,内层循环就要完整地执行一整轮。这对于处理表格、地图等二维结构非常有用。

#include <iostream> int main() { int n = 4; // 外层循环控制行 for (int i = 1; i <= n; i++) { // 内层循环1: 打印点 for (int j = 0; j < n - i; j++) { std::cout << "."; } // 内层循环2: 打印星号 for (int k = 0; k < i; k++) { std::cout << "*"; } std::cout << std::endl; } return 0; }

图案绘制器 🎨

输入你想要的三角形行数,看看嵌套循环是如何绘制出精确的图案的。

终点站:编程挑战

练习 1:范围求和

任务:

编写一个程序,要求用户输入两个整数。程序计算并输出这两个整数之间(包括它们自身)所有整数的和。

预期知识点:

`for` 循环结构,变量初始化,组合赋值运算符。

点击查看参考答案
#include <iostream> using namespace std; int main() { int start_num, end_num; long total = 0; cout << "请输入第一个整数: "; cin >> start_num; cout << "请输入第二个整数: "; cin >> end_num; for (int i = start_num; i <= end_num; i++) { total += i; } cout << start_num << " 到 " << end_num << " 的和是: " << total << endl; return 0; }
练习 2:计算增长年限

任务:

Cleo 投资 $100,每年按 5% 复利增长。请计算多少年后,她的投资将达到 $150?

预期知识点:

`while` 循环,关系表达式,浮点数运算。

点击查看参考答案
#include <iostream> using namespace std; int main() { const double TARGET = 150.0; double cleo_funds = 100.0; int years = 0; while (cleo_funds < TARGET) { cleo_funds = cleo_funds * 1.05; years++; } cout << "共需要 " << years << " 年。" << endl; return 0; }
练习 3:嵌套循环绘图

任务:

编写一个程序,要求用户输入一个整数 N(行数)。程序绘制一个 N 行的三角形图案。第 i 行包含 i 个星号 (*),星号前面用句点 (.) 填充,使每行总长度为 N。

预期知识点:

嵌套 `for` 循环,控制外层和内层循环的变量。

点击查看参考答案
#include <iostream> using namespace std; int main() { int rows; cout << "请输入行数 N: "; cin >> rows; for (int i = 1; i <= rows; i++) { for (int j = 0; j < rows - i; j++) { cout << "."; } for (int k = 0; k < i; k++) { cout << "*"; } cout << endl; } return 0; }