前置条件:会写
if/else,认识关系运算符>、<、>=、<=、==、!=,知道“条件成立是 1、不成立是 0”;会用%判断奇偶。
上节课:二选一
条件成立吗?
│ │
成立 不成立
│ │
A 语句 B 语句
这节课:把“选择”变多,把“条件”变复杂
┌── 分支结构补齐 ────────────────┐ ┌── 逻辑运算符 ──────────────────┐
│ │ │ │
│ 多分支 if / else if / else │ │ && 与:两个条件都成立才算 │
│ 嵌套 if 里面再写一个 if │ │ || 或:有一个成立就算 │
│ │ │ ! 非:把成立变不成立 │
└────────────────────────────────┘ └────────────────────────────────┘
│ │
└──────────► 写出更贴近题意的判断 ◄──────┘
多分支用来在三条以上的路里挑一条;嵌套用来“先问一个大问题,再问一个小问题”;逻辑运算符用来把几个简单条件连成一个复杂条件。
先用一分钟把上节课的两块积木摆出来:
// 单分支:成立才做,不成立就跳过
if (n > 0) {
cout << "positive" << endl;
}
// 双分支:两条路,必走一条
if (score >= 60) {
cout << "pass" << endl;
} else {
cout << "fail" << endl;
}
一块石头只有两种命运:掉下去或者不掉下去。可如果题目要把成绩分成 A、B、C、D 四档,两个分支就不够用了。下面先把“路”变多。
if / else if / else多分支的意思是:从上往下一条一条检查,遇到第一个成立的条件就执行它那一支,后面的全部跳过;如果一条都不成立,就走最后的 else。
if (条件 1) {
条件 1 成立时执行的语句;
} else if (条件 2) {
条件 2 成立时执行的语句;
} else if (条件 3) {
条件 3 成立时执行的语句;
} else {
上面全都不成立时执行的语句;
}
例子:读入一个分数,按下面的规则输出档位。
| 分数 | 输出 |
|---|---|
| 90 分及以上 | A |
| 80 ~ 89 分 | B |
| 60 ~ 79 分 | C |
| 60 分以下 | D |
#include<iostream>
using namespace std;
int main() {
int score;
cin >> score;
if (score >= 90) {
cout << "A" << endl;
} else if (score >= 80) {
cout << "B" << endl;
} else if (score >= 60) {
cout << "C" << endl;
} else {
cout << "D" << endl;
}
return 0;
}
输入 95 输出 A,输入 85 输出 B,输入 60 输出 C,输入 30 输出 D。
讲解要点:
else if 时,条件和 if 一样要写在小括号里,这个位置不能只写 else;score 是 85 时,先问“≥ 90 吗”,不成立;再问“≥ 80 吗”,成立,输出 B,后面的 else if 和 else 直接跳过;score >= 80 这一句,说明“不小于 90”已经成立了。反过来写 else if (score >= 80 && score < 90) 不算错,但多此一举;