### 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. √