内容正文:
4.1、4.2节:关系运算符及其表达式、逻辑运算符及其表达式
C语言程序设计
电子工业出版社
掌握C语言中关系运算符和逻辑运算符的含义与用法
理解关系表达式和逻辑表达式的求值规则
能够正确书写和计算关系表达式与逻辑表达式
能够运用运算符解决简单的条件判断问题
培养逻辑思维能力和问题分析能力
养成严谨的编程习惯和规范的代码风格
知识目标
能力目标
素养目标
01
01
01
学习目标
目录
Part 01
教学导入
Part 02
知识讲授
Part 03
师生互动
Part 04
课堂练习
Part 05
课堂小结
教学导入:趣味思考
思考时刻
如果你是一个机器人,如何判断一个学生的成绩是否及格?
逻辑引导
你需要一个标准(比如60分),然后将学生的成绩与这个标准进行比较,根据比较的结果做出不同的反应。这个过程就是选择。
教学导入:生活中的选择
方向抉择:在十字路口,选择向左走还是向右走?
日常穿搭:天气变冷了,选择穿毛衣还是厚外套?
休闲时光:周末到了,选择看电影放松还是去运动?
思考:这些选择都不是随意的,而是基于一定的条件做出的判断。
十字路口的方向选择
出行方式的选择
教学导入:引出课题
核心概念:选择结构
在程序设计中,我们同样需要根据条件做出选择,这就是选择结构。
实现工具:关系与逻辑运算
要实现选择结构,我们首先需要学习如何描述条件,这就需要用到关系运算符和逻辑运算符。
本节课学习目标
本节课,我们将一起深入学习这两种运算符及其表达式,掌握构建程序条件的基础。
知识讲授
关系和逻辑运算符及其表达式
关系运算符及其表达式
逻辑运算符及其表达式
第一部分
关系运算符及其表达式
知识讲授
知识讲授:关系运算符的概念
知识讲授:认识关系运算符
核心定义
关系运算本质上是对两个运算对象的大小关系进行比较的过程。
运算结果
比较结果是一个逻辑值,只有两种可能:“真”(True)或“假”(False)。
注:在编程实现中(如C语言),通常用 1 代表真,0 代表假。
知识讲授:C语言中的关系运算符
易错点提示:等于 vs 赋值
在C语言中,判断“等于”必须使用双等号==。单等号=是赋值运算符,初学者极易混淆!
C语言中的关系运算符
运算符 含义 举例 优先级
< 小于 1<5 6
<= 小于或等于 2<=2
> 大于 5>1
>= 大于或等于 5>=6
== 等于 5==4 7
!= 不等于 5!=5
知识讲授:关系运算符的优先级
优先级规则
第一梯队:`>`、`>=`、`<`、`<=` 优先级相同
第二梯队:`==`、`!=` 优先级相同
层级关系:第一梯队的优先级高于第二梯队
结合性规则
当多个关系运算符同时出现时,遵循自左向右的结合性进行运算。
算术运算符
知识讲授:关系运算符的优先级
a>a+b 等价于 a>(a+b)
a>b==c (a>b)==c
a==b<c a==(b<c)
a=b>c a=(b>c)
知识讲授:关系表达式
核心定义
由关系运算符将两个表达式(可以是算术表达式或关系表达式等)连接起来的式子。
一般形式
表达式 关系运算符 表达式
典型示例
a > 4// 变量与常量比较
a + b < c - d// 算术表达式结果比较
x == y// 变量间比较(注意双等号)
关键点:关系表达式的值只有“真”(1)和“假”(0)两种
知识讲授:关系表达式的值
核心概念:关系表达式的值是一个逻辑值,结果只有“真”和“假”两种。
C语言约定:用整数1代表“真”,用整数0代表“假”。
代码示例解析:
1. 表达式3 > 2成立,结果为1
2. 表达式5 > 4 == 2不成立,结果为0
小结:关系运算的本质是比较,结果非0即1,这是后续学习条件判断的基础。
知识讲授:关系表达式示例(代码)
程序文本【4.1】关系表达式示例
#include<Stdio.h>
main()
{
int a,b,c,d,e;
c=2;
d=4;
e=6;
a=c>d;
b=d<e;
printf("a=%d,b=%d",a,b);
}
程序运行结果:a=0, b=1
结果深度解析
条件 c > d 不成立
已知 c=2,d=4,2 不大于 4,关系表达式值为0,赋值给变量 a。
条件 d < e 成立
已知 d=4,e=6,4 小于 6,关系表达式值为1,赋值给变量 b。
知识讲授:关系表达式示例(运行结果)
背诵记忆
关系运算符种类
C语言包含6种关系运算符:大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(==)、不等于(!=)。
易错点警示
判断“等于”必须使用双等号==,而不是赋值符号=。这是初学者最容易混淆的地方。
表达式结果值
关系表达式的计算结果是逻辑值,用整数表示:成立为真(1),不成立为假(0)。
运算符优先级
优先级由高到低:大小比较( >, >=, <, <= ) 高于 相等比较( ==, != )。
互动环节:请大家利用1分钟时间,快速记忆以上4个核心知识点。随后我们将进行随堂小测。
课堂问答
思考问题:
在 C 语言中,表达式3 = 5是否正确?为什么?
请结合变量赋值与常量的概念进行分析,欢迎举手回答。
课堂问答
答案:不正确
表达式 `3 = 5` 在C语言中是非法的,会导致编译错误。
赋值运算符 `=`
作用是将右侧的值赋给左侧的变量。左侧必须是一个“左值”(可修改的内存空间)。
关系运算符 `==`
用于判断两个操作数的值是否相等,返回布尔值(真/假)。常用于条件判断语句中。
错误根源分析
`3 = 5` 试图给常量 3 赋值。常量是固定值,不能被修改,因此编译器会报错。
💡 核心知识点:赋值是改变变量状态的动作,判断相等是比较两个值的关系。千万不要混淆 `=` 和 `==`!
例题分析
题目描述
已知变量定义:
int a=5, b=3, c=4;
请计算表达式的值:
a > b + c
分析过程
Step 1. 计算算术运算:先计算 b + c,即 3 + 4 = 7。
Step 2. 计算关系运算:再计算 a > 7,即 5 > 7。
逻辑判断:因为 5 不大于 7,所以表达式结果为假。
最终答案
在 C/C++ 语言中,逻辑假用整数0表示。
课堂练习
练习题1:阅读以下程序,输出结果为( )
#include <stdio.h>
int main()
{
int m=2, n=7;
int y = m == n-5;
printf("%d", y);
return 0;
}
答案:1
解析:n-5=2,m 等于 2,关系成立,结果为 1。
课堂练习
练习题2:阅读以下程序,输出结果为( )
#include <stdio.h>
int main()
{
int a=10;
int b = a < a/2;
printf("%d", b);
return 0;
}
答案:0
解析:a/2=5,10<5 不成立,结果为 0。
课堂练习
练习题3:阅读以下程序,输出结果为( )
#include <stdio.h>
int main()
{
int a=7, b=2;
int k = a != b+4;
printf("%d", k);
return 0;
}
答案:1
解析:b+4=6,7 不等于 6,关系成立,结果为 1。
第二部分
知识讲授
逻辑运算符及其表达式
知识讲授:逻辑运算符的概念
知识讲授:逻辑运算的概念
核心定义:复杂条件的组合
逻辑运算是对逻辑值(真或假)进行的运算。在编程和数学中,我们常需要同时满足多个简单条件(例如“成绩及格且年满18岁”),这就需要用到逻辑运算来构建更复杂的判断逻辑。
运算结果:保持逻辑属性
与算术运算(如加减乘除得到数值)不同,逻辑运算的结果依然是一个逻辑值(真 True 或 假 False)。这意味着无论参与运算的条件有多少,最终的判断结果只能是“成立”或“不成立”。
核心记忆:逻辑运算处理“是非”,产出结果依然是“是非”。
知识讲授:逻辑运算符
逻辑非 (NOT)
符号:! 对一个逻辑值取反,真变假,假变真
逻辑与 (AND)
符号:&& 两个条件同时成立时,结果才为真
逻辑或 (OR)
符号:|| 两个条件中至少有一个成立,结果为真
核心记忆:! 取反,&& 全真才真,|| 一真即真
运算符 含义 优先级 结合方向
! 逻辑非 2 自右至左
&& 逻辑与 11 自左至右
|| 逻辑或 12 自左至右
知识讲授:逻辑运算符的优先级
优先级规则
•! (逻辑非):优先级最高,具有右结合性。
•&& (逻辑与):优先级次之,具有左结合性。
•|| (逻辑或):优先级最低,具有左结合性。
与其他运算符的优先级关系
提示:在编写复杂表达式时,若对优先级不确定,建议使用小括号 `()` 来明确运算顺序,这不仅能避免逻辑错误,还能提高代码的可读性。
!(非)
算数运算符
关系运算符
&&(与)和||(或)
赋值运算符
高
低
知识讲授:逻辑表达式
核心定义
由逻辑运算符连接起来的表达式,用于描述逻辑关系。
典型示例
逻辑非:!a(取变量a的反)
逻辑与:b && c(b和c同时为真才为真)
逻辑或:2 || d(2非0为真,或d为真)
💡 提示:非0的数值在逻辑运算中会被当作“真”处理。
知识讲授:逻辑运算的真值表
逻辑与运算 (AND)
规则:当且仅当两个操作数都为真时,结果才为真。
A B A AND B
True True True
True False False
False True False
False False False
逻辑或运算 (OR)
规则:只要有一个操作数为真,结果就为真。
A B A OR B
True True True
True False True
False True True
False False False
知识讲授:逻辑运算的真值表
操作数a 操作数b !a !b a&&b a||b
非0 非0 0 0 1 1
非0 0 0 1 0 1
0 非0 1 0 0 1
0 0 1 1 0 0
知识讲授:逻辑运算的注意事项(真假判断标准)
核心规则
在C语言中,逻辑运算的真假判断非常直接:
• 假 (False): 数值为 0
• 真 (True): 数值为 非0 (即任何不为0的数)
示例演示
• 示例1 (逻辑非): int a = 0;,则 !a 的结果为 真 (1)。
• 示例2 (逻辑与): int b = 5;,表达式 !a && b 的结果为 真 (1)。
• 示例3 (逻辑或): int c = 0;,表达式 b || c 的结果为 真 (1),因为b为真。
知识讲授:逻辑运算的注意事项(短路求值)
短路求值
在由 && 和 || 组成的逻辑表达式中,系统仅计算能够确定整个表达式值的最少数目子表达式。一旦结果确定,后续计算将停止。
代码示例解析
表达式:(c=a>b) && (d=b>a)
若 c=0(假),则右侧 d=b>a 不会被执行,d 值保持不变。
💡 核心价值:利用短路求值特性可以避免不必要的计算,提升程序运行效率。
知识讲授:逻辑表达式示例(代码)
程序文本【4.2】逻辑表达式示例
#include"stdio.h"
main()
{
int x,y,m,n;
x=3;
y=7;
m=9;
printf("%d
",x+y>m&&x==y);
printf("%d
",x||y+m&&y-m);
printf("%d
",!(x+y)||m-1&&y+m/2);
}
程序运行结果
输出:0<换行>1<换行>1<换行>
结果深度解析
1. 第一行 (0):3+7>9为真(1),3==7为假(0)。逻辑与运算(1 && 0),有假则假,结果为0。
2. 第二行 (1):变量3非0即为真。逻辑或运算(真 || 任意),有真则真,触发短路求值,结果为1。
3. 第三行 (1):!(3+7)为假(0);9-1和7+9/2均为真(1),逻辑与得1。最终逻辑或(0 || 1),结果为1。
知识讲授:逻辑表达式示例(运行结果)
背诵记忆
三种逻辑运算符
C语言包含三种逻辑运算符:!(非)、&&(与)、||(或)。
真值表运算规则
逻辑与(&&)全真才真,逻辑或(||)有真就真。
真假值判定标准
在C语言中,数值0代表假,非0数值均代表真。
短路求值现象
逻辑与和逻辑或运算中,若能提前确定结果,后续表达式不再计算。
记忆挑战:请大家利用接下来的一分钟时间,快速回顾并记忆以上四个核心知识点。随后我们将进行随堂小测。
课堂问答
思考问题
在C语言中,表达式(a=0)&&(a=1)的结果是什么?为什么会这样?
提示:请结合 C 语言中逻辑运算符的短路求值特性进行思考。
正确答案:0(假)
逻辑与运算中,一旦发现第一个假值,结果即为假,无需计算后续值。
课堂问答
解析与原理
逻辑与 (AND) 规则
全真才真,一假即假。只要有一个操作数为假,整个表达式结果即为假。
短路求值
当第一个操作数0(假)确定后,第二个操作数100不会被计算,直接返回结果。
💡 关键点:利用短路求值特性可以提高程序执行效率,避免不必要的计算开销。
例题分析
计算逻辑表达式
!(3 > 5) || (2 < 4) && (10 == 5)
最终结果
1 (真)
分步解析
第一步:处理逻辑非 (!)
3 > 5 为假 (0),取反后 !0 为真 (1)。
第二步:处理逻辑与 (&&)
2 < 4 为真 (1),10 == 5 为假 (0),1 && 0 为假 (0)。
第三步:处理逻辑或 (||)
第一步结果 (1) 或 第二步结果 (0),即 1 || 0 为真 (1)。
课堂练习
题目描述
请写出判断变量 x 是否不在 10 到 20 之间的逻辑表达式。
思考提示:逻辑非(NOT)、逻辑或(OR)、比较运算符的组合使用。注意边界值 10 和 20 是否包含在内。
课堂练习
正确答案 / Correct Answer
x < 10 || x > 20或者!(x >= 10 && x <= 20)
解析思路
方法一:正向描述
直接描述条件:x小于10,或者x大于20。这是最直观的逻辑表达。
方法二:逻辑取反
利用德摩根定律,对“x在10到20之间”这个条件整体取反,逻辑等价。
课堂练习
练习题1:已知 int x=3, y=0, z=4;,表达式 !x || y && z 的值为( )
A. 0
B. 1
C. 3
D. 4
答案:A
解析:优先级 ! > && > ||。!x=0,y&&z=0&&4=0,0||0=0。
课堂练习
练习题2:已知 int m=1, n=2, p=0;,表达式 m || n && !p 的值为( )
A. 0
B. 1
C. 2
D. 3
答案:B
解析:!p=1,n&&1=1,m=1,1||1=1,且左侧为真直接短路。
课堂练习
练习题3:已知 int a=5, b=3;,表达式 !(a-b) && a>b 的值为( )
A. 0
B. 1
C. 2
D. 5
答案:A
解析:a-b=2,!2=0,0&&任何数=0。
课堂小结
课堂小结
第一堂课:关系运算符及其表达式
● 核心知识点:掌握6种关系运算符(>、<、>=、<=、==、!=)的含义与用法。
● 表达式求值:结果为逻辑值(真/假),在C语言中用1代表真,0代表假。
● 易错点:务必区分赋值运算符(=)和关系运算符(==)。
第二堂课:逻辑运算符及其表达式
● 核心知识点:掌握3种逻辑运算符(!、&&、||)的含义与用法。
● 表达式求值:理解求值规则,特别是“短路求值”特性,提升效率。
● 真值判断:牢记C语言标准:0代表假,任何非0值都代表真。
学习目标回顾:
将关系运算与逻辑运算融会贯通,熟练掌握真假判断标准,为后续选择结构程序设计打下坚实基础。
课后任务
基础巩固(必做)
完成教材本章课后习题中关于关系表达式和逻辑表达式的题目,通过练习夯实理论基础,确保掌握核心概念。
编程实践(二选一)
题目1:偶数判断
编写程序,输入一个整数,判断它是否为偶数。(考察关系运算符)
题目2:闰年判断
输入年份,判断是否为闰年。需综合运用逻辑与(&&)和逻辑或(||)。
请大家认真复习今天所学的知识点。有余力的同学请务必尝试编程实践部分,通过实际编码加深对逻辑控制的理解。作业请在下次课前提交。
谢谢观看
THANKS
$