## **C++ 分支结构综合 练习题** ## **姓名:\_\_\_\_\_\_\_\_\_\_** **成绩:\_\_\_\_\_\_\_\_\_\_** #### **一、 填空题 (每空 2 分,共 14 分)** 1. 在 `switch` 语句中,如果所有 `case` 标签都未匹配成功,程序将执行 \_\_\_\_\_\_\_\_\_\_\_\_\_ 标签后的代码(如果存在)。 2. 要在一个 `if` 或者 `else` 代码块中执行多条指令,必须使用一对 \_\_\_\_\_\_\_\_\_\_\_\_\_ 将它们包裹起来。 3. 在 `switch(c)` 语句中,变量`c`的类型不能是 `double` 或者 \_\_\_\_\_\_\_\_\_\_\_\_\_ 类型。 4. 要判断一个年份 `year` 是“闰年”(能被4整除但不能被100整除,或者能被400整除),其完整的 C++ 逻辑表达式为 \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_。 5. 在C++中,用于判断“不等于”的关系运算符是 \_\_\_\_\_\_\_\_\_\_\_\_\_。 6. `if-else if-else` 结构特别适合用于处理多个互斥的条件分支,当其中某一个条件满足后,其余的 \_\_\_\_\_\_\_\_\_\_\_\_\_ 将不会再被判断。 7. 表达式 `x > 10` 的逻辑非形式是 `!(__________________)`。 #### **二、 单项选择题 (每题 2 分,共 20 分)** ( ) 1. C++ 中用于从键盘读取用户输入的工具是? A. `cout` B. `main` C. `cin` D. `return` ( ) 2. 根据年龄 `age` 来决定不同的票价:儿童(<12岁)半价,老人(>=60岁)7折,其他人全价。这个逻辑最适合用什么结构实现? A. 顺序执行 B. `if...else if...else` C. 单个 `if` D. `switch` ( ) 3. `switch` 语句的括号里,不可以放入哪种类型的变量? A. `int` B. `char` C. `bool` D. `double` ( ) 4. 对于 `switch` 语句,下列说法正确的是? A. `default` 语句是必须的 B. `case` 后面可以跟一个变量,如 `case x:` C. `break` 的作用是防止穿透到下一个 `case` D. `switch` 语句可以判断一个浮点数的范围 ( ) 5. 如果有定义 `int score = 85;`,表达式 `score >= 60 && score < 90` 的结果是? A. `true` B. `false` C. 85 D. 60 ( ) 6. 判断“如果今天是周末,再进一步判断天气是否晴朗”这样的逻辑,最适合用什么结构? A. `switch` B. 多个独立的 `if` C. `if-else` D. 嵌套的 `if` ( ) 7. 分析代码,若 `score = 50`,程序会执行哪个分支? `if (score >= 60) { ... } else if (score >= 80) { ... } else { ... }` A. 执行 `score >= 60` 的分支 B. 执行 `score >= 80` 的分支 C. 执行 `else` 分支 D. 没有任何分支被执行 ( ) 8. 下列哪个不是C++的关键字,可以作为变量名? A. `double` B. `total_Count` C. `if` D. `case` ( ) 9. 表达式 `20 / 3` 和 `20 % 3` 的结果分别是? A. 6.67 和 2 B. 6 和 2 C. 6 和 1 D. 7 和 2 ( ) 10. 判断一个整数 `num` 是奇数,正确的 C++ 表达式是? A. `num % 2 == 0` B. `num % 2 == 1` C. `num / 2 == 1` D. `num / 2 != 0` #### **三、 判断题 (每题 2 分,共 20 分,对的打“√”,错的打“×”)** ( ) 1. 在 `if-else` 结构中,`if` 代码块和 `else` 代码块有可能同时被执行。 ( ) 2. 赋值运算符 `=` 和关系运算符 `==` 在 `if` 条件中作用相同,可以混用。 ( ) 3. 在 `if (A || B)` 这个条件中,如果 `A` 的结果已经是 `true`,那么程序将不再去判断 `B` 的真假。 ( ) 4. `switch` 语句的每个 `case` 分支都必须以 `break` 结尾。 ( ) 5. 一个 `if` 语句可以不包含 `else if` 或 `else` 部分。 ( ) 6. 在C++中,书写 `if (x > 10 && < 20)` 是一个合法且正确的判断 `x` 范围的方式。 ( ) 7. `else` 总是与和它在同一代码块中,且离它最近的那个未配对的 `if` 结合。 ( ) 8. 表达式 `!false || false` 的结果是 `true`。 ( ) 9. 在 `switch` 语句中,可以合并多个 `case`来执行相同的代码块。 ( ) 10. `if...else if...else` 结构中,只会有一个代码块被执行。 #### **四、 代码阅读与分析题 (每题 4 分,共 16 分)** 请直接在代码下方的横线处写出代码运行后的输出结果(如果程序没有任何输出,则写“无输出”)。 1. **字符与整数运算** ```cpp int main() { char c = 'C'; // 'C'的ASCII码是67 c = c + 3; cout << c << endl; return 0; } ``` 输出结果:\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ 2. **多分支逻辑** ```cpp int main() { int temperature = -5; if (temperature > 30) { cout << "炎热"; } else if (temperature > 15) { cout << "温暖"; } else if (temperature > 0) { cout << "寒冷"; } else { cout << "冰冻"; } return 0; } ``` 输出结果:\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ 3. **switch** ```cpp int main() { char grade = 'B'; switch (grade) { case 'A': cout << "优秀 "; break; case 'B': cout << "良好 "; case 'C': cout << "中等 "; break; case 'D': cout << "及格 "; default: cout << "需努力"; } return 0; } ``` 输出结果:\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ 4. **嵌套if** ```cpp int main() { bool logged_in = true; bool is_admin = false; if (logged_in) { if (is_admin) { cout << "欢迎管理员"; } else { cout << "欢迎普通用户"; } } else { cout << "请先登录"; } return 0; } ``` 输出结果:\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ #### **五、 程序填空题(本大题共 30 分)** 1. **题目:成绩等级转换 (共 8 分)** 要求:输入一个整数 `score` 代表成绩。根据以下规则使用 `if-else if-else` 结构输出对应的等级。 * 90 ~ 100分: "A" * 80 ~ 89分: "B" * 70 ~ 79分: "C" * 60 ~ 69分: "D" * 60分以下: "F" ```cpp int main() { int score; cout << "请输入学生成绩: "; cin >> score; if (score >= 90) { cout << "A"; } // 1. 判断 B 等级 (80 ~ 89) else if (__________________________) { cout << "B"; } // 2. 判断 C 等级 (70 ~ 79) else if (__________________________) { cout << "C"; } // 3. 判断 D 等级 (60 ~ 69) else if (__________________________) { cout << "D"; } // 4. 其他情况都为 F ________________ { cout << "F"; } return 0; } ``` 2. **题目:星期转换器(共 8 分)** 要求:输入一个1-7的整数 `day`,使用 `switch` 语句输出对应的英文星期(1对应"Monday",2对应"Tuesday" ... 7对应"Sunday")。如果输入其他数字,输出"Invalid day"。 ```cpp int main() { int day; cout << "请输入1-7的数字: "; cin >> day; // 1. 请根据题意在此处填写一种分支结构类型进行判断 ________________{ case 1: cout << "Monday"; // 2.此处应填写? ________________; case 2: cout << "Tuesday"; break; // 3. 请补充星期三(Wednesday)的判断 ________________: cout << "Wednesday"; break; case 4: cout << "Thursday"; break; case 5: cout << "Friday"; break; case 6: cout << "Saturday"; break; case 7: cout << "Sunday"; break; // 4. 处理无效输入的情况 ________________: cout << "Invalid day"; } return 0; } ``` 3. **题目:商场折扣计算器** 要求:根据顾客的消费金额 `amount` 和他是否为VIP会员 `is_vip` 来计算最终需要支付的金额。 * **折扣规则**: * VIP会员(`is_vip`为`true`)可以享受折扣。折扣力度取决于消费金额: * 如果消费金额 `amount` **大于500元**,VIP会员享受 **8折** 优惠。 * 如果消费金额**小于或等于500元**,VIP会员享受 **9折** 优惠。 * 非VIP会员(`is_vip`为`false`)**不享受任何折扣**。 **请根据以上规则,完成代码,计算完最终应付金后直接输出即可。** ```cpp int main() { double amount; bool is_vip; cout << "请输入消费金额和是否为VIP(1是/0否): "; cin >> amount >> is_vip; // 请自行使用合适的分支结构,来根据 消费金额 和 是否为VIP会员 计算总运费(本大题按完成度与步骤给分,请将完整的解题代码写在下方,本题答案不唯一,代码实现能达到题目要求即可) return 0; } ```