Administrator
发布于 2026-06-22 / 1 阅读
0
0

C++ 分支流程控制:if-else、switch 多条件判断完整教程

一、前言

上一篇我们掌握了比较、逻辑运算符,本篇基于布尔判断实现程序分支,让代码根据不同条件执行不同逻辑。分为两大核心结构:if/else 区间判断、switch 等值匹配判断,配套学生成绩分级、菜单选择实战案例。

二、if 单分支(满足条件才执行)

语法格式:

cpp

运行

if (判断条件)
{
    条件成立时执行的代码;
}

条件必须是布尔表达式(true/false),括号不可省略;单条执行语句可省略大括号,规范建议统一加{}

示例:判断是否成年

cpp

运行

#include <iostream>
using namespace std;

int main()
{
    int age;
    cout << "请输入年龄:";
    cin >> age;
    if (age >= 18)
    {
        cout << "已成年,可以进入网站" << endl;
    }
    return 0;
}

三、if-else 双分支(二选一执行)

语法:条件成立走 if,不成立走 else,两条逻辑互斥,只会执行其一

cpp

运行

if (条件)
{
    成立逻辑;
}
else
{
    不成立逻辑;
}

示例:及格 / 不及格判断

cpp

运行

int score;
cin >> score;
if (score >= 60)
{
    cout << "成绩及格" << endl;
}
else
{
    cout << "成绩不及格,需要补考" << endl;
}

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

五、if 嵌套(多条件叠加判断)

在 if 代码块内部再写 if,实现多层校验逻辑,示例:判断成年且有驾照才能开车

cpp

运行

int age;
bool hasLicense;
cout << "输入年龄:";
cin >> age;
cout << "是否有驾照(1有/0无):";
cin >> hasLicense;

if (age >= 18)
{
    if (hasLicense == true)
    {
        cout << "可以合法开车" << endl;
    }
    else
    {
        cout << "成年但无驾照,不能开车" << endl;
    }
}
else
{
    cout << "未成年,禁止驾车" << endl;
}

六、switch 等值匹配分支(固定数值匹配专用)

基础语法

cpp

运行

switch(整型变量)
{
    case 常量值1:
        执行代码;
        break; // 跳出switch,不加会穿透到下一个case
    case 常量值2:
        执行代码;
        break;
    default: // 所有case都不匹配时执行,可选
        默认逻辑;
        break;
}

硬性规则

  1. switch 括号内只能是 intcharshort整型类型,不支持浮点 double、字符串 string

  2. case 后必须写固定常量,不能写变量、区间表达式

  3. break 至关重要:缺少 break 会发生case 穿透,继续执行后续 case 代码

  4. default 可写在任意位置,建议放最后

实战:简易功能菜单

cpp

运行

#include <iostream>
using namespace std;

int main()
{
    int op;
    cout << "===== 功能菜单 =====" << endl;
    cout << "1. 查询成绩\n2. 修改信息\n3. 退出程序" << endl;
    cout << "请输入操作序号:";
    cin >> op;

    switch(op)
    {
        case 1:
            cout << "正在查询成绩..." << endl;
            break;
        case 2:
            cout << "正在打开信息修改页面..." << endl;
            break;
        case 3:
            cout << "程序即将退出" << endl;
            break;
        default:
            cout << "输入序号无效,请重新运行程序" << endl;
            break;
    }
    return 0;
}

case 穿透用法(主动利用穿透简化代码)

需求:输入 1/2/3 都输出低年级,4/5 输出高年级

cpp

运行

int grade;
cin >> grade;
switch(grade)
{
    case 1:
    case 2:
    case 3:
        cout << "低年级学生" << endl;
        break;
    case 4:
    case 5:
        cout << "高年级学生" << endl;
        break;
    default:
        cout << "年级不存在";
}

七、if 和 switch 场景选择区分

  1. if-else if:判断区间范围、多条件组合、浮点 / 字符串判断

  2. switch:单一整型变量,固定等值匹配、菜单选择场景

八、新手高频易错点

  1. if 括号后加分号 if(a>10);{}:分号会直接结束 if 语句,大括号代码永远执行

  2. switch case 忘记写 break,出现穿透 bug

  3. switch 传入 double、string 类型,直接编译报错

  4. else 没有匹配对应 if:大括号层级错乱导致逻辑分支错位

九、综合实战:简易会员折扣计算器

cpp

运行

#include <iostream>
using namespace std;

int main()
{
    double price;
    int level;
    cout << "输入商品原价:";
    cin >> price;
    cout << "会员等级(0普通/1银卡/2金卡):";
    cin >> level;

    double finalPrice;
    switch(level)
    {
        case 0: finalPrice = price; break;
        case 1: finalPrice = price * 0.95; break;
        case 2: finalPrice = price * 0.85; break;
        default: finalPrice = price; cout << "等级输入错误,按原价计算" << endl;
    }
    cout << "应付金额:" << finalPrice << endl;
    return 0;
}

十、下期预告

下一篇:C++ 循环结构:for/while/do-while、break 与 continue 流程控制详解


评论