Initial commit: C++ courseware

This commit is contained in:
xiaolinquan committed 2026-11-05 22:51:02 +08:00
commit 4a4ee7c287
1789 files changed
+373489

No files matched your search

@@ -0,0 +1,28 @@
### C++ for 循环(一) 课后习题 - **答案**
#### **一、 填空题**
1. 循环变量初始化
2. 循环变量初始化,循环条件判断,循环变量更新
3. 循环变量初始化
4. 循环变量更新
5. 分号 (`;`)
6. 次数确定 (或 范围已知)
7. 判断,更新
#### **二、 单项选择题**
1. B 2. D 3. A 4. A 5. C 6. C 7. B 8. C 9. A 10. C
#### **三、 判断题**
1. × (只在整个循环开始时执行一次)
2. √
3. √ (正是因为 `i` 变成6,才导致 `6 <= 5` 为假,从而结束循环)
4. × (如果初始条件就为假,则一次也不执行)
5. × (循环变量可以参与循环体内部的任何逻辑,如 `Apples Plus` 案例)
6. √
7. √
8. √
9. √
10. √
@@ -0,0 +1,79 @@
### C++ for 循环(一) 课后习题
姓名: \_\_\_\_\_\_\_\_\_\_\_\_\_
#### **一、 填空题**
1. `while` 循环将**循环的三个关键部分**:\_\_\_\_\_\_\_\_\_\_\_\_\_、**循环条件**和**循环变量更新**分散在代码的不同位置,而 `for` 循环则将它们捆绑在一起,实现集中管理。
2. `for` 循环的语法结构为 `for (` \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ `;` \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ `;` \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ `) { ... }`。
3. 在`for`循环的三个部分中,\_\_\_\_\_\_\_\_\_\_\_\_\_部分(**填循环的三个关键部分之一**)只在整个循环开始时执行唯一一次。
4. `for`循环的\_\_\_\_\_\_\_\_\_\_\_\_\_部分在每一次循环体执行**之后**都会执行。
5. `for`循环的三个部分之间必须使用\_\_\_\_\_\_\_\_\_\_\_\_\_进行分隔。
6. `for` 循环非常适合用于处理循环次数\_\_\_\_\_\_\_\_\_\_\_\_\_(填写 **固定** 或 **不固定** )的循环。
7. `for`循环的执行流程可以概括为:循环变量初始化 -> ( \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ -> 执行循环体 -> \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ ) -> ...
#### **二、 单项选择题**
( ) 1. `for (int i = 1; i <= 5; i++) { ... }` 这个循环的循环体会被执行几次?
A. 4 次 B. 5 次 C. 6 次 D. 无限次
( ) 2. 在一个 `for` 循环的单次迭代中,最后执行的是哪一部分?
A. 循环变量初始化 B. 循环条件判断
C. 循环体 D. 循环变量更新
( ) 3. 观察下面的代码,它会在屏幕上输出什么?
```cpp
for (int i = 1; i <= 3; i++) {
cout << i << " ";
}
```
​ A. `1 2 3` B. `1 2 3 4` C. `1 2` D. `2 3 4`
( ) 4. `for (int i = 10; i < 10; i++) { ... }` 这个循环的循环体会被执行几次?
A. 0 次 B. 1 次 C. 10 次 D. 无限次
( ) 5. 下列哪个 `for` 循环会导致无限循环?
A. `for (int i = 1; i <= 5; i++)`
B. `for (int i = 5; i >= 1; i--)`
C. `for (int i = 1; i <= 5; i--)`
D. `for (int i = 1; i > 5; i++)`
( ) 6. 在书本 例4-1 的 `Apples Plus` 的案例中,我们使用 `if (i > 1)` 来判断是否要输出 "s",这里的 `i` 代表了什么?
A. 苹果的总数 B. 循环的总次数
C. 当前是第几次循环 D. 一个固定的数字
( ) 7. `for` 循环相比于 `while` 循环,对于处理次数确定的循环,其主要优点是什么?
A. 运行速度更快
B. 将循环控制的三个核心要素集中管理,代码更清晰
C. 可以处理 `while` 循环无法完成的任务
D. 占用的内存更少
( ) 8. 下列哪个 `for` 循环的写法是**错误**的?
A. `for (int i = 1; i <= 10; i++)`
B. `for (int i = 1; i <= 10; i--)`
C. `for (int i = 1, i <= 10, i++)`
D. `for (double i = 1; i <= 2; i++)`
( ) 9. 要实现一个从 10 倒数打印到 1 的循环,`for` 循环应该怎么写?
A. `for (int i = 10; i >= 1; i--)`
B. `for (int i = 10; i <= 1; i++)`
C. `for (int i = 1; i <= 10; i++)`
D. `for (int i = 10; i > 1; i++)`
( ) 10. `for` 循环的执行顺序是 ( 选项中使用`()` 的部分代表会重复得到执行,直到判断条件为`false`停止 )?
A. 初始化 -> 更新循环变量 -> 判断 -> 执行循环体
B. 初始化 -> (判断 -> 更新循环变量 -> 执行循环体)
C. 初始化 -> (判断 -> 执行循环体 -> 更新循环变量)
D. (判断 -> 执行循环体 -> 更新循环变量 -> 初始化)
#### **三、 判断题 (对的打“√”,错的打“×”)**
( ) 1. `for` 循环的循环变量初始化部分,在每一次循环开始时都会执行一次。
( ) 2. `for` 循环的循环条件判断,在每一次循环体执行**之前**进行。
( ) 3. `for (int i = 1; i <= 5; i++)` 这个循环结束后,变量 `i` 的值会变成 6。
( ) 4. `for` 循环的循环体至少会被执行一次。
( ) 5. `for` 循环的循环变量 `i` 只能用于计数,不能在循环体内部参与**运算**或**判断**。
( ) 6. 在 `for` 循环内部可以嵌套 `if` 语句,来处理循环中出现的特殊情况。
( ) 7. 把 `while` 循环的初始化、条件判断和更新语句分别放入 `for` 循环的对应位置,两者在逻辑上是等价的。
( ) 8. 在 `for` 循环中,如果循环变量更新写成了 `i = i + 2`,那么循环变量 `i` 每次会跳过一个数。
( ) 9. `for (int i = 1; i >= 0; i++)` 这种写法会导致无限循环。
( ) 10. 讲义中的 `Apples Plus` 案例,体现了“循环中可以嵌套分支判断”的思想。
@@ -0,0 +1,118 @@
### C++ for 循环(二) 课后习题
姓名: \_\_\_\_\_\_\_\_\_\_\_\_\_
#### **一、 填空题**
1. `for` 循环在算法中最常见的三大应用模式是:\_\_\_\_\_\_\_\_\_\_\_\_\_模式、\_\_\_\_\_\_\_\_\_\_\_\_\_模式和分类统计模式。
2. 我们在分析**寻找最小值**的例题时,使用了打擂台算法,它的核心思想是:只记住\_\_\_\_\_\_\_\_\_\_\_\_\_,然后不断与新的挑战者进行比较。
3. 在使用“打擂台”算法寻找最小值时,我们会将扮演“擂主”的变量(如 `min_val`)初始化为一个\_\_\_\_\_\_\_\_\_\_\_\_\_的数,以确保第一个挑战者一定能赢。
4. 在使用“累加”模式对一连串数据求和时,需要准备一个“容器”变量(如 `sum`),并且必须在循环\_\_\_\_\_\_\_\_\_\_\_\_\_(填 **内** 或 **外**)将它初始化为 `0`。
5. 在“分类统计”模式中,`for` 循环像一个\_\_\_\_\_\_\_\_\_\_\_\_\_,负责把数据一个一个送过来;而循环内部的 `if/else` 像一个\_\_\_\_\_\_\_\_\_\_\_\_\_,负责判断数据该去哪个分类。
6. 在 `for (int i = 0; ...)` 中定义的变量 `i`,能在 `for` 循环内部使用,\_\_\_\_\_\_\_\_\_\_\_\_\_ (填写 **能** / **不能**) 在 `for` 循环外使用。
7. C++提供了一个便捷的工具 `min(a, b)` 函数可以直接返回a和b中较小的那一个,使用它需要包含头文件 `#include <`\_\_\_\_\_\_\_\_\_\_\_\_\_`>`。
#### **二、 单项选择题**
( ) 1. 观察下面的代码,它的功能是计算什么?
```cpp
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += i;
}
cout << sum;
```
A. 1到5的乘积 B. 1到5的和 C. 5的阶乘 D. 只输出5
( ) 2. 在使用“打擂台”算法寻找一组数中的**最大值**时,擂主变量 `max_val` 的初始值应该设置成什么?
A. 一个非常大的数 B. 一个非常小的数
C. 0 D. 第一个读入的数
( ) 3. 观察下面的代码,当循环结束后,`min_val` 的值是多少?
```cpp
int min_val = 100;
int n;
for (int i = 0; i < 3; i++) {
cin >> n; // 依次输入 50, 120, 30
if (n < min_val) {
min_val = n;
}
}
```
A. 120 B. 100 C. 50 D. 30
( ) 4. 如果把累加求和代码中的 `int sum = 0;` 放到 `for` 循环内部,会发生什么?
A. 程序无法运行
B. 结果正确,但效率变低
C. 每次循环 `sum` 都会被重置为0,导致结果错误
D. 没有任何影响
( ) 5. 变量 `i` 在 `for (int i = 0; i < 5; i++)` 循环结束后,在循环外部还能使用 `cout << i;` 吗?
A. 可以,它的值是5
B. 可以,它的值是4
C. 不可以,因为变量`i`在循环结束后就消失了
D. 不可以,因为没有初始化
( ) 6. 在“分类求平均数”的案例中,我们需要几个变量来分别统计A、B两类的总和与数量?
A. 1个 B. 2个 C. 3个 D. 4个
( ) 7. 要统计从1到100之间所有偶数的个数,`for`循环内部的`if`判断应该写成?
A. `if (i % 2 == 1)` B. `if (i % 2 == 0)`
C. `if (i / 2 == 0)` D. `if (i * 2 == 0)`
( ) 8. 使用 `min()` 函数,代码 `if (tmp < min_val) { min_val = tmp; }` 可以被简化为?
A. `min_val = min(tmp);`
B. `min(min_val, tmp);`
C. `min_val = min(min_val, tmp);`
D. `tmp = min(min_val, tmp);`
( ) 9. 下面哪种问题最不适合用“累加模式”来解决?
A. 计算全班同学的总分
B. 计算1到100所有奇数的和
C. 找出全班的最高分
D. 计算1乘以2乘以3...一直乘到10的结果
( ) 10. 在“分类统计”模式中,哪个结构负责提供需要被处理的数据?
A. `if` 语句 B. `else` 语句 C. `for` 循环 D. `cout` 语句
#### **三、 判断题 (对的打“√”,错的打“×”)**
( ) 1. “打擂台”算法只能用来寻找最小值,不能用来寻找最大值。
( ) 2. 在使用“累加模式”求和时,累加变量必须在循环外部定义和初始化。
( ) 3. `for (int i = 1; i <= n; i++)` 和 `for (int i = 0; i < n; i++)` 都能循环n次。
( ) 4. 在“分类求平均数”的例子中,`for`循环的作用是进行分类,`if-else`的作用是遍历数字。
( ) 5. 像 `sum` 和 `min_val` 这样需要在循环结束后使用的变量,必须定义在循环的外部。
( ) 6. 求1到100的和,`int sum = 1;` 作为一个错误的初始值,会导致最终结果比正确答案多1。
( ) 7. C++中的 `min(a, b)` 函数可以一次性比较三个数的最小值。
( ) 8. “分类统计”模式本质上是 `for` 循环和 `if-else` 结构的结合使用。
( ) 9. 在不知道具体要输入多少个数字的情况下,使用 `for` 循环是最好的选择。
( ) 10. `sum = sum + i;` 和 `sum += i;` 这两种写法在功能上是完全等价的。
---
### C++ for 循环(二) 课后习题 - **答案**
#### **一、 填空题**
1. 打擂台,累加
2. 当前最优值
3. 非常大
4. 外
5. 传送带,分拣机
6. 作用域
7. algorithm
#### **二、 单项选择题**
1. B 2. B 3. D 4. C 5. C 6. D 7. B 8. C 9. C 10. C
#### **三、 判断题**
1. × (同样适用于找最大值,只需改变比较逻辑和初始值)
2. √
3. √
4. × (正好相反,`for`是传送带负责遍历,`if-else`是分拣机负责分类)
5. √
6. √
7. × (`min(a, b)` 只能比较两个数,比较三个需要 `min(a, min(b, c))`)
8. √
9. × (`while` 循环更适合处理未知次数的循环)
10. √
@@ -0,0 +1,87 @@
### C++ for 循环(二) 课后习题
姓名: \_\_\_\_\_\_\_\_\_\_\_\_\_
#### **一、 填空题**
1. `for` 循环在算法中最常见的三大应用模式是:\_\_\_\_\_\_\_\_\_\_\_\_\_模式、\_\_\_\_\_\_\_\_\_\_\_\_\_模式和分类统计模式。
2. 我们在分析**寻找最小值**的例题时,使用了打擂台算法,它的核心思想是:只记住\_\_\_\_\_\_\_\_\_\_\_\_\_,然后不断与新的挑战者进行比较。
3. 在使用“打擂台”算法寻找最小值时,我们会将扮演“擂主”的变量(如 `min_val`)初始化为一个\_\_\_\_\_\_\_\_\_\_\_\_\_的数,以确保第一个挑战者一定能赢。
4. 在使用“累加”模式对一连串数据求和时,需要准备一个“容器”变量(如 `sum`),并且必须在循环\_\_\_\_\_\_\_\_\_\_\_\_\_(填 **内** 或 **外**)将它初始化为 `0`。
5. 在“分类统计”模式中,`for` 循环像一个\_\_\_\_\_\_\_\_\_\_\_\_\_,负责把数据一个一个送过来;而循环内部的 `if/else` 像一个\_\_\_\_\_\_\_\_\_\_\_\_\_,负责判断数据该去哪个分类。
6. 在 `for (int i = 0; ...)` 中定义的变量 `i`,能在 `for` 循环内部使用,\_\_\_\_\_\_\_\_\_\_\_\_\_ (填写 **能** / **不能**) 在 `for` 循环外使用。
7. C++提供了一个便捷的工具 `min(a, b)` 函数可以直接返回a和b中较小的那一个,使用它需要包含头文件 `#include <`\_\_\_\_\_\_\_\_\_\_\_\_\_`>`。
#### **二、 单项选择题**
( ) 1. 观察下面的代码,它的功能是计算什么?
```cpp
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += i;
}
cout << sum;
```
​ A. 1到5的乘积 B. 1到5的和 C. 5的阶乘 D. 只输出5
( ) 2. 在使用“打擂台”算法寻找一组数中的**最大值**时,擂主变量 `max_val` 的初始值应该设置成什么?
A. 一个非常大的数 B. 一个非常小的数 C. 0 D. -1
( ) 3. 观察下面的代码,当循环结束后,`min_val` 的值是多少?
```cpp
int min_val = 100;
int n;
for (int i = 0; i < 3; i++) {
cin >> n; // 依次输入 50, 120, 30
if (n < min_val) {
min_val = n;
}
}
```
​ A. 120 B. 100 C. 50 D. 30
( ) 4. 如果把累加求和代码中的 `int sum = 0;` 放到 `for` 循环内部,会发生什么?
A. 程序无法运行
B. 结果正确,但效率变低
C. 每次循环 `sum` 都会被重置为0,导致结果错误
D. 没有任何影响
( ) 5. 变量 `i` 在 `for (int i = 0; i < 5; i++)` 循环结束后,在循环外部还能使用 `cout << i;` 吗?
A. 可以,它的值是5
B. 可以,它的值是4
C. 不可以,因为变量`i`在循环结束后就消失了
D. 不可以,因为没有初始化
( ) 6. 在“分类求平均数”的案例中,我们需要几个变量来分别统计A、B两类的总和与数量?
A. 1个 B. 2个 C. 3个 D. 4个
( ) 7. 要统计从1到100之间所有偶数的个数,`for`循环内部的`if`判断应该写成?
A. `if (i % 2 == 1)` B. `if (i % 2 == 0)`
C. `if (i / 2 == 0)` D. `if (i * 2 == 0)`
( ) 8. 使用 `min()` 函数,代码 `if (tmp < min_val) { min_val = tmp; }` 可以被简化为?
A. `min_val = min(tmp);`
B. `min(min_val, tmp);`
C. `min_val = min(min_val, tmp);`
D. `tmp = min(min_val, tmp);`
( ) 9. 下面哪种问题最不适合用“累加模式”来解决?
A. 计算全班同学的总分
B. 计算1到100所有奇数的和
C. 找出全班的最高分
D. 计算1乘以2乘以3...一直乘到10的结果
( ) 10. 在“分类统计”模式中,哪个结构负责提供需要被处理的数据?
A. `if` 语句 B. `else` 语句 C. `for` 循环 D. `cout` 语句
#### **三、 判断题 (对的打“√”,错的打“×”)**
( ) 1. “打擂台”算法只能用来寻找最小值,不能用来寻找最大值。
( ) 2. 在使用“累加模式”求和时,累加变量必须在循环外部定义和初始化。
( ) 3. `for (int i = 1; i <= n; i++)` 和 `for (int i = 0; i < n; i++)` 都能循环n次。
( ) 4. 在“分类求平均数”的例子中,`for`循环的作用是进行分类,`if-else`的作用是遍历数字。
( ) 5. 像 `sum` 和 `min_val` 这样需要在循环结束后使用的变量,必须定义在循环的外部。
( ) 6. 求1到100的和,如果定义累加变量为 `int sum = 1;` 而不是`int sum = 0;`,会导致最终结果比正确答案多1。
( ) 7. C++中的 `min(a, b)` 函数可以一次性比较三个数的最小值。
( ) 8. “分类统计”模式本质上是 `for` 循环和 `if-else` 结构的结合使用。
( ) 9. 在不知道具体要输入多少个数字的情况下,使用 `for` 循环是最好的选择。
( ) 10. `sum = sum + i;` 和 `sum += i;` 这两种写法在功能上是等价的。