选择结构初步
在C++编程中,条件判断是控制程序执行流程的关键技术之一。通过if语句,我们可以基于变量的值或一些条件来决定执行哪些代码。
本文包含以下关键内容:
- C++条件判断:使用if语句和比较运算符来控制程序流程。
- 语句块与缩进:代码块由大括号{}定义,适当缩进以提高代码可读性。
- if-else结构:提供条件选择执行路径,if条件满足执行if块,否则执行else块。
- 比较运算符:包括等于(==)、不等于(!=)、大小关系(>, <, >=, <=)。
- 逻辑运算符:逻辑与(&&)、或(||)、非(!),注意优先级顺序。
- 变量范围判断:使用逻辑运算符判断变量是否在特定范围内。
- 逻辑非简化:使用!简化条件表达式,如!visited等价于visited == false。
# 条件判断与语句块
if语句用于执行基于特定条件的代码。当条件为真时,if语句内的代码块将被执行。代码块是由一对大括号{}包围的一系列语句,它们作为一个整体被条件判断所控制。
#include <iostream>
using namespace std;
int main() {
int a = 90;
if (a > 59) { // 开始条件判断
cout << "The grade is above average." << endl; // 语句块内的第一条语句
cout << "This message is also part of the if block." << endl; // 语句块内的第二条语句
} // 结束条件判断
cout << "This message is outside the if block and will always be executed." << endl; // 独立语句,不受if影响
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
在上面的代码示例中,if语句检查变量a是否大于59。如果是,那么if语句块内的两条cout语句都会被执行。无论条件判断的结果如何,if语句块之外的cout语句总会执行,因为它位于独立的语句块之外。
缩进
在编程实践中,正确的缩进对于保持代码的整洁和逻辑清晰至关重要。语句块内的语句应该适当缩进,以区分它们与独立语句的区别。
# if-else结构
if-else结构提供了一种选择机制,使得程序可以根据条件分别执行两个互斥的代码块。
#include <iostream>
using namespace std;
int main() {
int a = 90;
if (a > 59) {
cout << "The grade is above average." << endl;
} else {
cout << "The grade is below average." << endl;
}
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
在这个例子中,如果a大于59,程序输出"above average";否则,输出"below average"。else关键字表示当if条件不满足时执行的代码块。
# 比较运算符
在C++中,比较运算符用于比较两个值,并根据比较结果返回真或假(一个bool类型值,true或false,bool和int都是变量的类型,后面会详细讲)。这些运算符在条件判断、循环控制以及逻辑表达式中非常常用。以下是C++中的基本比较运算符:
在上一段代码中我们使用到了大于(>),来做比较判断。这里我们列一下常用的比较运算符:
- 等于(Equal to)
==
检查两个表达式的值是否相等。
例如:if (a == b) 检查变量a的值是否等于变量b的值。
'==' 与 '=' 的区别
'=='用于判断相等,'='用于赋值
不等于(Not Equal to)
!=
检查两个表达式的值是否不相等。 例如:if (a != b) 检查变量a的值是否不等于变量b的值。大于(Greater than)
>
小于(Less than)
<
大于等于(Greater than or equal to)
>=
小于等于(Less than or equal to)
<=
# 逻辑运算符
在现实生活中,我们经常需要基于一系列的条件来做决策。在C++中,用逻辑运算符,就可以帮我们实现如下逻辑:
我既想吃鸡腿,又想吃馒头。这体现了并且
,与
,同时
的逻辑。
要么吃肯德基,要么吃麦当劳。这体现了或
,任选一个
的逻辑。
# 变量的逻辑与&&
:考试成绩
假设你是一名学生,你的数学考试成绩(mathScore)和物理考试成绩(physicsScore)决定了你是否能参加学校的科学俱乐部。只有当你的数学分数在90分以上(mathScore > 90)并且物理分数在80分以上(physicsScore > 80)时,你才有资格加入。
#include <iostream>
using namespace std;
int main() {
int mathScore = 95; // 你的数学成绩
int physicsScore = 85; // 你的物理成绩
if (mathScore > 90 && physicsScore > 80) {
cout << "You are eligible for the Science Club!" << endl;
} else {
cout << "You need to improve your scores to join the Science Club." << endl;
}
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
在上面这个例子中,我们使用了整数变量来表示成绩,并通过比较运算符来模拟逻辑与&&
的条件。
# 如何判断一个变量的范围
#include <iostream>
using namespace std;
int main() {
int age = 10;
if (age >= 18 && age <= 60) {
cout << "Traveling by car."; // 判断age在18和60之间
}
return 0;
}
2
3
4
5
6
7
8
9
10
注意
在C++中,范围条件一定不能写成18 <= age <= 60
这种形式,这样写值将恒为true。C++会先计算18 <= age
,不管age是多少,这个表达式的值只可能是true(1)或false(0),他们都小于等于60。
true在变量中实际存储的是1,false存储的是0,关于更多变量类型,存储的原理及细节,会在后文展开。
# 逻辑或||
:电影院选择
假设你想去电影院看电影,你决定如果《星际穿越》(interstellarRating)的评分高于8分或者《盗梦空间》(inceptionRating)的评分高于9分,你就会选择去电影院。
#include <iostream>
using namespace std;
int main() {
int interstellarRating = 8; // 《星际穿越》的评分
int inceptionRating = 9; // 《盗梦空间》的评分
if ((interstellarRating > 8) || (inceptionRating > 9)) {
cout << "I'm going to the cinema!" << endl;
} else {
cout << "Maybe next time, I'll stay home." << endl;
}
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
在这个例子中,我们使用了逻辑或||
来决定是否去电影院。
# 逻辑运算符的优先级
&&
> ||
假设我们要去户外烧烤轰趴,需要满足以下两个条件才会出发:
- 带了鸡腿或带了鸭腿
- 带了烤炉
这个条件怎么表示呢?带了鸡腿 || 带了鸭腿 && 带了烤炉
这是错误的!因为&&
的优先级更高,会先计算带了鸭腿 && 带了烤炉
,和语义不符。
# 逻辑非
逻辑非运算符!
用于对逻辑取反,举两个例子:
#include <bits/stdc++.h>
using namespace std;
int main() {
int age = 65;
if (!(age >= 60)) { // 该条件等价于 age < 60
cout << "Age is smaller than 60.";
}
return 0;
}
2
3
4
5
6
7
8
9
10
下面这个例子比较常用
int main() {
bool visited = true;
if (!visited) { // 等价于 visited == false,但是没有人会写 visited == false
cout << "visited."
} else {
cout << "not visited."
}
return 0;
}
2
3
4
5
6
7
8
9
注意
- 条件
a == true
,我们会简写成a
。 - 条件
a == false
,我们会简写成!a
。
# 小结
这一节,我们看到了用条件判断控制程序执行流程的方法,我们可以通过条件,让程序自动选择执行的语句块了。