CC++ & Algorithm

C++ 多分支 if-else if-else

中等45
语言版本:C++Python
概述:学习如何处理多个条件,就像考试根据分数评等级:A、B、C、D。

C++ 多分支选择:if-else if-else 详解

生活中,我们经常要面对多个选项。比如:

  • 妈妈给你零花钱,如果你考了 90 分以上,奖励 20 元;80 到 89 分奖励 10 元;60 到 79 分奖励 5 元;60 分以下没有奖励。
  • 到游乐园玩,身高 1.2 米以下不能玩过山车,1.2~1.5 米只能玩儿童区,1.5 米以上可以玩所有项目。

这些情况都有多个条件,每个条件对应不同的结果。普通的 if-else 只能处理“是或否”两个分支,而要处理三个及以上分支,就要用到 多分支 if-else if-else 语句。它就像一条分岔路,从第一个岔口开始检查,哪个条件先满足,就走哪条路,后面的岔口不再看。

语法格式

if (条件1) {
    // 条件1成立时执行的代码
} else if (条件2) {
    // 条件1不成立,但条件2成立时执行的代码
} else if (条件3) {
    // 条件1、2都不成立,但条件3成立时执行的代码
} else {
    // 以上所有条件都不成立时执行的代码(else 可以省略)
}

程序从上往下依次判断条件,哪个条件先为真,就执行对应的分支,然后跳过剩下的所有判断。如果所有条件都不满足,最后执行 else 里的代码。

条件顺序很重要——一个真实“翻车”例子

假设你想根据分数评等级:

  • 90 分以上 → A
  • 80 分以上 → B
  • 60 分以上 → C
  • 以下 → D

如果这样写:

if (score >= 60) {         // 错误:把宽条件放前面了
    cout << "等级:C" << endl;
} else if (score >= 80) {
    cout << "等级:B" << endl;
} else if (score >= 90) {
    cout << "等级:A" << endl;
} else {
    cout << "等级:D" << endl;
}

猜猜输入 95 分时输出什么?
第一个条件 95 >= 60 成立,直接输出 等级:C,后面的 >=80>=90 根本不会检查!这就是最常见的错误:把范围大的条件放前面,范围小的条件永远没机会执行
正确做法是把**最严格的条件(分数最高)**放在最前面,就像过滤网一样,先筛出最高的。

生活中的更多例子

例子1:根据零花钱数额决定买什么零食

#include <iostream>
using namespace std;
int main() {
    int money;                 // 零花钱
    cout << "你有多少钱?";
    cin >> money;
    if (money >= 20) {
        cout << "可以买一盒薯片和一瓶可乐!" << endl;
    } else if (money >= 10) {
        cout << "可以买一包饼干" << endl;
    } else if (money >= 5) {
        cout << "可以买一根棒棒糖" << endl;
    } else {
        cout << "钱太少,什么都买不了,攒钱吧!" << endl;
    }
    return 0;
}

这里条件从大到小排列:20 元以上、10 元以上、5 元以上,确保每个金额只进入对应分支。

例子2:根据身高选择游乐项目

#include <iostream>
using namespace std;
int main() {
    double height;          // 身高,单位米
    cout << "请输入你的身高(米):";
    cin >> height;
    if (height >= 1.5) {
        cout << "你可以玩过山车、大摆锤等所有项目!" << endl;
    } else if (height >= 1.2) {
        cout << "你可以玩儿童区的碰碰车、旋转木马。" << endl;
    } else if (height >= 0.5) {
        cout << "你只能在家长的陪同下玩摇摇车。" << endl;
    } else {
        cout << "身高数据有误,请重新输入。" << endl;
    }
    return 0;
}

例子3:输入月份判断季节(巩固逻辑运算符)

int month;                  // 月份
cin >> month;
if (month >= 3 && month <= 5) {      // 3~5月:春天
    cout << "春天" << endl;
} else if (month >= 6 && month <= 8) { // 6~8月:夏天
    cout << "夏天" << endl;
} else if (month >= 9 && month <= 11) { // 9~11月:秋天
    cout << "秋天" << endl;
} else if (month == 12 || month == 1 || month == 2) { // 12、1、2月:冬天
    cout << "冬天" << endl;
} else {
    cout << "无效月份" << endl;
}

这里用 &&(并且)表示“同时满足”,用 ||(或者)表示“满足其中之一”。注意:冬天比较特殊,月份不是连续的,所以用 || 连接。

新手容易犯的错误

  1. 条件顺序错误(前面已经讲过)
  2. 忘记写花括号:如果分支只有一条语句可以省略花括号,但容易导致误解。建议所有分支都加上花括号,哪怕只有一行。
  3. else if 拼写错误:写成 elseifelse if 中间没有空格都会编译错误。正确写法是 else if(两个单词,中间有空格)。
  4. 在条件中写赋值号 = 而不是等号 ==:比如 if (score = 90) 会把 90 赋值给 score,然后判断赋值结果(非零即真),程序不会报错但逻辑全错。一定要写 if (score == 90)
  5. 忘记处理 else:如果最后没有 else,而且所有条件都不满足,程序什么都不做,有时会导致意外。最好根据情况补上 else 输出提示。

完整可运行示例:今日计划选择器

想象一下,你早上醒来,根据时间决定做什么。这个程序完整演示了多分支 if 的使用。

#include <iostream>
using namespace std;
int main() {
    int hour;                  // 当前小时(0~23)
    cout << "现在几点?(输入小时,0~23):";
    cin >> hour;

    if (hour >= 0 && hour < 6) {
        cout << "半夜了,快睡觉!" << endl;
    } else if (hour >= 6 && hour < 8) {
        cout << "起床洗漱,准备上学。" << endl;
    } else if (hour >= 8 && hour < 12) {
        cout << "上午上课时间,专心听讲!" << endl;
    } else if (hour >= 12 && hour < 14) {
        cout << "午饭时间,吃好睡好下午才有精神。" << endl;
    } else if (hour >= 14 && hour < 17) {
        cout << "下午继续学习或运动。" << endl;
    } else if (hour >= 17 && hour < 19) {
        cout << "晚饭时间,放松一下。" << endl;
    } else if (hour >= 19 && hour < 22) {
        cout << "晚上写作业或阅读,别熬夜哦。" << endl;
    } else if (hour >= 22 && hour <= 23) {
        cout << "准备睡觉,明天见!" << endl;
    } else {
        cout << "输入的小时数不在 0~23 之间,请重新运行程序。" << endl;
    }

    return 0;
}

这个程序把一天分成多个时间段,每个条件都用了 && 确保区间准确。注意最后 else 用来处理输入错误的情况,很实用。

小练习

  1. 区间判断:输入一个整数,判断它属于哪个区间:020 输出“小”,2150 输出“中”,51~100 输出“大”,100 以上输出“超大”。(提示:条件从大到小或从小到大都可以,但要注意边界。)

  2. 自动售货机:假设自动售货机里有三种饮料:1号可乐 3元,2号雪碧 3元,3号果汁 5元。输入你有的钱数,输出你能买得起的饮料列表(有多种选择时都输出)。提示:可以用多个 if(但不属于多分支结构,而是多个独立判断)——这是一道思考题,想想多分支和多个 if 的区别。

相关指引

  • if-else 语句:处理两个分支的基础选择结构。
  • 逻辑运算符&&(与)、||(或)、!(非),用于组合多个条件。
  • switch 语句:当条件是一个变量的多个离散值(如数字 1、2、3 或字符 'A'、'B')时,switch 更清晰。
  • 嵌套 if:在 if 分支内部再写 if,处理更复杂的条件组合。

多分支 if 就像一条检查流水线,每个条件是一道关卡。记住:严格的条件要先过,这样程序才能准确找到属于你的那一条路。

例题精讲

1单选题

在C++中,关于if-else if-else多分支结构,下列描述正确的是?

A程序会依次判断条件,当某个条件为真时,执行其对应的语句块,然后跳过整个结构
B如果多个条件同时为真,则所有为真的分支都会被执行
Celse if 的数量没有限制,但必须有一个else分支
Delse if 后面的条件表达式可以省略括号
2单选题

设有如下代码: int a=10; if(a>5) cout<<"A"; else if(a>8) cout<<"B"; else if(a>12) cout<<"C"; else cout<<"D"; 输出结果是?

AA
BB
CC
DD
3判断题

在if-else if-else结构中,如果所有条件都不满足,则执行else分支的语句(假设else存在)。

4判断题

在C++中,if-else if-else结构中的else if可以有任意多个,但else最多只能有一个。

5填空题
请补全以下代码,实现判断整数n的正负零:
if(n>0) cout<<"正";
else if(___) cout<<"负";
else cout<<"零";