一、前言
上一篇我们掌握了比较、逻辑运算符,本篇基于布尔判断实现程序分支,让代码根据不同条件执行不同逻辑。分为两大核心结构: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;
}
硬性规则
switch 括号内只能是
int、char、short等整型类型,不支持浮点 double、字符串 stringcase 后必须写固定常量,不能写变量、区间表达式
break至关重要:缺少 break 会发生case 穿透,继续执行后续 case 代码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 场景选择区分
用
if-else if:判断区间范围、多条件组合、浮点 / 字符串判断用
switch:单一整型变量,固定等值匹配、菜单选择场景
八、新手高频易错点
if 括号后加分号
if(a>10);{}:分号会直接结束 if 语句,大括号代码永远执行switch case 忘记写 break,出现穿透 bug
switch 传入 double、string 类型,直接编译报错
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 流程控制详解