c语言程序设计与项目实践第3章ppt课件_第1页
c语言程序设计与项目实践第3章ppt课件_第2页
c语言程序设计与项目实践第3章ppt课件_第3页
c语言程序设计与项目实践第3章ppt课件_第4页
c语言程序设计与项目实践第3章ppt课件_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章 运算符和表达式 本章的学习重点运算符与表达式的分类算术运算符与算术表达式逻辑运算符与逻辑表达式关系运算符与关系表达式位运算符条件运算符强迫类型转换 .3.1 运算符与表达式的分类 运算符的分类:可按照操作对象数目分类,例如一元运算符、二元运算符和三元运算符等,也可按照功能分类,例如算术运算符、逻辑运算符、关系运算符等。表达式的分类:主要按照运算符的不同功能进展分类,例如算术表达式、逻辑表达式、关系表达式等。 .3.1.1 运算符的分类 按照操作对象的多少,运算符主要可分为一元运算符、二元运算符和三元运算符。例如负号-为一元运算符,加号+为二元运算符等。除了这些根本运算符之外,C言语还支

2、持复合运算符以及sizeof运算符等。按照功能分类,运算符可分为:算术运算符、赋值运算符、逻辑运算符、关系运算符、条件运算符、位运算符、取字节数运算符等。 .3.1.1 运算符的分类 表3-1 运算符分类 一元运算符二元运算符三元运算符符号功能描述符号功能描述符号功能描述+ -正负号-减号?:条件运算符+自增运算符+加号-自减运算符*乘号!非运算符/除号取反运算符%求余运算符*指针运算符右移运算符&与运算符|或运算符异或运算符大于号=大于等于 b, c .括号(函数等),数组,两种结构成员访问由左向右! + - + -非,按位取反,自增,自减,正负号由右向左* &(类型)sizeof解引用(指

3、针),取地址,类型转换,字节大小* / %乘,除,模除由左向右+ -加,减由左向右左移,右移由左向右 = 小于,小于等于,大于等于,大于由左向右= !=等于,不等于由左向右&按位与由左向右按位异或由左向右|按位或由左向右&逻辑与由左向右|逻辑或由左向右? :条件由右向左= += -= *= /=赋值由右向左&= = |= =最低,逗号(顺序)由左向右.3.2 运算符的优先级与结合性 范例3.1 PriorityAndCombine.c 这里运用多运算符的表达式演示不同优先级的运算符组合运算所产生的结果。程序定义变量a,b,c,并运用复合赋值运算符+=验证复合赋值运算符的功能。 分析:查看代码:

4、由于赋值是自右至左的右结合性,因此先计算赋值号右边的表达式a+c*10,结果为210,然后将结果赋给b。 .3.3 赋值运算符与赋值表达式 C言语规定,任何变量都要先定义后运用,并且在援用其数值前一定要进展赋值操作,而此时就需求用到赋值运算符“= 。1简单赋值表达式赋值表达式运用赋值号表示,赋值号左边的对象叫做左值l-value,赋值号左边只能是变量。 a+=5 等价于 a=a+5假设a = 20, 执行后a+=5后,a的值变为25 .3.3 赋值运算符与赋值表达式 范例3.2 LvalueAndRvalue.c 将int型变量的值赋给short型变量,查看赋值后的结果。为表述方便,程序运用十

5、六进制值0 x12345,接纳变量为short型。 2延续赋值表达式 有时需求对几个变量赋予同一个值,这时可以运用延续赋值表达式,例如:int i, j, k;i = j = k = 10;由于赋值运算符是右结合性,因此程序执行顺序为:k = 10j = k i = j.3.3 赋值运算符与赋值表达式 3复合赋值表达式 复合赋值表达式由赋值运算符、算术运算符或逻辑运算符以及操作对象构成。例如,表达式a += 10,它等价于:a = a + 10。 范例3.3 DAssignmentOperator.c 运用复合赋值运算符进展算术和赋值操作。程序运用*=和+=分别对变量m和n作赋值运算,验证在同

6、一表达式中两者之间的关系。留意:在工程运用中,应尽量防止运用这些简化的复合赋值运算符,缘由有两点:一是编码时容易出错,二是不便于其他程序员阅读。 .3.4 算术运算符与算术表达式 C言语除了提供简单的加减乘除四那么运算符外,还提供了模除%、自增+和自减-等几种特殊的算术运算符。模除运算符%用于求两个整数相除的余数。 自增+自减-运算符是C言语所特有的运算符,在工程中运用非常频繁。 只能用于单个变量。 .3.4.1 算术运算符与数据类型 C言语中,除运算符用/替代,乘运算符用*替代,并且*不能省略如x*y不能省略为xy。范例3.4 ComputeOperatorType.c 程序运用输出函数pr

7、intf验证两种不同数据类型进展算术除操作的结果,分析浮点型数据作算术运算的精度。 C言语中,两个整型量作算术运算,其结果仍为整型,例如,算式:1/2的值取商中的整数部分0。 留意:0不能作为除数,否那么程序运转时将解体。 .3.4.1 算术运算符与数据类型 实训3.1计算圆柱体体积 有一长为50cm,宽为30cm的长方形纸张,编写程序,计算将该纸张卷成圆筒时的体积,要求准确到小数点后6位,圆周率取3.141592。纸张卷成圆筒的方法有两种,一种是以长50cm作高,宽30cm作底,另一种是以宽30cm作高,长50cm作底。这里运用第二种方案。 运用周长50cm计算半径r,实现语句:r = 50

8、.0/(2*pi);根据数学公式:V=S*H,计算体积V = pi*r*r*h,其中h=30。采用数据类型double型以满足精度要求。 .3.4.2 模除运算符 模除运算符%:用于求两个整数相除的余数。模除运算只能用于整数间求余运算,不可用于浮点数。并且0不能作为除数。例如:7%3结果为1,而7.5%5将使程序编译出错。C言语规定,%两边都为正整数,结果为正整数或零;%两边都是负整数,结果为负整数数或零。%左边的操作数是正整数,结果为正整数或零;%左边的操作数是负整数,结果为负整数或零,例如:17%4 = 117%-4 = 1-17%4 = -1-17%-4 = -1 .3.4.2 模除运算

9、符 范例3.4 Months2Year.c 键盘输入总月数,运用%运算符和/运算符将输入的月数换算成年数和月数的方式,如25个月,表示2年零1个月。模除运算,例如m%n,可以运用公式m (m / n) * n替代,例如算式中-17%4,可以运用算式:-17%4 = -17 (-17 / 4) * 4 = -1 留意:和的区别,.3.4.3 自增自减运算符 自增+自减-运算符:只能用于变量,不能用于表达式或其他C言语对象。下面的操作均错误:(b+c)+;-(m-1); 范例3.5 SelfAddSelfReduce.c 程序定义4个变量a,b,c,d。对部分变量执行自增自减操作,验证左运算和右运

10、算的区别,并进一步分析自增自减运算符与算术运算符的优先级。范例3.5 SelfAddSelfReduce2.c 定义变量a,分别执行单次和多次自增运算,输出结果,分析同一表达式中两次和三次自增操作中左运算和右运算的差别。 .3.5 关系运算符与关系表达式 关系表达式的值:真1和假0。例如:表达式103的值为1,即为真,而表达式-10的值为0,即为假。 范例3.6 RelationOperater.c 程序分析关系运算符的优先级,验证在同一表达式中有算术运算符和关系运算符时程序执行顺序,分析关系运算符的结合性,分析关系表达式的真和假。 留意:判别两个对象能否相等,运用运算符=或!=,一定与赋值运

11、算符=区分开来。.3.6 逻辑运算符与逻辑表达式 言语中提供了三种逻辑运算符:逻辑与&、逻辑或|和逻辑非!。前两种为双目运算符,具有左结合性。后一种为单目运算符,具有右结合性。 逻辑表达式的值:“真1和“假0两种。逻辑表达式中总是将0作为假,非0作为真。逻辑表达式的普通方式为:操作对象1 逻辑运算符 操作对象2 .3.6.1 逻辑与& 逻辑与运算&:参与运算的两个操作对象都为真非0时,结果为真1,否那么为假0。例如,表达式-42 & 3!=5,由于表达式02为假,因此便不再判别表达式3!=5,而直接以为原表达式为假0。 范例3.7 LogicAndOperater.c 程序分析逻辑与运算符的优

12、先级与结合性,并分析逻辑与表达式执行过程中对两侧表达式执行顺序的影响。 .3.6.2 逻辑或| 逻辑或运算|:参与运算的两个操作对象只需有一个为真非0,结果即为真1,否那么为假0。例如,表达式-410 | 3=0,表达式中|优先级低于关系运算符和=,所以表达式等价于-410|3=0,表达式-410为真,因此原表达式的结果为真。 C言语规定,当运算符左边为真非0时,即判别表达式为真1,而不再判别运算符右边能否为真或假。例如,表达式2 | 3!=5,由于常量2为真非0,因此便不再判别表达式3!=5,而直接以为原表达式为真1。 范例3.8 LogicOrOperater.c 程序分别设置逻辑与表达式

13、和逻辑或表达式。在范例3.7根底上进一步分析逻辑与表达式的执行顺序,分析逻辑或的执行顺序,并与逻辑与表达式进展比较。分析产生的结果。 .3.6.3 逻辑非! 逻辑非运算!:一元运算符,该运算符只能放在操作对象左边。当操作对象为真非0时,结果为假0,操作对象为假0时,结果为真。 范例3. LogicNoneOperator.c 程序分析逻辑非表达式的真和假,验证当变量a为非0时,!a的含义,并分析复合逻辑运算时表达式的执行顺序与结果。 .实训3.2判别闰年 CalculateLeapYear.c年数中分为平年或闰年,编写程序,判别输入年数是闰年还是平年,闰年输出为1,平年输出为0。 闰年判别公式

14、:(year%4 =0) &(year%100 !=0) | (year%400 =0)。 需求分析:需求1:输入年数需求2:运用逻辑运算符判别输入的年数能否为闰年 .3.7 位运算符位运算:对操作对象中的比特位bit进展移位、重置以及逻辑判别等操作。位运算只能用于字符型char或整型(int, short, long等),不能用于float、double、void或其他复杂类表-位运算符运算符意义表达式运算功能按位取反aa按位取反按位左移b按位右移c3c右移3位&按位与a&ba和b按位与按位异或aba和b按位异或|按位或a|ba和b按位或.3.7 位运算符1按位与& 规那么:每个操作对象对应

15、位都为1时,结果才为1,否那么为0。例如:3&5的计算方法为:先转化为二进制,然后按位进展与操作。 0000 0011& 0000 0101 - 结果为 0000 0001 运用: 按位与&主要用于将某个操作对象的某些位置零,例如,将int型变量的第3、5、7、12位置零,方法为将a和二进制数1110 1111 0101 1111作位与操作,表达式为:a&0 xEF5F。 .3.7 位运算符范例3.10 LogicBitAnd.c运用位&操作取变量a的低10bit位,其他位置零,并运用十六进制打印结果。方法为使变量a与另一常量作&,该常量低10位为1,其他位为0。 2按位或| 规那么:有一个操

16、作对象对应位为1时,结果即为1,当两个操作对象对应位都为为0时,结果才为。例如:35的计算方法为:先转化为二进制,然后按位进展或操作。0000 00110000 0101-结果为0000 0111.3.7 位运算符3按位异或 规那么:操作对象对应位一样时为1,不同时为0。例如35的计算方法为:先转化为二进制,然后按位进展异或操作。0000 00110000 0101-结果为0 xF9,十进制数2491111 1001 用途:按位异或主要用于将操作对象的的某些位翻转原来为1的位变为0,为0的变为1),其他各位不变。 .实训3.3交换两变量的值 ExchangeTwoVariable.c 编写程序

17、,不运用其他中间变量,交换两个整型变量a和b的值。运用按位异或交换两变量的值。运用异或操作置位两变量对应位不同的位置,并依次交叉操作,到达两值交换的功能,本例主要运用一个变量存储了两个变量信息的特性。需求分析:需求1:交换两个变量的值需求2:不运用中间变量 实现:运用按位异或运算符,完成操作,方法为:首先将变量a和b作异或操作,将结果赋给a,然后将b与a作异或操作,并将结果赋给b,反复第一步操作,完成。 .3.7 位运算符4按位取反 按位取反操作是将操作对象各位翻转,即原来为1的位变成0,原来为0的位变成1。例如:1111 1111 0001 0011-0000 0000 1110 1100用

18、途: 按位取反操作主要用于间接地构造一个数,以加强程序的可移植性。 .3.7 位运算符5按位左移 操作使操作对象的各位右移,高位补0,低位舍弃。与左移类似,操作对象和右移位数只能是整型或字符型。 .3.8 条件运算符 条件运算符:C言语中独一一个三元运算符三目运算符,其普通表达方式为:表达式1?表达式2:表达式3 规那么:假设表达式1的值为真非0,那么表达式的值为表达式2,否那么为表达式3。例如: ab?a+b:a-b 当a=10,b=5,c=2时,该表达式的执行过程如下: 首先计算表达式ab能否为真,经运算为真,因此,表达式的值为a+b,即为15。 .实训3.4分段函数计算 MulitPartFunction.c 键盘输入变量x的值,运用条件运算符判别函数y的值,并输出x和y的值。编写程序,实现分段函数: 需求分析:需求1:键盘输入变量x的值需求2:运用条件运算符判别变量x的值,并确定y的值思绪:判别键盘

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论