选择结构进阶
在之前的文章中,我们学习了if
判断的用法,这一节我们来看一些细节。
- if嵌套:构建多条件决策树,实现复杂逻辑控制。
- 逻辑短路:逻辑运算中提前终止计算,提高效率。
- 问号表达式:简化if-else结构,使代码更简洁。
- else if:在单一if语句中检查多个条件,增强程序逻辑判断。
# if嵌套
if嵌套允许在一个条件判断内部包含另一个条件判断,形成多层次的决策树。
int score;
cin >> score;
if (score >= 90) {
cout << "A";
} else if (score >= 80) {
cout << "B";
} else if (score >= 70) {
cout << "C";
} else {
cout << "D";
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 逻辑短路
逻辑短路是逻辑运算符(&&
, ||
)的特性,当结果已经可以确定时,不再计算后续表达式。
int a = 7;
int b = 10;
// 尝试在满足条件时给b赋值
a == 5 && b = 6; // 这里的赋值操作不会被执行
// 输出a和b的值
std::cout << "a: " << a << ", b: " << b << std::endl;
return 0;
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
&&
运算符需要两个条件都成立,才算True。在代码中a不是5,第一个条件不成立,第二个赋值就不会执行。
对于||
运算符,两个条件需要成立一个,如果第一个条件成立,第二个语句就不会执行。
提示
应用:边界保护 i > 0 && a[i] > 3
上述条件是一个简单的例子,只有角标i大于0,才会访问数组a的第i项,若不加保护,万一i是负值,极有可能造成程序报错。
# 问号表达式
问号表达式提供了一种简洁的方式来替代简单的if-else语句。
int a, b;
a > b ? cout << "Max is " << a : cout << "Max is " << b;
1
2
2
# else if
else if 允许在单个if语句中检查多个条件。
int temperature;
cin >> temperature;
if (temperature > 100) {
cout << "Boiling";
} else if (temperature > 0) {
cout << "Liquid";
} else {
cout << "Solid";
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
通过这些结构,C++程序能够根据不同的输入和状态做出决策,执行相应的代码块。
# 省略花括号
当花括号内只有一条语句时,可以省略花括号。这一条对for
,while
循环也同样适用。
if (a > 0) {
cout << "positive." << endl;
} else {
cout << "not positive." << endl;
}
// 等价于下面的写法
if (a > 0) cout << "positive." << endl;
else cout << "not positive." << endl;
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
但要注意,如果不加花括号,那么只有圆括号后第一条语句,会在if条件内。
int a = 0;
if (a > 0) cout << "hello" << endl; // 只有这条打印hello的语句被条件控制
cout << "hi" << endl; // 不管a怎样,这条hi一定会打印出来
1
2
3
2
3
大家可自行尝试一下。初学建议不要省略花括号。
上次更新: 2024/03/17, 23:38:58