主要内容
1. 关系表达式
小结一下之前的大师码课程中,学习的 关系运算符 和 关系表达式。
5 > 6; // 大于
5 >= 6; // 大于等于
5 < 6; // 小于
5 <= 6; // 小于等于
5 == 6; // 等于
5 != 6; // 不等于
2. 逻辑表达式
小结一下之前的大师码课程中,学习的 逻辑运算符 和 逻辑表达式。
true && true; // 与
true || true; // 或
!true; // 非
关系运算 和 逻辑运算 是有着内在联系的。
它们可以共同出现。比如:
(5 > 0) && (5 > 2); // 与
(5 > 0) || (5 > 2); // 或
!(5 > 0); // 非
关于它们之间的关系,请区分清楚。
3. “关系运算符”和“逻辑运算符”的“运算优先级”
在介绍分解法之前,我们需要先简单了解一下“运算优先级”。
在数学中,我们学习过四则运算,还记得加减乘除的“运算优先级”吗?
+ - 运算优先级相等;
* / % 运算优先级相等; // C++ 的取余运算,是数学中还没有学习到的。特此补充说明
+ - 运算优先级小于(<) * / % //也就是,先计算 * / %
在“关系运算符”和“逻辑运算符”中,其实也有“运算优先级”。
它们的“运算优先级”,从高到底排列如下:
高 - !
中 - && || 运算优先级相等;
低 - < <= == != > >= 运算优先级相等;
4. 取反 逻辑表达式
上节课的学习中,我们学习了
逻辑运算“非”。
请看下面的表达式,并在数轴上画出 a 的范围。
-2 < a && a < 2

请看下面的表达式,并在数轴上画出 a 的范围。
!(-2 < a && a < 2)
4.1 图解法
答案:

小练习:
请将
!(-2 < a && a < 2) 对应的答案图,改写成“或”关系的表达式。
答案:
!(-2 < a && a < 2) <== 等价于 ==> (-2 >= a || a >= 2)
// 写成这个样子更容易理解一些
!(-2 < a && a < 2) <== 等价于 ==> (a <= -2 || 2 <= a)
理解这样的改写,对 C++ 的学习非常重要。针对这一的问题,主要有两种思路。
4.2. 分解法
在解题前,我们先来思考以下的几种情形。
请回答:
!(true && true ) <== 等价于 ==> ?
!(true && false) <== 等价于 ==> ?
!(false && true ) <== 等价于 ==> ?
!(false && false) <== 等价于 ==> ?
!(true || true ) <== 等价于 ==> ?
!(true || false) <== 等价于 ==> ?
!(false || true ) <== 等价于 ==> ?
!(false || false) <== 等价于 ==> ?
答案:
!(true && true ) <== 等价于 ==> (false || false)
!(true && false) <== 等价于 ==> (false || true )
!(false && true ) <== 等价于 ==> (true || false)
!(false && false) <== 等价于 ==> (true || true )
!(true || true ) <== 等价于 ==> (false && false)
!(true || false) <== 等价于 ==> (false && true )
!(false || true ) <== 等价于 ==> (true && false)
!(false || false) <== 等价于 ==> (true && true )
基于上面的分析,我们可以得到这样的规律:
- 1. && 和 || 互换;
- 2. true 和 false 互换;
那接下来我们来看一下,怎么解决上述的问题。
!(-2 < a && a < 2)
||
\/
!((-2 < a) && (a < 2)) // 根据计算的优先级,加括号。
||
\/
!((******) && (#####)) // 将第二层的括号内容,看成整体。
||
\/
!(-2 < a ) || !(a < 2) // 先分解最外层括号。
||
\/
-2 >= a || a >= 2 // 继续分解当下的最外层括号。
如果遇到多层的逻辑关系嵌套,也像这样,由外向内,逐层分解即可。
小练习:
!(a <=7 || 20 < a ) <== 等价于 ==>
!(15 < a && a < 59) <== 等价于 ==>
!(a>5) && a < 10 <== 等价于 ==>
!(true && false && true) <== 等价于 ==>
!(true || false || true) <== 等价于 ==>
答案:
!(a <=7 || 20 < a ) <== 等价于 ==> 7 < a && a <= 20
!(15 < a && a < 59) <== 等价于 ==> a <= 15 || 59 =< a
!(a>5) && a < 10 <== 等价于 ==> 5 <= a && a < 10
!(true && false && true) <== 等价于 ==> (false || true || false)
!(true || false || true) <== 等价于 ==> (false && true && false)
习题
课后练习