第 7 课:关系运算、逻辑运算与条件表达式
本课学习目标: 1. 熟练掌握 6 种关系运算符(
>,>=,<,<=,==,!=)。 2. 严格区分=(赋值)与==(判断相等)的本质区别。 3. 掌握 3 种逻辑运算符(&&并且、||或者、!取反)的真值表。 4. 学会把生活中的中文复合条件(如“能被 2 整除且除以 7 余 2”)精准翻译成 C++ 代码。 5. 理解在 C++ 条件中,0代表假,所有非0数字都代表真。
一、 关系运算与结果
关系运算用于比较两个值的大小或是否相等。在 C++ 中,关系表达式成立时结果为 1(代表真),不成立时结果为 0(代表假)。
1. 常见关系运算符速查
- 大于
>:如5 > 3结果为1。 - 小于
<:如5 < 3结果为0。 - 大于等于
>=:如5 >= 5结果为1。 - 小于等于
<=:如4 <= 5结果为1。 - 等于
==:⚠️ 注意是两个连续的等号!用于检查左右两边是否完全相同。 - 不等于
!=:用于检查左右两边是否不相同(如5 != 6成立,结果为1)。
2. ⚠️ 终极易错点:= 与 ==
=是赋值:把右边的值塞给左边(a = 10;)。==是判断相等:检查左右两边是否一样(a == 10)。- 考场大坑:如果把判断写成了赋值
if (n = 0),不仅语法不会报错,而且会让n变成0并且条件永远被判为假!
二、 逻辑运算(连接多个条件)
当我们需要同时满足多个条件时,就要用到逻辑运算符。
1. 逻辑与 &&(并且 / AND)
- 规则:两边都成立(为真),整体才成立;只要有一边是假,整体就是假(一假则假)。
- 真值表速记:
真 && 真➡️ 真 (1)真 && 假➡️ 假 (0)假 && 假➡️ 假 (0)
2. 逻辑或 ||(或者 / OR)
- 规则:只要有一边成立(为真),整体就成立;两边全都是假,整体才是假(一真则真)。
- 真值表速记:
真 || 假➡️ 真 (1)假 || 假➡️ 假 (0)
3. 逻辑非 !(取反 / NOT)
- 规则:把真的变成假,把假的变成真。
!(5 > 3):因为5 > 3本身是真,取反后结果为0。
💡 C++ 的“真假”判定铁律: 在 C++ 的条件判断中,数字
0代表假(false),而所有不是 0 的数字(如正数、负数)全部代表真(true)! * 表达式!0的结果是1。 * 表达式!5的结果是0(因为5是非 0 数字,代表真,取反后就是假)。
三、 实战:如何把中文条件翻译成 C++ 表达式?
在 GESP 一级考试中,经常需要把文字描述写成代码条件:
- 判断
n是偶数: - 中文:能被 2 整除。
- 代码:
n % 2 == 0(或者写成!(n % 2))。 - 判断
n在 1 到 100 之间(闭区间): - 中文:
n大于等于 1 且n小于等于 100。 - 代码:
n >= 1 && n <= 100(⚠️ 不能写成连等形式1 <= n <= 100,C++ 识别不了连等)。 - 判断
n能被 3 或 7 整除: - 中文:
n能被 3 整除,或者n能被 7 整除。 - 代码:
n % 3 == 0 || n % 7 == 0。 - 判断
i是偶数且除以 7 余 2: - 代码:
(i % 2 == 0) && (i % 7 == 2)。
四、 GESP 一级真题与例题精讲
练一练 1:混合逻辑与算术运算
【题目】 下面表达式的值是( )。
12 - 3 * 2 && 2
A. 0
B. 1
C. 6
D. 9
正确答案:B 名师解析: 1. 先算左边的算术部分:
12 - 3 * 2,根据先乘除后加减,3 * 2 = 6,12 - 6 = 6。 2. 算术部分算完后,整个表达式变成了:6 && 2。 3. 在逻辑与&&中,6是非 0 数字(代表真),2也是非 0 数字(代表真)。“真 && 真” 的结果为1。
练一练 2:逻辑非运算
【题目】 下面表达式的值是( )。
!0 + !5
A. 0
B. 1
C. 2
D. 5
正确答案:B 名师解析: 1. 先看
!0:数字0代表假,对它取反!0结果为1。 2. 再看!5:数字5是非 0 代表真,对它取反!5结果为0。 3. 两者相加:1 + 0 = 1。
练一练 3:判断两个变量都为 0 的正确写法
【题目】
下列哪个表达式能正确判断 a 等于 0 且 b 等于 0?( )
A. (a == b == 0)
B. !(a || b)
C. (a + b == 0)
D. (a == 0) + (b == 0)
正确答案:B 名师解析: * 最标准的写法是
a == 0 && b == 0。 * 选项 B 中!(a || b)运用了德·摩根定律:如果a和b都为 0,则a || b为假(0),取反!后变成真(1),逻辑完全正确! * 选项 A 错误,因为a == b == 0会从左到右计算,无法达到预期。选项 C 在a=1, b=-1时也会成立,属于误判。
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com