返回 课程

信奥AC之路-1级

0% 完成
0/0 步骤
  1. 第1课 开发环境与基础输出
    5 主题|小节
  2. 第2课 算术运算符
    7 主题|小节
  3. 第3课 printf与运算输出
    7 主题|小节
  4. 第4课 数的进制与拆位
    6 主题|小节
  5. 第5课 变量与基础运算
    17 主题|小节
  6. 第6课 常量与取整运算
    8 主题|小节
  7. 第7课 关系运算
    8 主题|小节
  8. 第8课 逻辑运算
    9 主题|小节
  9. 第9课 输入与计算进阶
    10 主题|小节
  10. 第10课 if语句及双分支语句
    8 主题|小节
  11. 第11课 if语句及双分支进阶
    11 主题|小节
  12. 第12课 三目运算
    9 主题|小节
  13. 第13课 多分支、多if和switch语句
    11 主题|小节
  14. 第14课 循环(基本输出)
    7 主题|小节
  15. 第15课 循环(While+If)
    8 主题|小节
  16. 第16课 循环(计数、求和、求乘积)
    10 主题|小节
  17. 第17课 循环进阶(While+)
    8 主题|小节
  18. 第18课 do-while及while其他用法
    8 主题|小节
  19. 第19课 For循环基础
    9 主题|小节
  20. 第20课 For循环进阶
    8 主题|小节
课 13, 主题|小节 7
进行中

13.6 多分支练习题集

2025年9月22日
课 进展
0% 完成

“小朋友们,为了帮助你们更好地掌握多分支、多if和switch语句的知识,让我们来做一些练习题,”我说,”这些题目会从不同角度测试你们对条件结构的理解和应用能力。”

选择题

第1题:下面C++代码执行后输出是( )。

int x = 3;
if (x > 5)
    cout << "A";
else if (x > 2)
    cout << "B";
else if (x > 1)
    cout << "C";
else
    cout << "D";

A. A B. B C. C D. D

答案:B

解析: x=3,第一个条件x>5为假,第二个条件x>2为真(3大于2),所以输出”B”,然后跳出整个多分支结构。

第2题:下面C++代码执行后输出是( )。

int a = 5;
if (a > 3)
    cout << "X";
if (a > 4)
    cout << "Y";
if (a > 5)
    cout << "Z";

A. X B. XY C. XYZ D. 不输出

答案:B

解析: 代码使用了三个独立的if语句。a=5,第一个条件a>3为真,输出”X”;第二个条件a>4也为真,输出”Y”;第三个条件a>5为假,不执行。最终输出”XY”。

第3题:下面的switch语句中,如果n=2,则输出( )。

switch(n) {
    case 1:
        cout << "One";
        break;
    case 2:
        cout << "Two";
    case 3:
        cout << "Three";
        break;
    default:
        cout << "Other";
}

A. Two B. TwoThree C. One D. Other

答案:B

解析: n=2,匹配case 2,输出”Two”,但是没有break语句,会继续执行case 3的代码,输出”Three”,然后遇到break跳出。最终输出”TwoThree”。

第4题:下面C++代码的功能是( )。

int month;
cin >> month;
switch(month) {
    case 3: case 4: case 5:
        cout << "Spring";
        break;
    case 6: case 7: case 8:
        cout << "Summer";
        break;
    case 9: case 10: case 11:
        cout << "Autumn";
        break;
    case 12: case 1: case 2:
        cout << "Winter";
        break;
    default:
        cout << "Invalid month";
}

A. 判断季节 B. 判断月份 C. 判断天数 D. 判断年份

答案:A

解析: 代码根据输入的月份判断所属的季节。3-5月为春季,6-8月为夏季,9-11月为秋季,12月和1-2月为冬季。

第5题:下面代码的输出是( )。

int score = 85;
if (score >= 90)
    cout << "A";
else if (score >= 80)
    cout << "B";
else if (score >= 70)
    cout << "C";
else if (score >= 60)
    cout << "D";
else
    cout << "F";

A. A B. B C. C D. D

答案:B

解析: score=85,第一个条件score>=90为假,第二个条件score>=80为真(85大于等于80),所以输出”B”,然后跳出整个多分支结构。

第6题:下面代码的输出是( )。

int a = 5, b = 3, c = 7;
if (a > b)
    if (a > c)
        cout << "A";
    else
        cout << "B";
else
    cout << "C";

A. A B. B C. C D. 不输出

答案:B

解析: 这是嵌套的if-else结构。首先a>b为真(5>3),进入第一个if的内部。然后a>c为假(5<7),所以执行内部else分支,输出”B”。

第7题:下面的switch语句中,如果ch=’b’,则输出( )。

switch(ch) {
    case 'a':
        cout << "Apple";
        break;
    case 'b':
    case 'B':
        cout << "Banana";
        break;
    case 'c':
        cout << "Cherry";
        break;
    default:
        cout << "Other";
}

A. Apple B. Banana C. Cherry D. Other

答案:B

解析: ch=’b’,匹配case ‘b’,输出”Banana”,然后break跳出。注意这个switch结构将’b’和’B’视为相同情况处理,这是利用了fall through机制故意设计的。

第8题:下面代码中,当x=100时,输出是( )。

int x;
cin >> x;
if (x > 0) {
    if (x > 50) {
        if (x > 100)
            cout << "A";
        else
            cout << "B";
    } else {
        cout << "C";
    }
} else {
    cout << "D";
}

A. A B. B C. C D. D

答案:B

解析: x=100,第一个条件x>0为真,进入第一个if;第二个条件x>50也为真,进入第二个if;第三个条件x>100为假(100不大于100),执行else分支,输出”B”。

第9题:下面代码执行后的输出是( )。

int day = 3;
switch(day) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        cout << "Weekday";
        break;
    case 6:
    case 7:
        cout << "Weekend";
        break;
    default:
        cout << "Invalid day";
}

A. Weekday B. Weekend C. Invalid day D. 不输出

答案:A

解析: day=3,匹配case 3,但由于case 1到case 5之间没有break语句,所以执行到”Weekday”后才跳出。这是利用fall through特性判断工作日和周末的例子。

第10题:下面的代码会输出( )。

int a = 10, b = 20;
if (a > b)
    cout << "A";
else if (a == b)
    cout << "B";
if (a < b)
    cout << "C";
else
    cout << "D";

A. A B. B C. C D. D E. AC F. AD G. BC H. BD

答案:C

解析: 代码包含一个多分支结构和一个if-else结构。在多分支结构中,a>b和a==b都为假,所以不输出”A”和”B”。在独立的if-else结构中,a<b为真(10<20),所以输出”C”。最终输出”C”,答案应为C而非E。【注:原题中可能有误导,10<20为真应输出”C”,没有输出”A”】

判断题

第1题:在多分支结构中,可能有多个分支的代码被执行。( )

答案:错误

解析: 在多分支结构(if-else if-else)中,最多只有一个分支的代码会被执行。一旦找到一个条件为真的分支并执行其代码,就会跳过后面所有的分支。

第2题:switch语句中的default分支是必须的。( )

答案:错误

解析: switch语句中的default分支是可选的,不是必须的。如果没有default分支,当表达式的值不匹配任何case时,不会执行任何操作。

第3题:switch语句中的case后面只能跟常量,不能是变量或表达式。( )

答案:正确

解析: 在C++中,switch语句的case标签必须是常量表达式,不能是变量或需要在运行时计算的表达式。

第4题:在switch语句中,如果忘记写break,会导致”fall through”现象,继续执行下一个case的代码。( )

答案:正确

解析: 在switch语句中,如果case分支没有break语句,执行完当前case的代码后会继续执行下一个case的代码,而不是跳出switch结构,这称为”fall through”。

第5题:多个独立的if语句和多分支结构的执行效率是相同的。( )

答案:错误

解析: 多个独立的if语句会依次判断每个条件,即使已经找到一个满足条件的分支;而多分支结构在找到一个满足条件的分支后就会跳过后面的分支,所以多分支结构通常更高效。

第6题:switch语句可以处理字符串类型的比较。( )

答案:错误

解析: 在C++中,switch语句只能处理整数类型(包括字符类型,因为字符在底层是以整数形式存储的)的比较,不能直接处理字符串、浮点数或其他复杂类型。

第7题:case语句中的常量可以重复,例如两个case 1。( )

答案:错误

解析: 在switch语句中,case标签必须是唯一的。如果有重复的case标签,编译器会报错。

第8题:if-else if结构和嵌套的if-else结构可以表达相同的逻辑。( )

答案:正确

解析: if-else if结构和适当设计的嵌套if-else结构可以表达相同的逻辑,但if-else if结构通常更清晰易读。

第9题:多分支结构必须包含else分支。( )

答案:错误

解析: 多分支结构(if-else if)可以没有最终的else分支。如果没有else分支,当所有条件都为假时,不会执行任何代码。

第10题:switch语句比等价的if-else if结构执行更快。( )

答案:通常正确

解析: 对于处理同一变量的多个离散值,switch语句通常比等价的if-else if结构执行更快,因为编译器可以对switch结构进行优化(如使用跳转表)。但这取决于具体实现和编译器优化。

编程题

第1题:分段函数计算

题目描述:实现一个分段函数的计算。函数f(x)的定义如下:

  • 当x < 0时,f(x) = -x
  • 当0 ≤ x < 10时,f(x) = x²
  • 当x ≥ 10时,f(x) = 2x – 1

输入一个整数x,输出f(x)的值。

样例输入

5

样例输出

25

参考代码

#include <iostream>
using namespace std;

int main() {
    int x;                     // 定义整数变量x
    cin >> x;                  // 输入x的值
    
    int result;                // 定义变量存储计算结果
    
    if (x < 0) {               // 当x小于0
        result = -x;           // 计算f(x) = -x
    } else if (x < 10) {       // 当0 ≤ x < 10
        result = x * x;        // 计算f(x) = x²
    } else {                   // 当x ≥ 10
        result = 2 * x - 1;    // 计算f(x) = 2x - 1
    }
    
    cout << result;            // 输出计算结果
    return 0;
}

第2题:等级评定

题目描述:学校对学生的表现进行等级评定,根据学生的分数给出相应的等级。评定标准如下:

  • 90-100分:优秀
  • 80-89分:良好
  • 70-79分:中等
  • 60-69分:及格
  • 0-59分:不及格

输入一个0-100之间的整数分数,输出对应的等级。如果输入的分数不在0-100范围内,输出”成绩无效”。

样例输入

85

样例输出

良好

参考代码

#include <iostream>
using namespace std;

int main() {
    int score;                  // 定义整数变量score表示分数
    cin >> score;               // 输入分数
    
    if (score < 0 || score > 100) {   // 判断分数是否有效
        cout << "成绩无效";          // 如果无效,输出提示信息
    } else if (score >= 90) {         // 判断是否在90-100范围
        cout << "优秀";              // 如果是,输出"优秀"
    } else if (score >= 80) {         // 判断是否在80-89范围
        cout << "良好";              // 如果是,输出"良好"
    } else if (score >= 70) {         // 判断是否在70-79范围
        cout << "中等";              // 如果是,输出"中等"
    } else if (score >= 60) {         // 判断是否在60-69范围
        cout << "及格";              // 如果是,输出"及格"
    } else {                          // 判断是否在0-59范围
        cout << "不及格";            // 如果是,输出"不及格"
    }
    
    return 0;
}

第3题:简单计算器

题目描述:实现一个简单的计算器,支持加、减、乘、除四种运算。输入两个整数a和b,以及一个运算符op(+、-、*、/中的一种),输出对应的计算结果。注意处理除数为0的情况。

样例输入

10 + 5

样例输出

15

参考代码

#include <iostream>
using namespace std;

int main() {
    int a, b;                   // 定义两个整数变量
    char op;                    // 定义字符变量存储运算符
    
    cin >> a >> op >> b;        // 输入两个数和运算符
    
    switch(op) {                // 根据运算符选择不同的操作
        case '+':               // 如果是加法
            cout << a + b;      // 输出a+b的结果
            break;              // 跳出switch结构
        case '-':               // 如果是减法
            cout << a - b;      // 输出a-b的结果
            break;              // 跳出switch结构
        case '*':               // 如果是乘法
            cout << a * b;      // 输出a*b的结果
            break;              // 跳出switch结构
        case '/':               // 如果是除法
            if(b == 0) {        // 判断除数是否为0
                cout << "除数不能为0"; // 如果是,输出错误信息
            } else {            // 如果不是
                cout << a / b;  // 输出a/b的结果
            }
            break;              // 跳出switch结构
        default:                // 如果不是有效的运算符
            cout << "无效的运算符"; // 输出错误信息
            break;              // 跳出switch结构
    }
    
    return 0;
}