C++ 系统学习日记・第 05 天|流程结构:选择语句(if+switch 全解 + 高级用法)

0 阅读6分钟

📖 学习信息

学习课程:黑马 C++ 零基础入门教程

本日学习:C++ 程序流程结构之选择语句包含:if 语句(三种形式 + 嵌套)、switch 语句、穿透特性、if 与 switch 对比、综合实战案例


一、前言

程序默认执行顺序是从上到下依次执行(顺序结构),但实际开发中经常需要根据不同条件执行不同代码,这就需要选择结构。选择结构是程序逻辑控制的核心,后续所有复杂逻辑(循环、函数、算法)都建立在它的基础上,必须彻底掌握。


二、if 语句(最常用)

if 语句通过判断条件的真假,决定是否执行某段代码,共有三种基础形式和一种嵌套用法。

1. 单行 if 语句

语法

if (条件表达式) {
    // 条件为真时执行的代码
}

执行逻辑:条件为真(非 0)→ 执行大括号内代码;条件为假(0)→ 跳过不执行。

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

#include <iostream>
using namespace std;

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

    // 单行if:只有条件满足时才执行
    if (num > 0) {
        cout << num << " 是正数" << endl;
    }

    return 0;
}

2. if-else 语句(二选一)

语法

if (条件表达式) {
    // 条件为真时执行
} else {
    // 条件为假时执行
}

执行逻辑:条件真执行 if 块,条件假执行 else 块,二者必执行其一。

示例:判断一个数是奇数还是偶数

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

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

    return 0;
}

3. if-else if-else 语句(多条件多选一)

语法

if (条件1) {
    // 条件1为真执行
} else if (条件2) {
    // 条件2为真执行
} else if (条件3) {
    // 条件3为真执行
} else {
    // 所有条件都为假时执行
}

执行逻辑:从上到下依次判断条件,第一个满足的条件对应的代码块执行,执行后直接跳出整个 if 结构。

示例:根据分数判断成绩等级

int main()
{
    int score;
    cout << "请输入考试分数(0-100):";
    cin >> score;

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

    return 0;
}

4. if 嵌套(高级用法)

if 语句内部可以再嵌套 if 语句,用于处理更复杂的多条件判断。

示例:判断闰年

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

int main()
{
    int year;
    cout << "请输入年份:";
    cin >> year;

    if (year % 4 == 0) {
        if (year % 100 == 0) {
            if (year % 400 == 0) {
                cout << year << " 是闰年" << endl;
            } else {
                cout << year << " 不是闰年" << endl;
            }
        } else {
            cout << year << " 是闰年" << endl;
        }
    } else {
        cout << year << " 不是闰年" << endl;
    }

    return 0;
}

三、switch 语句

switch 语句用于多分支等值判断,相比 if-else if 结构更简洁、执行效率更高。

1. 基础语法

switch (表达式) {
    case 常量1:
        // 表达式等于常量1时执行
        break;
    case 常量2:
        // 表达式等于常量2时执行
        break;
    default:
        // 所有case都不匹配时执行
        break;
}

2. 核心规则(必记)

  1. switch 后的表达式只能是整型或字符型(不能是浮点型、字符串)
  2. case 后面必须跟常量表达式(不能是变量)
  3. break 用于跳出 switch 结构,没有 break 会发生穿透现象
  4. default 可选,用于处理所有 case 都不匹配的情况

示例:根据数字输出对应的星期几

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;
}

3. switch 高级用法:穿透特性

如果某个 case 后面没有写 break,程序会继续执行下一个 case 的代码,直到遇到 break 或 switch 结束。合理利用穿透可以简化代码

示例:根据月份判断所属季节

int main()
{
    int month;
    cout << "请输入月份(1-12):";
    cin >> month;

    switch (month) {
        // 3-5月:春季(多个case共用一个代码块)
        case 3:
        case 4:
        case 5:
            cout << "春季" << endl;
            break;
        // 6-8月:夏季
        case 6:
        case 7:
        case 8:
            cout << "夏季" << endl;
            break;
        // 9-11月:秋季
        case 9:
        case 10:
        case 11:
            cout << "秋季" << endl;
            break;
        // 12-2月:冬季
        case 12:
        case 1:
        case 2:
            cout << "冬季" << endl;
            break;
        default:
            cout << "输入错误" << endl;
            break;
    }

    return 0;
}

四、if 与 switch 对比

表格

对比项if 语句switch 语句
适用场景区间判断、复杂条件判断等值判断、多分支固定值判断
表达式类型任意布尔表达式只能是整型、字符型
代码可读性多条件时较繁琐多等值判断时更清晰
执行效率多条件时依次判断,效率较低直接跳转对应 case,效率更高

选择建议

  • 区间判断、复杂逻辑判断 → 用 if
  • 固定值的多分支判断 → 用 switch

五、常见错误与避坑点

  1. if 后面多写分号
// 错误写法:分号会导致if语句提前结束
if (num > 0); {
    cout << "正数" << endl;
}
// 正确写法:去掉分号
if (num > 0) {
    cout << "正数" << endl;
}
  1. switch 忘记写 break
// 错误:没有break,会执行case 2和case 3的代码
case 1:
    cout << "1" << endl;
case 2:
    cout << "2" << endl;
break;
  1. case 后面用变量
int a = 10;
// 错误:case后面必须是常量
case a:
    cout << "10" << endl;
break;
  1. 条件判断用赋值运算符 =
// 错误:这是赋值操作,不是判断相等,条件永远为真
if (num = 10) {
    cout << "等于10" << endl;
}
// 正确写法:用 ==
if (num == 10) {
    cout << "等于10" << endl;
}

六、综合实战案例:简易计算器

结合选择语句和运算符,实现一个支持加减乘除的简易计算器:

#include <iostream>
using namespace std;

int main()
{
    double num1, num2;
    char op;

    cout << "请输入第一个数:";
    cin >> num1;
    cout << "请输入运算符(+、-、*、/):";
    cin >> op;
    cout << "请输入第二个数:";
    cin >> num2;

    switch (op) {
        case '+':
            cout << num1 << " + " << num2 << " = " << num1 + num2 << endl;
            break;
        case '-':
            cout << num1 << " - " << num2 << " = " << num1 - num2 << endl;
            break;
        case '*':
            cout << num1 << " * " << num2 << " = " << num1 * num2 << endl;
            break;
        case '/':
            if (num2 == 0) {
                cout << "错误:除数不能为0" << endl;
            } else {
                cout << num1 << " / " << num2 << " = " << num1 / num2 << endl;
            }
            break;
        default:
            cout << "错误:无效的运算符" << endl;
            break;
    }

    return 0;
}

七、今日学习总结

  1. if 语句三种形式

    • 单行 if:单条件判断
    • if-else:二选一判断
    • if-else if-else:多条件多选一
  2. if 嵌套:处理复杂的多层条件判断

  3. switch 语句

    • 适用于多分支等值判断
    • 核心规则:表达式只能是整型 / 字符型,case 后跟常量
    • 穿透特性:合理利用可简化代码
  4. if vs switch:区间用 if,等值用 switch

  5. 避坑重点:if 后不加分号、switch 记得写 break、判断相等用 ==


✍️ 下节预告

下一篇将学习 C++ 循环结构:while 循环、do-while 循环、for 循环,以及循环嵌套、break 和 continue 语句,继续夯实程序流程控制基础。