分支结构(if 与逻辑运算)
一句话目标:让程序学会”看情况办事” —— 满足条件走一条路,不满足走另一条。
生活类比:妈妈让小明去超市,“如果有西瓜就买一个回来,否则直接回家”。这就是分支。
第一部分:关系(比较)运算符
分支的”条件”,靠关系运算符算出真(true)或假(false):
| 运算符 | 含义 | 举例 | 结果 |
|---|---|---|---|
> | 大于 | 5 > 3 | true |
>= | 大于等于 | 3 >= 3 | true |
< | 小于 | 3 < 5 | true |
<= | 小于等于 | 5 <= 3 | false |
== | 等于 | 5 == 5 | true |
!= | 不等于 | 2 != 2 | false |
⚠️ 最致命的坑:判断相等用
==(两个等号),不是=。
=是赋值,if (a = 5)会把 5 赋给 a 而不是比较,几乎必错。
第二部分:if / else
if (条件成立) {
// 条件为真时执行这里
} else {
// 否则执行这里
}例 1:输入数学成绩,90 分及以上输出 “A”。
int n;
cin >> n;
if (n >= 90) {
cout << "A";
}- 条件必须用圆括号括起来。
- 当
if后只有一条语句时,花括号可省略;但初学建议都写上,不易出错。
第三部分:多分支 if / else if / else
例 2:90 及以上输出 “A”,80 及以上输出 “B”,其他输出 “C”。
int n;
cin >> n;
if (n >= 90) {
cout << "A";
} else if (n >= 80) {
cout << "B";
} else {
cout << "C";
}关键:条件从上往下逐个判断,命中一个就不再看后面。
所以写else if (n >= 80)时,能走到这里就说明 n 一定 < 90,不用再写n < 90。
第四部分:逻辑运算符
把多个条件组合起来:
| 运算符 | 别名 | 含义 | 何时为 true |
|---|---|---|---|
&& | and | 与 | 两个都为 true |
|| | or | 或 | 至少一个为 true |
! | not | 非 | 把 true/false 反转 |
// 语文 > 90 并且 数学 > 90
if (chinese > 90 && math > 90) {
cout << "双优";
}第五部分:运算符优先级
一个表达式里多种运算符,谁先算?(从高到低)
| 优先级 | 运算符 |
|---|---|
| 最高 | 括号 ( ) |
| ↑ | 乘除取余 * / % |
| ↑ | 加减 + - |
| ↑ | 比较 > >= < <= |
| ↑ | 相等 == != |
| 低 | 逻辑 && || |
拿不准就加括号——既不会错,也更易读。
第六部分:三目(条件)运算符
一种更短的写法,常用于赋值:
表达式1 ? 表达式2 : 表达式3
如果表达式1为真,整个式子取表达式2,否则取表达式3。
int big = (a > b) ? a : b; // 取 a、b 中较大者经典例题:判断闰年
闰年规则:能被 4 整除且不能被 100 整除;或者能被 400 整除。
int y;
cin >> y;
if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
cout << "闰年";
} else {
cout << "平年";
}这道题把取余
%、关系==/!=、逻辑&& ||、括号优先级全用上了,是分支的集大成练习。
小结
- 关系运算符产出真/假;判断相等是
==,别写成=。 if / else if / else从上往下判断,命中即止。- 逻辑运算符
&& || !组合条件;拿不准优先级就加括号。 - 三目
? :是简洁的赋值分支。
课后小练
- 输入三个数,输出最大的(提示:if 嵌套或三目)。
- 输入一个年份,判断是否闰年(洛谷 P5713)。
- 多分支作业:洛谷 P5711、P5712。