### **C++ `if` 的多分支与条件嵌套 课后习题** 姓名: \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ #### **一、 填空题** 1. `if-else` 结构主要解决“**二选一**”的问题,而 `if-else if-else` 结构则解决了“**\_\__\_\_\_\_\_\_**”的问题。 2. `if-else if-else` 结构也被称为 **\_\_\_\__\_\_\_\_\_\_\_** 结构,它的核心特点是“择一执行”,即整个结构中最多只有 **\_\_\__\_\_\_\_\_\_\_\_** 个代码块会被执行。 3. 在 `if-else if-else` 结构中,`else` 关键字的作用是作为“**\_\_\__\_\_\_\_\_\_\_\_**”选项,当所有 `if` 和 `else if` 的条件都**\_\__\_\_\_\_\_\_\_\_\_** (填写“满足”或“不满足”)时,它的代码块才会被执行。 4. 将一个 `if` 语句完整地放入另一个 `if` 或 `else` 语句的执行代码块中,这种结构被称为 **\_\__\_\_\_\_\_\_\_\_\_\_\_\_\_**。 5. 在编写 `if-else if-else` 结构时,为了保证逻辑的正确性,通常应该将范围最**\_\_\_\_\_\_\__\_\_\_\_**、最**\_\__\_\_\_\_\_\_\_\_\_**的条件放在最前面。 #### **二、 单项选择题** ( ) 1. 根据课程和讲义中酒店保安的例子,如果来了一位“普通VIP”,保安的决策流程是怎样的? A. 直接跳到“普通VIP”规则,并带他去二层 B. 先判断他是不是顶级VIP,如果不是,再判断他是不是普通VIP C. 同时判断他是不是 顶级VIP 和 普通VIP D. 检查完所有规则后,才决定带他去二层 ( ) 2. 观察以下代码片段,当 `int score = 85;` 时,程序的输出是什么? ```cpp if (score >= 90) { cout << "优秀" << endl; } else if (score >= 60) { cout << "及格" << endl; } else { cout << "不及格" << endl; } ``` ​ A. 优秀 B. 良好 C. 及格 D. 不及格 ( ) 3. 关于 `if-else if-else` 结构的执行,以下说法正确的是? A. 只要有条件满足,所有代码块都会被执行 B. 至少有一个代码块会被执行 C. 如果有 `else`,保证有且仅有一个代码块被执行 D. 可能会有多个 `else if` 的代码块被同时执行 ( ) 4. 对于定义了变量 `int x = 5, y = 10;` 运行以下代码,输出结果是什么? ```cpp if (x > 3) { cout << "A"; if (y < 5) { cout << "B"; } else { cout << "C"; } } else { cout << "D"; } ``` ​ A. AC B. AB C. D D. A ( ) 5. 对于代码 `if (a > 10) { ... } else if (a > 5) { ... }`,如果变量 `a` 的值是 `12`,哪个代码块会被执行? A. `if (a > 10)` 对应的代码块 B. `else if (a > 5)` 对应的代码块 C. 两个代码块都会被执行 D. 两个代码块都不会被执行 ( ) 6. 在三数排序的案例中,相对于“纯粹的多分支判断”,“嵌套分支”解法的主要优点是? A. 代码行数更少 B. 逻辑更清晰,将复杂问题分步解决 C. 运行效率更高 D. 使用的关键字更少 ( ) 7. 从字面和逻辑上理解,`else if (表达式)` 的含义最准确的是? A. 并且,如果 表达式 成立 B. 或者,如果 表达式 成立 C. 在前面的所有条件都不成立的前提下,如果 表达式 成立 D. 无论如何,检查 表达式 是否成立 ( ) 8. 关于 `if-else if-else` 结构中最后的 `else` 部分,下列哪个说法是**错误**的? A. 它是可选的,可以不写 B. 它用于处理所有 `if` 和 `else if` 条件都不满足的情况 C. 它必须带一个条件判断,例如 `else (表达式)` D. 加上它可以让程序处理之前的所有条件都不满足的情况 ( ) 9. 当我们比较三个数字的时候,当程序执行到 `if (a >= b && a >= c)` 的内部代码块时,如下的判断哪个是正确的? A. a 是三个数中最小的 B. a 是三个数中最大的 C. a, b, c 三个数完全相等 D. b 和 c 的大小关系已经确定 ( ) 10. 给定代码 `int num = 8;`,以下哪个 `if` 结构会输出 "C"? A. `if(num<5){cout<<"A";} else if(num<8){cout<<"B";} else{cout<<"C";}` B. `if(num>10){cout<<"A";} else if(num>8){cout<<"B";} else{cout<<"C";}` C. `if(num>9){cout<<"A";} else if(num==8){cout<<"B";} else{cout<<"C";}` D. `if(num<0){cout<<"A";} else if(num>10){cout<<"B";} else{cout<<"C";}` #### **三、 判断题 (对的打“√”,错的打“×”)** ( ) 1. 在一个 `if-else if-else` 结构中,如果第一个 `if` 的条件为真,程序会会继续检查后面的 `else if` 条件。 ( ) 2. `if-else if-else` 结构中,`else if` 可以有很多个,但 `if` 和 `else` 最多只能有1个。 ( ) 3. 一个 `if` 结构必须包含 `else` 部分,否则代码会编译失败。 ( ) 4. 在 C++ 中,`if` 语句的执行块内可以再包含另一个完整的 `if-else` 结构。 ( ) 5. 对于 `if (x > 10) { ... } else if (x > 5) { ... }` 这样的结构,条件 `x > 10` 和 `x > 5` 的顺序可以随意交换,不会影响程序的逻辑结果。 ( ) 6. 三数排序案例中,解法一(纯粹使用多分支判断)的优点是逻辑简单,但缺点是存在重复判断。 ( ) 7. 对于代码 `int num = 10; if (num > 5) { cout << "A"; } if (num > 8) { cout << "B"; }`,屏幕上会输出 "AB"。 ( ) 8. `else if` 中的 `else` 关键字,其隐含了:在此之前的所有 `if` 和 `else if` 的条件判断结果均为 `false`。 ( ) 9. 用嵌套分支解决三数排序问题,体现了“我们人类的分步解决”的思想,理解起来会更容易。 ( ) 10. `if` 语句只能嵌套在另一个 `if` 语句的代码块中,不能嵌套在 `else` 的代码块中。