明德香蜜-小学部L5-笔记-分支结构2
2026-10-21 18:37:32
发布于:广东
C++ 分支结构学习笔记整理
一、阶梯式判断(if-else if-else 多分支)
核心原理
利用 if-else if 的"短路"特性:只有前面的条件不成立,才会判断后面的条件。
int n;
cin >> n;
if (n >= 90) {
cout << "A";
} else if (n >= 80) { // 到这里说明 n < 90 已经成立
cout << "B";
} else if (n >= 70) { // 到这里说明 n < 80 已经成立
cout << "C";
} else if (n >= 60) { // 到这里说明 n < 70 已经成立
cout << "D";
} else { // 到这里说明 n < 60
cout << "E";
}
通用模板
if (表达式1) {
// 表达式1为 true 时执行
} else if (表达式2) {
// 表达式1不成立 且 表达式2成立时执行
} else if (表达式3) {
// 表达式1、2都不成立 且 表达式3成立时执行
} else {
// 以上所有表达式都不成立时执行
}
⚠️ 两个常见陷阱
- 顺序不能乱:
n>=90必须写在n>=80前面。如果先判断n>=80,那么 95 分也会输出 "B"。 - else 可省略:但省略后要确保逻辑完整,比如上面的例子如果去掉
else,n<60 时什么都不会输出。
二、逻辑运算符
| 运算符 | 名称 | 符号 | 规则 | 记忆口诀 |
|---|---|---|---|---|
| 与 | AND | && |
两个都为 true → true;否则 false | 全真才真 |
| 或 | OR | || |
两个都为 false → false;否则 true | 全假才假 |
| 非 | NOT | ! |
true 变 false,false 变 true | 取反 |
真值表
a && b(与)
| a | b | 结果 |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
a || b(或)
| a | b | 结果 |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
!a(非)
| a | 结果 |
|---|---|
| true | false |
| false | true |
代码示例
int a = 10, b = 20;
cout << (a > 5 && b > 15); // true(两个都满足)
cout << (a > 100 || b > 15); // true(有一个满足)
cout << !(a > 5); // false(取反)
// 判断闰年(经典应用)
int year;
cin >> year;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
cout << "闰年";
}
⚠️ 短路求值(重要特性)
&&:左边为 false 时,右边不会执行||:左边为 true 时,右边不会执行
int x = 0;
if (x != 0 && 10 / x > 1) { // x=0 时,右边不会执行,避免除零错误
// ...
}
三、分支嵌套
核心思想
分支内部再套分支,条件的判断有先后顺序,也可能存在所属关系。
三种常见结构
1. 简单嵌套
if (外层条件) {
if (内层条件) {
// 外层成立 且 内层成立
}
}
2. 带 else 的内层
if (外层条件) {
if (内层条件) {
// ...
} else {
// ...
}
}
3. 内外都有 else 的完整结构
if (外层条件) {
if (内层条件1) {
// ...
} else if (内层条件2) {
// ...
}
} else {
if (内层条件) {
// ...
}
}
实例:判断一个数是否为"正偶数"
int n;
cin >> n;
if (n > 0) { // 先判断正负
if (n % 2 == 0) { // 再判断奇偶
cout << "正偶数";
} else {
cout << "正奇数";
}
} else if (n == 0) {
cout << "零";
} else {
cout << "负数";
}
⚠️ 嵌套的关键注意点
- 逻辑层次要清楚:内层判断通常是外层成立后才需要考虑的细分情况。
- else 的配对规则:
else总是与最近的、还未配对的if配对。建议一律加{}避免歧义。
// 危险写法(else 实际配给了内层 if)
if (a > 0)
if (b > 0)
cout << "A";
else // 其实属于 if(b>0)
cout << "B";
// 安全写法
if (a > 0) {
if (b > 0) {
cout << "A";
}
} else {
cout << "B";
}
四、三者结合的综合示例
判断某年某月有多少天:
int year, month;
cin >> year >> month;
if (month == 2) {
// 嵌套:2月需要判断闰年
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
cout << 29;
} else {
cout << 28;
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
// 逻辑或:小月
cout << 30;
} else {
cout << 31;
}
这个例子同时体现了:
- 阶梯式判断(月大/月小/2月三分支)
- 逻辑运算符(
&&判断闰年、||列举小月) - 分支嵌套(2月内部再判断闰年)
五、易错点总结
| 易错点 | 说明 |
|---|---|
= vs == |
判断相等用 ==,= 是赋值 |
| 阶梯判断顺序 | 范围判断要从大到小或从小到大有序排列 |
&& / || 优先级 |
&& 优先级高于 ||,复杂表达式加括号 |
| 悬空 else | 嵌套时 else 配最近 if,建议加 {} |
| 短路副作用 | 依赖短路可避免除零/越界,但别把重要计算放右边 |
| 回放:https://live-admin.xiaomawang.com/teacher/view-record?videourl=https://xm-live.oss-cn-shanghai.aliyuncs.com/AgoraRecordStream/merged_LIVE0YMMTB8A0QY9B8TLNAEM9UB6IWEP.m3u8 |
这里空空如也














有帮助,赞一个