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,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;` 这两种写法在功能上是等价的。