C++ 多分支 if-else if-else
中等45C++ 多分支选择: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;
}
这里用 &&(并且)表示“同时满足”,用 ||(或者)表示“满足其中之一”。注意:冬天比较特殊,月份不是连续的,所以用 || 连接。
新手容易犯的错误
- 条件顺序错误(前面已经讲过)
- 忘记写花括号:如果分支只有一条语句可以省略花括号,但容易导致误解。建议所有分支都加上花括号,哪怕只有一行。
- else if 拼写错误:写成
elseif或else if中间没有空格都会编译错误。正确写法是else if(两个单词,中间有空格)。 - 在条件中写赋值号
=而不是等号==:比如if (score = 90)会把 90 赋值给 score,然后判断赋值结果(非零即真),程序不会报错但逻辑全错。一定要写if (score == 90)。 - 忘记处理 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 用来处理输入错误的情况,很实用。
小练习
-
区间判断:输入一个整数,判断它属于哪个区间:0
20 输出“小”,2150 输出“中”,51~100 输出“大”,100 以上输出“超大”。(提示:条件从大到小或从小到大都可以,但要注意边界。) -
自动售货机:假设自动售货机里有三种饮料:1号可乐 3元,2号雪碧 3元,3号果汁 5元。输入你有的钱数,输出你能买得起的饮料列表(有多种选择时都输出)。提示:可以用多个 if(但不属于多分支结构,而是多个独立判断)——这是一道思考题,想想多分支和多个 if 的区别。
相关指引
- if-else 语句:处理两个分支的基础选择结构。
- 逻辑运算符:
&&(与)、||(或)、!(非),用于组合多个条件。 - switch 语句:当条件是一个变量的多个离散值(如数字 1、2、3 或字符 'A'、'B')时,switch 更清晰。
- 嵌套 if:在 if 分支内部再写 if,处理更复杂的条件组合。
多分支 if 就像一条检查流水线,每个条件是一道关卡。记住:严格的条件要先过,这样程序才能准确找到属于你的那一条路。
例题精讲
在C++中,关于if-else if-else多分支结构,下列描述正确的是?
设有如下代码: int a=10; if(a>5) cout<<"A"; else if(a>8) cout<<"B"; else if(a>12) cout<<"C"; else cout<<"D"; 输出结果是?
在if-else if-else结构中,如果所有条件都不满足,则执行else分支的语句(假设else存在)。
在C++中,if-else if-else结构中的else if可以有任意多个,但else最多只能有一个。
请补全以下代码,实现判断整数n的正负零:
if(n>0) cout<<"正";
else if(___) cout<<"负";
else cout<<"零";