分支结构
分支结构简介
在编程里,我们常常要依据不同的情形来做出不同的选择。比如我们判断数的奇偶性,如果一个数字能整除,那么就是偶数,否则为奇数。
分支结构就是用来处理这类"如果,那么"的问题的,在 C++ 中,主要有if-else语句和switch语句这两种分支结构。
条件表达式与比较运算符
引入
我们日常使用如果的时候,一般都会说“如果怎么怎么样,那么如何如何”。
这个“怎么怎么样”,一般来说要么为真要么为假。比如“如果今天下雨,那么带伞”,“今天下雨”就是要么为真要么为假的。
更加严格的来说,我们称这个“怎么怎么样”为一个命题,一个命题描述了一个要么是真的要么是假的的事情,比如“今天下雨”可以是一个命题,因为今天要么下雨要么不下雨。
那在学习分支结构之前,我们需要先了解电脑是如何来表示命题的。
我们在 C++ 编程中,使用条件表达式来描述一个命题。
在 C++ 里,条件表达式属于用于判定真假的表达式,其结果为布尔类型(true 或者 false)。
布尔类型是一种变量类型,在 C++ 里用它来描述真和假,可以当作是数值只能为 0 或者 1 的 int 类型,0 表示假,1 表示真。
条件表达式常被用于控制程序的流程,像 if 语句、while 语句、for 语句等都会用到它。借助不同的运算符,条件表达式能够对变量、常量进行比较和逻辑运算。
比较运算符
比较运算符用于比较两个值的大小关系,结果为布尔值。
条件表达式主要依靠各类运算符来构建,以下是常见的比较运算符。
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
== | 等于 | 5 == 5 | true |
!= | 不等于 | 5 != 3 | true |
< | 小于 | 5 < 10 | true |
> | 大于 | 5 > 3 | true |
<= | 小于等于 | 5 <= 5 | true |
>= | 大于等于 | 5 >= 3 | true |
示例代码:
示例代码
#include <iostream>
using namespace std;
int main() {
int a = 5, b = 3;
cout << "a == b: " << (a == b) << endl;
cout << "a != b: " << (a != b) << endl;
cout << "a < b: " << (a < b) << endl;
cout << "a > b: " << (a > b) << endl;
cout << "a <= b: " << (a <= b) << endl;
cout << "a >= b: " << (a >= b) << endl;
return 0;
}逻辑运算符
逻辑运算符用于连接多个条件表达式,帮助我们处理更复杂的判断情况。常见的逻辑运算符有三个:逻辑与(&&)、逻辑或(||)和逻辑非(!)。
逻辑与(&&)
逻辑与运算符就像两个小伙伴一起完成任务,只有当两个小伙伴都完成了自己的任务,整个任务才算完成。在编程里,只有当 && 两边的条件都为真时,整个表达式才为真,只要有一个条件为假,整个表达式就为假。
#include <iostream>
using namespace std;
int main() {
int age = 15; // 定义一个整数变量 age,代表年龄,初始值为 15
int score = 90; // 定义一个整数变量 score,代表分数,初始值为 90
// 使用逻辑与运算符判断年龄是否大于 12 且分数是否大于 80
bool isQualified = (age > 12) && (score > 80);
if (isQualified) {
cout << "满足年龄和分数要求。" << endl;
} else {
cout << "不满足年龄和分数要求。" << endl;
}
return 0;
}在这个例子中,age > 12 为真,score > 80 也为真,所以 (age > 12) && (score > 80) 整个表达式为真,程序会输出“满足年龄和分数要求。”
逻辑或(||)
逻辑或运算符就像两个小伙伴完成任务,只要有一个小伙伴完成了任务,整个任务就算完成。在编程里,只要 || 两边的条件有一个为真,整个表达式就为真,只有当两个条件都为假时,整个表达式才为假。
#include <iostream>
using namespace std;
int main() {
int height = 160; // 定义一个整数变量 height,代表身高,初始值为 160
int weight = 45; // 定义一个整数变量 weight,代表体重,初始值为 45
// 使用逻辑或运算符判断身高是否大于 170 或体重是否大于 50
bool isGood = (height > 170) || (weight > 50);
if (isGood) {
cout << "满足身高或体重要求。" << endl;
} else {
cout << "不满足身高和体重要求。" << endl;
}
return 0;
}在这个例子中,height > 170 为假,weight > 50 也为假,所以 (height > 170) || (weight > 50) 整个表达式为假,程序会输出“不满足身高和体重要求。”
逻辑非(!)
逻辑非运算符就像给条件“唱反调”,如果原来的条件为真,加上逻辑非运算符后就变成假;如果原来的条件为假,加上逻辑非运算符后就变成真。
#include <iostream>
using namespace std;
int main() {
bool isRainy = false; // 定义一个布尔变量 isRainy,代表是否下雨,初始值为 false
// 使用逻辑非运算符,得到与 isRainy 相反的结果
bool isSunny = !isRainy;
if (isSunny) {
cout << "天气晴朗。" << endl;
} else {
cout << "正在下雨。" << endl;
}
return 0;
}在这个例子中,isRainy 为假,使用逻辑非运算符后,isSunny 为真,程序会输出“天气晴朗。”
常用分支语句
上面我们介绍了 C++ 是如何表示“如果怎样怎样,那么如何如何,否则如何如何”中的“怎样怎样”的,现在我们要介绍如何表示剩下来的“如果,那么,否则”的内容。
if-else语句
if-else语句的作用是当某个条件成立时,执行一段代码;要是条件不成立,就执行另一段代码。

基本语法
if (条件) {
// 条件成立时执行的代码
} else {
// 条件不成立时执行的代码
}例题 1:判断一个数是奇数还是偶数
#include <iostream>
using namespace std;
int main() {
int num;
// 提示用户输入一个整数
cout << "请输入一个整数:";
cin >> num;
// 判断这个数除以 2 的余数是否为 0
if (num % 2 == 0) {
// 如果余数为 0,说明是偶数
cout << num << " 是偶数。" << endl;
} else {
// 如果余数不为 0,说明是奇数
cout << num << " 是奇数。" << endl;
}
return 0;
}在这个程序里,num % 2 == 0就是判断条件。如果num除以 2 的余数是 0,就输出num是偶数;反之,就输出num是奇数。
例题 2:比较两个数的大小
#include <iostream>
using namespace std;
int main() {
int a, b;
// 提示用户输入两个整数
cout << "请输入两个整数,用空格分隔:";
cin >> a >> b;
// 判断 a 是否大于 b
if (a > b) {
// 如果 a 大于 b,输出 a 大于 b
cout << a << " 大于 " << b << endl;
} else {
// 如果 a 不大于 b,输出 a 小于等于 b
cout << a << " 小于等于 " << b << endl;
}
return 0;
}在这个程序中,a > b是判断条件。若a大于b,就输出a大于b;否则,输出a小于等于b。
switch语句
switch语句适用于根据一个变量的不同取值来执行不同的代码块。

基本语法
switch (变量) {
case 值1:
// 当变量的值等于值 1 时执行的代码
break;
case 值2:
// 当变量的值等于值 2 时执行的代码
break;
default:
// 当变量的值不等于任何一个 case 的值时执行的代码
break;
}例题 3:根据输入的数字输出对应的星期几
#include <iostream>
using namespace std;
int main() {
int day;
// 提示用户输入一个 1 到 7 之间的整数
cout << "请输入一个 1 到 7 之间的整数:";
cin >> day;
// 根据 day 的值进行判断
switch (day) {
case 1:
// 如果 day 等于 1,输出星期一
cout << "星期一" << endl;
break;
case 2:
// 如果 day 等于 2,输出星期二
cout << "星期二" << endl;
break;
case 3:
// 如果 day 等于 3,输出星期三
cout << "星期三" << endl;
break;
case 4:
// 如果 day 等于 4,输出星期四
cout << "星期四" << endl;
break;
case 5:
// 如果 day 等于 5,输出星期五
cout << "星期五" << endl;
break;
case 6:
// 如果 day 等于 6,输出星期六
cout << "星期六" << endl;
break;
case 7:
// 如果 day 等于 7,输出星期日
cout << "星期日" << endl;
break;
default:
// 如果 day 不在 1 到 7 之间,输出输入无效
cout << "输入无效,请输入 1 到 7 之间的整数。" << endl;
break;
}
return 0;
}在这个程序里,switch语句会依据day的值来执行不同的case分支。要是day的值不在 1 到 7 之间,就会执行default分支。
例题 4:根据输入的字符输出对应的季节
#include <iostream>
using namespace std;
int main() {
char season;
// 提示用户输入一个字符
cout << "请输入一个字符 (s: 春季,x: 夏季,q: 秋季,d: 冬季): ";
cin >> season;
// 根据 season 的值进行判断
switch (season) {
case 's':
// 如果 season 等于's',输出春季
cout << "春季" << endl;
break;
case 'x':
// 如果 season 等于'x',输出夏季
cout << "夏季" << endl;
break;
case 'q':
// 如果 season 等于'q',输出秋季
cout << "秋季" << endl;
break;
case 'd':
// 如果 season 等于'd',输出冬季
cout << "冬季" << endl;
break;
default:
// 如果 season 不是's', 'x', 'q', 'd'中的任何一个,输出输入无效
cout << "输入无效,请输入 s, x, q, d 中的一个字符。" << endl;
break;
}
return 0;
}在这个程序中,switch语句会根据season的值来执行不同的case分支。要是season不是s、x、q、d中的任何一个,就会执行default分支。
通过这些例题,你应该对if-else语句和switch语句有了基本的了解。在实际编程时,要依据具体情况选择合适的分支结构。