Skip to content

🚦 05. 分支语句

在生活中,我们经常需要根据不同的条件做出不同的选择。比如:

  • 如果今天下雨,就带伞出门;否则就不带。
  • 如果考试成绩 ≥ 60 分,就及格了;否则就不及格。
  • 如果分数 ≥ 90,评为"优秀";如果 ≥ 60,评为"及格";否则评为"不及格"。

在编程里,这种根据条件决定执行哪段代码的机制,就叫做分支语句(也叫选择结构)。

NOTE

分支语句的核心就是"判断条件 → 选择执行"。它是让程序拥有"思考"能力的基础。

1. 关系运算符回顾

分支语句通常需要判断一个条件是否成立,这就会用到关系运算符(比较两个值的大小关系)。

运算符含义示例
>大于5 > 3true
<小于5 < 3false
>=大于等于5 >= 3true
<=小于等于5 <= 3false
==等于5 == 3false
!=不等于5 != 3true

关系运算符的结果是布尔类型bool),只有 true(真)或 false(假)两个值。

cpp
int x = 5, y = 7;
cout << (x < y) << endl;  // 输出 1(true)
cout << (x == y) << endl; // 输出 0(false)

TIP

cout 输出布尔值时会显示 1(表示 true)或 0(表示 false),而不是直接显示 true / false

2. if 单分支结构

语法:

cpp
if (条件) {
    // 条件为真时执行的代码
}
  • 条件 是一个表达式,结果必须是 bool 类型。
  • 如果条件为 true,执行 {} 里的代码块。
  • 如果条件为 false,跳过代码块,继续往下执行。

示例:判断一个数是否为正数

cpp
#include <iostream>
using namespace std;

int main() {
    int num;
    cout << "请输入一个整数:";
    cin >> num;

    if (num > 0) {
        cout << "这是一个正数。" << endl;
    }

    cout << "程序结束。" << endl;
    return 0;
}

输入 5 时输出:

这是一个正数。
程序结束。

输入 -3 时输出:

程序结束。

TIP

如果 if 后面的代码块只有一条语句,可以省略大括号 {},但强烈建议一直写大括号,这样代码更清晰,也方便以后添加语句。

cpp
if (num > 0)
    cout << "正数" << endl;  // 合法但不建议省略 {}

3. if-else 双分支结构

语法:

cpp
if (条件) {
    // 条件为真时执行
} else {
    // 条件为假时执行
}
  • ifelse 是"二选一"——只能执行其中一个分支。

示例:判断奇偶数

cpp
#include <iostream>
using namespace std;

int main() {
    int num;
    cout << "请输入一个整数:";
    cin >> num;

    if (num % 2 == 0) {
        cout << num << " 是偶数。" << endl;
    } else {
        cout << num << " 是奇数。" << endl;
    }

    return 0;
}

输入 7 时输出:

7 是奇数。

输入 10 时输出:

10 是偶数。

TIP

使用 num % 2 == 0 判断偶数,因为能被 2 整除的数是偶数。记住:取余运算符 % 返回除法后的余数。

4. if-else if-else 多分支结构

语法:

cpp
if (条件1) {
    // 条件1为真时执行
} else if (条件2) {
    // 条件1为假且条件2为真时执行
} else if (条件3) {
    // 条件1、2为假且条件3为真时执行
} else {
    // 以上所有条件均为假时执行
}
  • 从上到下依次判断,只要满足一个条件,就跳过后续所有分支
  • if 必须有,else if 可以有多个else 最多有一个(也可以没有)。

示例:成绩等级判定

cpp
#include <iostream>
using namespace std;

int main() {
    int score;
    cout << "请输入你的成绩:";
    cin >> score;

    if (score >= 90) {
        cout << "等级:优秀" << endl;
    } else if (score >= 80) {
        cout << "等级:良好" << endl;
    } else if (score >= 60) {
        cout << "等级:及格" << endl;
    } else {
        cout << "等级:不及格" << endl;
    }

    return 0;
}

运行示例:

请输入你的成绩:85
等级:良好

WARNING

注意条件的顺序非常重要!如果把 score >= 60 写在前面,那么 85 分也会先匹配到"及格",后面的"良好"和"优秀"就不会执行了。程序总是从上到下匹配第一个为真的条件

5. 嵌套 if 结构

ifelse 的代码块内部,可以再写 if 语句,这就是嵌套 if

示例:成年且男性/女性的判断

cpp
#include <iostream>
using namespace std;

int main() {
    int age;
    char gender;
    cout << "请输入年龄:";
    cin >> age;

    if (age >= 18) {
        cout << "请输入性别(M/F):";
        cin >> gender;

        if (gender == 'M' || gender == 'm') {
            cout << "成年男性" << endl;
        } else if (gender == 'F' || gender == 'f') {
            cout << "成年女性" << endl;
        } else {
            cout << "未知性别" << endl;
        }
    } else {
        cout << "未成年人" << endl;
    }

    return 0;
}

TIP

嵌套 if 虽然功能强大,但嵌套层次不宜过深(一般不超过 3 层),否则代码会变得难以阅读。如果嵌套太深,可以考虑用逻辑运算符 &&|| 合并条件来简化。

6. switch 语句

当判断的条件是某个变量的多个固定值时,用 switchif-else if 更清晰。

语法:

cpp
switch (表达式) {
    case 值1:
        // 匹配值1时执行
        break;
    case 值2:
        // 匹配值2时执行
        break;
    // ... 更多 case ...
    default:
        // 所有 case 都不匹配时执行
        break;
}
  • 表达式 的结果必须是整型intchar 等)或枚举类型
  • case 后面的值必须是常量,不能是变量。
  • break 用于跳出 switch。如果没有 break,会继续执行下一个 case(称为"穿透")。
  • default 是可选的,相当于 if 中的 else

示例:根据星期几输出不同的提示

cpp
#include <iostream>
using namespace std;

int main() {
    int day;
    cout << "请输入星期几(1-7):";
    cin >> day;

    switch (day) {
        case 1:
            cout << "星期一,新的一周开始了!" << endl;
            break;
        case 2:
            cout << "星期二,加油!" << endl;
            break;
        case 3:
            cout << "星期三,一周过半了!" << endl;
            break;
        case 4:
            cout << "星期四,坚持住!" << endl;
            break;
        case 5:
            cout << "星期五,马上周末了!" << endl;
            break;
        case 6:
            cout << "星期六,好好休息!" << endl;
            break;
        case 7:
            cout << "星期日,准备迎接新的一周!" << endl;
            break;
        default:
            cout << "输入错误,请输入 1-7 之间的数字。" << endl;
            break;
    }

    return 0;
}

关于 break 和穿透现象:

如果故意省略 break,程序会"穿透"到下一个 case 继续执行,直到遇到 breakswitch 结束。

cpp
int score = 85;
switch (score / 10) {
    case 10:
    case 9:
        cout << "优秀" << endl;   // score >= 90
        break;
    case 8:
    case 7:
    case 6:
        cout << "及格" << endl;    // 60 <= score <= 89
        break;
    default:
        cout << "不及格" << endl;  // score < 60
        break;
}

利用穿透,可以让多个 case 共享同一段代码。

NOTE

switch 适合判断一个变量的固定取值(比如星期几、月份、菜单选项等)。 如果需要判断范围(如 score >= 60),用 if-else if 更合适。

7. if 和 switch 的对比

特性if 语句switch 语句
适用场景范围判断、复杂逻辑条件固定值的多分支选择
条件类型任意布尔表达式整型、字符型、枚举型
可读性条件复杂时可读性较差多个固定值时结构清晰
灵活性更灵活,支持嵌套和复合逻辑较严格,case 值必须是常量
性能逐个判断可以跳转优化,多个 case 时更快

TIP

初学阶段,建议首选 if 系列语句。当你发现有一大堆 else if 都在判断同一个变量的不同值的时候,可以考虑换成 switch

8. 小结

  • if 单分支:如果条件成立,就执行某段代码。
  • if-else 双分支:二选一,条件成立走 if,否则走 else
  • if-else if-else 多分支:多选一,从上到下匹配第一个成立的条件。
  • 嵌套 if:if 里面再套 if,注意层次不要太深。
  • switch 语句:适合判断变量的多个固定值,记得加 break 避免穿透。
  • 关系运算符的结果是 bool 类型(true / false)。

9. 练习

  1. 简单判断:输入一个整数,判断它是否大于 0。如果大于 0,输出"正数"。

  2. 奇偶判断:输入一个整数,判断它是奇数还是偶数。

  3. 最大值:输入三个整数,输出其中最大的那个数。

  4. 成绩等级:输入一个成绩(0~100),输出对应的等级:

    • 90~100 → 优秀
    • 80~89 → 良好
    • 60~79 → 及格
    • 0~59 → 不及格
    • 其他 → 输入错误
  5. 季节判断:输入一个月份(1~12),用 switch 输出对应的季节:

    • 3~5 月 → 春天
    • 6~8 月 → 夏天
    • 9~11 月 → 秋天
    • 12、1、2 月 → 冬天
    • 其他 → 输入错误
  6. 闰年判断:输入一个年份,判断它是否为闰年。

    闰年规则:能被 4 整除但不能被 100 整除,或者能被 400 整除。

  7. 挑战题:简易计算器:输入两个整数和一个运算符(+-*/),用 switch 输出运算结果。如果除数为 0,输出"错误:除数不能为 0"。

💬 与我联系 QQ:774165314 | 微信:ArinRiver