
NO.2-2《C语言程序设计》教案备注第二讲运算荐和表达式目1.掌握C语言各种运算符的优先级、结合性;的2.掌握各种表达式值的确定方法;要求3小时学时划分组织形式讲授+自学+独立作业量1.运算符的优先级及结合性点2.表达式值的确定难点[引题上一次课,我们重点讨论了C语言的基本组成成分,程序特点及C语言的基本数据类型和转换关系。通过学习,大家了解到,不同的数据类型在程序中表示的方法是不同的,在计算机内的存储形式也不同,允许进行的处理也不同。比如说,数值型数据中的整型数据在计算机中占2位内存,而字符型数据占1位内存;数值型数据可以进行+、一、*、/等运算,而字符型数据可以进行连接和求子串运算。同时,我们还了解到,为了实现同时对不同数据类型的数据进行处理,必须进行转换。今天我们就来研究,如何实现不同类型数据的运算,即教材中的第五节运算符和表达式。2.5算术运算符和表达式一、运算符和表达式概述(一)表达式1.含义(1)由一个或多个操作,通过运算符连接而成的式子(2)最终为一个结果,类型符合转换规则(3)复杂表达式,其操作执行的顺序由运算符优先级而定如:表达式xx*yx=3.141593.141599"This is a expression"salary2.种类算术表达式赋值表达式关系表达式逻辑表达式条件表达式逗号表达式
《C 语言程序设计》教案 NO.2-2 第二讲 运算符和表达式 备 注 目 的 要 求 1.掌握 C 语言各种运算符的优先级、结合性; 2.掌握各种表达式值的确定方法; 学时划分 3 小时 组织形式 讲授+自学+独立作业 重 点 难 点 1.运算符的优先级及结合性 2.表达式值的确定 [引题]上一次课,我们重点讨论了C语言的基本组成成分,程序特点 及C语言的基本数据类型和转换关系。通过学习,大家了解到,不同 的数据类型在程序中表示的方法是不同的,在计算机内的存储形式也 不同,允许进行的处理也不同。比如说,数值型数据中的整型数据在 计算机中占 2 位内存,而字符型数据占 1 位内存;数值型数据可以进 行+、-、*、/等运算,而字符型数据可以进行连接和求子串运算。同 时,我们还了解到,为了实现同时对不同数据类型的数据进行处理, 必须进行转换。今天我们就来研究,如何实现不同类型数据的运算, 即教材中的第五节运算符和表达式。 2.5 算术运算符和表达式 一、运算符和表达式概述 (一)表达式 1.含义 (1)由一个或多个操作,通过运算符连接而成的式子 (2)最终为一个结果,类型符合转换规则 (3)复杂表达式,其操作执行的顺序由运算符优先级而定 如:表达式 x x*y x=3.14159 3.14159 “This is a expression” salary 2.种类 算术表达式 赋值表达式 关系表达式 逻辑表达式 条件表达式 逗号表达式

NO.2-3第二讲运算符和表达式(二)操作符(运算符)算术运算符赋值运算符逻辑运算符关系运算符三项条件运算符逗号运算符位运算符求字节运算符@二、算术运算符和算术表达式说明书中的运(一)运算符算符全部列出见P24算术运算符一览表(P25-2.4)表 2. 3结合名称优先操作数个应用举例操作符级数 性说明自增R151i++,++i++i是整型变151R量自减i--,i----expr是算151单目减R-expr-术表达式*213L乘运算expr1* expr21213L除运算expr1/expr22%13L求余运算expr1%expr2212L加运算+expr1+ expr2减运筒122I.exnrl-exnr)1.2基本运算符(+,二,*, /,%)(1)整数相除,结果仍为整数指出下列取模运算是否合法?如:23/5=423/7=33.14159%614%3(2)取模运算符%,只适用于整数24%8如:14%3=2int k,24%8=0说明:float f,以下都是2.自增自减运算符(++,-)..错的:k%2;(1)i必须是整型变量10++f%2(i+j)++(2)++和--都有前置和后置i++或++i(i=i+1)i--或--i(i=i-1)(3)作为变量时,前置和后置结果一样:作为表达式中的操作数时结果不同k=3;k=4;j=5;j=5;前置:先加减1后计算j=4;i=3;后置:先计算后加减1m=15m=(++k)*j;m=20m=(--k)*j,n=20n=(i++)*j;n=15n=(i--)*j;
第二讲 运算符和表达式 NO.2-3 (二)操作符(运算符) 算术运算符 赋值运算符 关系运算符 逻辑运算符 三项条件运算符 逗号运算符 位运算符 求字节运算符 ☻二、算术运算符和算术表达式 (一)运算符 算术运算符一览表(P25-2.4) 1. 基本运算符(+,-,*,/,%) (1)整数相除,结果仍为整数 如:23/5=4 23/7=3 (2)取模运算符%,只适用于整数 如:14%3=2 24%8=0 2. 自增自减运算符(++,-) (1)i 必须是整型变量 (2)++和-都有前置和后置 i++或++i (i = i +1) i- -或- -i (i = i -1) (3)作为变量时,前置和后置结果一样;作为表达式中的操作数时 结果不同 前置:先加减 1 后计算 后置:先计算后加减 1 说明 书中的运 算符全部 列出见 P24 表 2.3 说明 i 是整型变 量 expr 是算 术表达式 说明: 以下都是 错的: 10++ (i+j)++ 名 称 操作符 优先 级 操作数个 数 结合 性 应 用 举 例 自增 ++ 15 1 R i++,++i 自减 - 15 1 R i-,i- 单目减 - 15 1 R -expr 乘运算 * 13 2 L expr1* expr2 除运算 / 13 2 L expr1/ expr2 求余运算 % 13 2 L expr1% expr2 加运算 + 12 2 L expr1+ expr2 减运算 - 12 2 L expr1- expr2 指出下列取模运算是否合法? 3.14159%6 14%3 24%8 int k; float f; . k%2; f%2 k=4; j=5; i=4; m=(-k)*j; m=15 n=(i-)*j; n=20 k=3; j=5; i=3; m=(++k)*j; m=20 n=(i++)*j; n=15

NO.2-4《C语言程序设计》教案(4)常用于数组下标改变和循环次数控制如x=10;i=5;a[i++]=x,(二)表达式1.含义由算术运算符和操作数组成的表达式2.注意事项(1)运算次序按操作符优先次序进行,若有括号,则必须配对出现(2)注意运算符的结合性如:计算表达式6*7%2+7%2*5原式=42%2+7%2*5=0+1*5=5若:表达式改为6*(7%2)+7%(2*5)其值为:6+7=13三、赋值运算符和赋值表达式(一)运算符赋值运算符一览表(P27-2.5)分 符号等价于名称优先级结合性例子类2R简赋值y=x单说明2R算关于位操加赋值+=y+=xy-y+x作复合赋2R术--减赋值y-=xy=y-x值运算符复*=2R乘赋值y*=xy-y*x后面讲AVn队生7--1.种类简单赋值运算符:=+=,一=, *=, /=,%=复合赋值运算符:2. 注意事项(1)左边一定是变量,右边是表达式(2)若左右两边数据类型不一致,则首先进行数据转换(二)表达式1.含义由赋值运算符将一个变量和一个表达式连接而成的式子
《C 语言程序设计》教案 NO.2-4 (4)常用于数组下标改变和循环次数控制 如:x=10; i=5; . a[i++]=x; (二)表达式 1.含义 由算术运算符和操作数组成的表达式 2.注意事项 (1)运算次序按操作符优先次序进行,若有括号,则必须配对出现 (2)注意运算符的结合性 如:计算表达式 6*7%2+7%2*5 原式=42%2+7%2*5=0+1*5=5 若:表达式改为 6*(7%2)+7%(2*5) 其值为:6+7=13 ☻三、赋值运算符和赋值表达式 (一)运算符 赋值运算符一览表(P27-2.5) 1.种类 简单赋值运算符: = 复合赋值运算符: +=,-=,*=,/=,%= 2.注意事项 (1)左边一定是变量,右边是表达式 (2)若左右两边数据类型不一致,则首先进行数据转换 (二)表达式 1.含义 由赋值运算符将一个变量和一个表达式连接而成的式子 说明 关于位操 作复合赋 值运算符 后面讲 分 名 称 符 号 例 子 等价于 类 优先级 结合性 简 赋值 = 2 R y=x 单 加赋值 += 2 R y+=x y=y+x 减赋值 -= 2 R y-=x y=y-x 乘赋值 *= 2 R y*=x y=y*x 除赋值 /= 2 R y/=x y=y/x 算 术 复 合

NO.2-5第二讲运算符和表达式2. 一般形式vopexpr3.说明(1)注意结合的规则:自右向左如:X=(y=8)(2)赋值号右边表达式还可以是赋值表达式结果为:y=8X=80如:X=10*(y=8)x=(y=10) /(z=5)结果为:z=5y=10x=2x+=y+=z*z(初值为:10,2030))结果为:z=30y=920x=930四、关系运算符和关系表达式(一)运算符关系运算符一览表(P28-2.6)运算符优先级结合性名称使用10L小于10L大于expr1>expr2L10=expr29L等于二expr1=-expr29LI=不等于expr1!=expr21.用于对两个操作量进行大小比较,结果为“真”或“假”值=1通常:结果为“真”值=0结果为“假”2.操作量(expr)为表达式可以是算术、关系、逻辑和赋值表达式如:x>yx+5>y-3(x=10)>(y=5)xy)>(y(y+z)如:x>y+z相当于:(xz)x==y>z相当于:x=(y>=z)x=y>=z
第二讲 运算符和表达式 NO.2-5 2.一般形式 v op expr 3.说明 (1)注意结合的规则:自右向左 如: x=(y=8) (2)赋值号右边表达式还可以是赋值表达式 如: x=10*(y=8) 结果为:y=8 x=80 x=(y=10)/(z=5) 结果为:z=5 y=10 x=2 x+=y+=z*z(初值为:10,20,30) 结果为:z=30 y=920 x=930 四、关系运算符和关系表达式 (一)运算符 关系运算符一览表(P28-2.6) 1.用于对两个操作量进行大小比较,结果为“真”或“假” 通常:结果为“真” 值=1 结果为 “假” 值=0 2.操作量(expr)为表达式 可以是算术、关系、逻辑和赋值表达式 如:x>y x+5>y-3 (x=10)>(y=5) ‘x’y)>(yy+z 相当于: x>(y+z) xz 相当于: x==(y>z) x=y>=z 相当于: x=(y>=z) 名 称 运算符 优先级 结合性 使用 小于 10 L expr1>expr2 小于或等于 = 10 L expr1>=expr2 等于 == 9 L expr1==expr2 不等于 != 9 L expr1!=expr2

NO.2-6《C语言程序设计》教案(二)表达式1.含义用关系运算符把操作对象连接而成的式子2.说明操作对象:各种表达式关系表达式值:1或0如:若x=10,y=5则:相当于:x==(y+5)结果为:1X==y+5相当于:(x=3)<(5+y)结果为:1(x=3)<5+y结果为:x=1X=y<y+5相当于:X=(y<(y+5))五、逻辑运算符和逻辑表达式(一)运算符逻辑运算符一览表(P29-2.7)名称运算符优先级结合性使用!15R逻辑反lexpr5逻辑与&&Lexpr1&&expr2L逻辑或4expr1|lexpr21.逻辑运算符是对逻辑量进行操作的运算符逻辑量:“真”和“假”2.操作对象与结果操作对象:逻辑量或表达式(关系表达式或逻辑表达式)操作结果:逻辑量(0或1)(二)表达式1.含义用逻辑运算符把操作对象连接而成的式子2.注意事项(1)结合性和优先级结合性:逻辑反一一自右向左逻辑与和逻辑或一一自左向右优先级:逻辑反最高,高于基本算术运算符:逻辑与较低,逻辑或最低;逻辑或和逻辑与均低于关系和算术运算符:
《C 语言程序设计》教案 NO.2-6 (二)表达式 1.含义 用关系运算符把操作对象连接而成的式子 2.说明 操作对象: 各种表达式 关系表达式值: 1 或 0 如: 若 x=10,y=5,则: x==y+5 相当于: x==(y+5) 结果为:1 (x=3)<5+y 相当于: (x=3)<(5+y) 结果为:1 x=y<y+5 相当于: x=(y<(y+5)) 结果为:x=1 五、逻辑运算符和逻辑表达式 (一)运算符 逻辑运算符一览表(P29-2.7) 1.逻辑运算符是对逻辑量进行操作的运算符 逻辑量: “真”和“假” 2.操作对象与结果 操作对象: 逻辑量或表达式(关系表达式或逻辑表达式) 操作结果: 逻辑量(0 或 1) (二)表达式 1.含义 用逻辑运算符把操作对象连接而成的式子 2.注意事项 (1)结合性和优先级 结合性:逻辑反——自右向左 逻辑与和逻辑或——自左向右 优先级:逻辑反最高,高于基本算术运算符; 逻辑与较低,逻辑或最低; 逻辑或和逻辑与均低于关系和算术运算符; 名 称 运 算 符 优 先 级 结 合 性 使 用 逻辑反 ! 15 R !expr 逻辑与 && 5 L expr1&&expr2 逻辑或 || 4 L expr1||expr2

NO.2-7第二讲运算符和表达式相当于:(x>y)&&(ay&&a=c+5相当于:(x!=y)&&(a>=c+5)!x&&a==c相当于:(!x)&&(a==c)(2)逻辑表达式判“真”依据非零为“真”,为零则“假”如:若x=5,y=1.5,z=‘a”则!x,!y,!z的值均为0若x=5,y=3则x&&y的值均为1六、三项条件运算符(一)语法形式expr1?expr2:expr3(二)处理过程若exprl为“真”,对expr2计算,否则对expr3计算如:x>5?y+3:y-4(三)说明1.三项条件表达式准许使用嵌套说明如:x>0?1:x0?x:-x;算符ch=(c>=‘a'&&c<=‘z')?c-‘a'+‘A":c七、其它运算符(一)逗号运算符和逗号表达式1.返号表达式用逗号把几个运算表达式连接而成的表达式如x=5,y=x+5,z-=y,x+62.说明(1)逗号表达式的值结果为:最后表达式的值如:X=5,x+10,X*10+3结果为:53(2)可以给变量赋值如:x=(a=4,2*6);X=12
第二讲 运算符和表达式 NO.2-7 如:x>y&&ay)&&(a=c+5 相当于: (x!=y)&&(a>=c+5) !x&&a==c 相当于: (!x)&&(a==c) (2)逻辑表达式判“真”依据 非零为“真”,为零则“假” 如: 若 x=5,y=1.5,z= ‘a’ 则!x,!y,!z 的值均为 0 若 x=5,y=3 则 x&&y 的值均为 1 六、三项条件运算符 (一)语法形式 expr1?expr2: expr3 (二)处理过程 若 expr1 为“真”,对 expr2 计算,否则对 expr3 计算 如:x>5?y+3: y-4 (三)说明 1.三项条件表达式准许使用嵌套 如: x>0?1:x0?x:-x; ch=(c>=‘a’&&c<=‘z’)?c-‘a’+‘A’:c 七、其它运算符 (一)逗号运算符和逗号表达式 1.逗号表达式 用逗号把几个运算表达式连接而成的表达式 如: x=5,y=x+5,z-=y,x+6 2.说明 (1)逗号表达式的值 结果为:最后表达式的值 如:x=5,x+10,x*10+3 结果为:53 (2)可以给变量赋值 如:x=(a=4,2*6); x=12 说明 三项条件 运算符是 唯一具有 三个操作 对象的运 算符

NO.2-8《C语言程序设计》教案(二)求字节运算符1.含义用以求操作对象(类型标示符或表达式)占用字节数的运算符2. 形式类型标示符:sizeof(type-specifier)表达式:sizeof expr3. 结果操作对象占用字节数如:sizeof(float)结果为:4int a[10];sizeof (a)结果为:20sizeof(a)/sizeof(int)结果为:10(三)强制类型运算符格式:(type-specifier)如:(int)3.14159(int)3.78967八、位运算符位运算符一览表(P32-2.9)运算符名称操作数个数优先级结合性使用格式5R115按位反~~expr211L>右移位expr1>>expr22&8L按位与exprl&&expr227L按位异或expr1^expr226L按位或expr1|expr2操作对象:无符号整数(一)按位取反运算符(~)将操作对象中的所有二进制位全部改变状态如:unsignedcharx=0137;/*二进制为01011111*x=x;/*二进制结果为10100000*/(二)左移位运算符(<<)
《C 语言程序设计》教案 NO.2-8 (二)求字节运算符 1.含义 用以求操作对象(类型标示符或表达式)占用字节数的运算符 2.形式 类型标示符:sizeof(type_specifier) 表达式: sizeof expr 3.结果 操作对象占用字节数 如: sizeof(float) 结果为:4 int a[10]; sizeof(a) 结果为:20 sizeof(a)/sizeof(int) 结果为:10 (三)强制类型运算符 格式: (type_specifier) 如: (int)3.14159 (int)3.78967 八、位运算符 位运算符一览表(P32-2.9) 操作对象:无符号整数 (一)按位取反运算符(~) 将操作对象中的所有二进制位全部改变状态 如: unsigned char x=0137; /*二进制为 01011111*/ x=~x; /*二进制结果为 10100000*/ (二)左移位运算符(> 右移位 2 11 L expr1>>expr2 & 按位与 2 8 L expr1&&expr2 ^ 按位异或 2 7 L expr1^expr2 | 按位或 2 6 L expr1|expr2

NO.2-9第二讲运算符和表达式1. 一般格式expr1<<expr22. 结果右边补0,移出位舍弃如:0377<<4结果为:0360(11111111→11110000)3. 作用实现无符号整数乘2的n次方(三)右移位运算符(自学)(四)按位与、按位或和按位异或1. 按位与(1)一般格式exprl&expr215的二进制为:00001111(2)操作26的二进制为:00011010相应二进制位都为1,该位为1,否则为0按位与后为:00001010如:15&26(3)作用x的二进制为01001011000011110100000001000000000000①获取指定位的值按位与后为0001000000000000②测定指定位是否为02.按位或x的二进制为:0100101100001111(1)一般格式03770000000011111111按位与后为0000000000001111expr1[expr2(2)操作X的二进制为:0100101100001111相应二进制位都为0,该位为0,否则为-040000000000000100(3)作用按位或后为0000000000001000给指定位设置为173为3.按位异或000000000100100181 为0000000001010001(1)一般格式按位异或0000000000011000expr1 expr2(2)操作x为0101000101110010相应二进制位相同时,该位为00177777按位异或(3)作用1010111010001101使一个数的各二进制位反转
第二讲 运算符和表达式 NO.2-9 1.一般格式 expr1<<expr2 2.结果 右边补 0,移出位舍弃 如:0377<<4 结果为:0360(11111111→11110000) 3.作用 实现无符号整数乘 2 的 n 次方 (三)右移位运算符(自学) (四)按位与、按位或和按位异或 1.按位与 (1)一般格式 expr1&expr2 (2)操作 相应二进制位都为 1,该位为 1,否则为 0 如:15&26 (3)作用 ①获取指定位的值 ②测定指定位是否为 0 2.按位或 (1)一般格式 expr1|expr2 (2)操作 相应二进制位都为 0,该位为 0,否则为 1 (3)作用 给指定位设置为 1 3.按位异或 (1)一般格式 expr1^expr2 (2)操作 相应二进制位相同时,该位为 0 (3)作用 使一个数的各二进制位反转 15 的二进制为:00001111 26 的二进制为:00011010 按位与后为: 00001010 x 的二进制为 0100101100001111 010000 0001000000000000 按位与后为 0001000000000000 x 的二进制为: 0100101100001111 0377 0000000011111111 按位与后为 0000000000001111 X 的二进制为: 0100101100001111 04 0000000000000100 按位或后为 0000000000001000 73 为 0000000001001001 81 为 0000000001010001 按位异或 0000000000011000 x 为 0101000101110010 0177777 11111111111111111 按位异或 1010111010001101

NO.2-10《C语言程序设计》教案自学部分:P37应用举例小结1.算术运算符与算术表达式(@重点:/,%,++,-,)2.赋值运算符与赋值表达式(@重点: +=, -=, *=, /=)3.关系运算符与关系表达式4.逻辑运算符与逻辑表达式(重点:逻辑真值是一切非0值)5.三项条件运算符及表达式(@重点:使用方法)6.逗号运算符与表达式(重点:逗号表达式的值的确定方法)7.求字节和强制转换表达式8.位运算符及表达式独立作业题1.什么是表达式?C语言环境有哪些表达式类型?2.算术运算符有哪些?优先性和结合性如何?对于自增(i++)或自减(i--)运算符,在参与表达式运算时,前置和后置有何区别?除运算与我们常规意义的数学计算有何区别?3.赋值运算符有哪些?优先性和结合性如何?4.关系运算符有哪些?优先性和结合性如何?5.逻辑运算符有哪些?优先性和结合性如何?C语言环境对逻辑真是如何规定的?6.什么是三项条件运算符和三项条件表达式?如何确定三项条件表达式的值?7:什么是号运算符和逗号表达式?如何确定逗号表达式的值?8.什么是求学节运算符和求学节表达式?作用是什么?9.C语言环境下,位运算符有哪些?各自的主要用途是什么?10.教材P39——3.5.6.7.8.9.10.11.12.13.14.15
《C 语言程序设计》教案 NO.2-10 自学部分:P37 应用举例 小 结 1. 算术运算符与算术表达式 (☻重点:/,%,++,-,) 2. 赋值运算符与赋值表达式 (☻重点:+=,-=,*=,/=) 3. 关系运算符与关系表达式 4. 逻辑运算符与逻辑表达式 (☻重点:逻辑真值是一切非 0 值) 5. 三项条件运算符及表达式 (☻重点:使用方法) 6. 逗号运算符与表达式 (☻重点:逗号表达式的值的确定方法) 7. 求字节和强制转换表达式 8. 位运算符及表达式 独立作业题 1. 什么是表达式?C 语言环境有哪些表达式类型? 2. 算术运算符有哪些?优先性和结合性如何?对于自增(i++)或自减 (i-)运算符,在参与表达式运算时,前置和后置有何区别?除运算 与我们常规意义的数学计算有何区别? 3. 赋值运算符有哪些? 优先性和结合性如何? 4. 关系运算符有哪些? 优先性和结合性如何? 5. 逻辑运算符有哪些? 优先性和结合性如何?C 语言环境对逻辑真是 如何规定的? 6. 什么是三项条件运算符和三项条件表达式?如何确定三项条件表 达式的值? 7. 什么是逗号运算符和逗号表达式?如何确定逗号表达式的值? 8. 什么是求字节运算符和求字节表达式?作用是什么? 9. C 语言环境下,位运算符有哪些?各自的主要用途是什么? 10.教材 P39——3.5.6.7.8.9.10.11.12.13.14.15