C++ 编程语法

四、分支结构

程序并不总是一行一行顺序执行——有时需要根据条件来决定走哪条路。本章学习 if、if-else、多分支链、三元运算符和 switch 语句。

比较运算符与逻辑运算符

分支结构依赖条件判断,条件判断又依赖两类运算符:比较运算符用来比较两个值,结果是 truefalse逻辑运算符用来组合多个条件。

4.1.1 比较运算符

运算符含义示例结果优先级
>大于5 > 3true6
<小于5 < 3false6
>=大于等于5 >= 5true6
<=小于等于3 <= 5true6
==等于(两个等号!)5 == 5true7
!=不等于5 != 3true7

4.1.2 逻辑运算符

运算符含义说明示例优先级
&&且(AND)两个条件都为 true 才为 trueage>=6 && age<=1211
||或(OR)至少一个为 true 就为 truex==1 || x==212
!非(NOT)truefalsefalsetrue!(x > 0)2
🚨
高频错误:== 是比较(两个等号),= 是赋值(一个等号)。写成 if (a = 5) 是赋值不是比较,不会报错但逻辑完全错误,是最难发现的 bug 之一!

if 语句

if 语句仅当条件值为 true 时才执行大括号内的代码块。条件为 false 时直接跳过。

if 流程图 开始 条件 表达式 执行语句 结束
C++ · if 语法 & 示例
1// 语法
2if (条件表达式)
3{
4 // 条件为 true 时执行
5}
6
7// 示例
8int score = 85;
9if (score >= 60)
10{
11 cout << "及格了!" << endl;
12}

if-else 语句

当条件不满足时,使用 else 指定另一条路。程序必走其中一条分支,不会两条都走。

if-else 流程图 开始 条件 表达式 语句 1 语句 2 结束
C++ · if-else 示例
1int score = 55;
2if (score >= 60)
3{
4 cout << "及格!" << endl;
5}
6else
7{
8 cout << "不及格,继续努力!" << endl;
9}

多分支 if-else if-else

需要判断多个条件时,可以在 ifelse 之间插入任意个 else if,程序从上到下依次检查,一旦匹配就执行对应块并跳出,最后的 else 兜底。

score ≥ 90? score ≥ 75? score ≥ 60? 优秀 良好 及格 不及格
C++ · 多分支示例(成绩判断)
1int score = 78;
2if (score >= 90)
3{
4 cout << "优秀" << endl;
5}
6else if (score >= 75)
7{
8 cout << "良好" << endl; // score=78,匹配这里 ✓
9}
10else if (score >= 60)
11{
12 cout << "及格" << endl;
13}
14else
15{
16 cout << "不及格" << endl;
17}

条件表达式(三元运算符)

三元运算符是 if-else 的简洁写法,适合简单的二选一赋值场景,一行搞定:

条件 ? 值1(true时返回) : 值2(false时返回)
条件为 true → 返回值1 条件为 false → 返回值2
C++ · 三元运算符示例
1int a = 10, b = 20;
2
3int maxVal = (a > b) ? a : b; // maxVal = 20
4cout << "较大值是:" << maxVal << endl;
5
6// 等价的 if-else 写法(更长)
7int maxVal2;
8if (a > b) maxVal2 = a;
9else maxVal2 = b;
💡
适用场景:三元运算符适合简单的二选一赋值,代码更紧凑。但嵌套多层的三元运算符可读性很差,这时应改用 if-else

switch 语句

当需要根据一个变量的多种具体取值分别处理时,switch 比多个 if-else 更清晰,结构也更整齐。

switch (表达式) // 表达式必须是整型或字符型
case 常量1: 执行对应代码 ; break;
case 常量2: 执行对应代码 ; break;
case 常量3: 执行对应代码 ; break;
default: 所有 case 都不匹配时执行(类似 else) ; break;
⚠️
break 非常关键:每个 case 结尾都要加 break,否则程序会继续执行下面的 case(称为"穿透",fall-through),大多数时候这是 bug!
📌
switch 的限制:只支持整型(intchar 等)或枚举类型表达式,不能用 floatstring

故意穿透:多个 case 共享同一段逻辑

穿透大多数时候是 bug,但有一种情况下故意穿透非常实用——让多个 case 共享同一段代码,省去重复书写:

C++ · switch 示例(工作日判断)
1int day = 3;
2switch (day)
3{
4 case 1: // 故意穿透:1~5 共享同一输出
5 case 2:
6 case 3:
7 case 4:
8 case 5:
9 cout << "工作日\n";
10 break; // 到这里才退出
11 case 6:
12 case 7:
13 cout << "周末\n";
14 break;
15 default:
16 cout << "错误输入\n";
17 break;
18}
💡
default 的位置:default 是保底选项,当所有 case 都不匹配时执行,类似于 else。它可以放在 switch 内的任意位置,但习惯上放最后,保持代码整洁。