《第3章运算符和表达式优秀课件.ppt》由会员分享,可在线阅读,更多相关《第3章运算符和表达式优秀课件.ppt(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第3 3章章 运算符和表达式运算符和表达式第1页,本讲稿共29页北京邮电大学出版社3.1 表达式表达式一表达式一表达式表达式是由运算对象、运算符按照C语言的语法规则构成的符号序列。表达式可以通过运算产生一个结果或完成某种操作。C语言的表达式功能很强,也很复杂,它提供了许多种运算符第2页,本讲稿共29页北京邮电大学出版社3.1 表达式表达式二运算符二运算符运算符是C语言里用于描述对数据进行运算的特殊符号。C语言有三大运算符:算术、关系与逻辑、位操作。第3页,本讲稿共29页北京邮电大学出版社3.1 表达式表达式三运算符和表达式的分类三运算符和表达式的分类1运算符的分类运算符的分类 按在表达式中与
2、运算对象的关系(所需要运算对象的个数)可以分为:F单目运算符F双目运算符F三目运算符第4页,本讲稿共29页北京邮电大学出版社3.1 表达式表达式 按它们在表达式中所起的作用又可以分为:F算术运算符:+、-、*、/、%F赋值运算符:=、+=、-=、*=、/=、%=、&=、|=、=、=F自增自减运算符:+、-F关系运算符:、=、=、!=F逻辑运算符:!、&、|F条件运算符:?:F位运算符:、&、|、F逗号运算符:,F其它运算符:()、-、.、(类型名)、*、&、sizeof第5页,本讲稿共29页北京邮电大学出版社3.1 表达式表达式2表达式的分类表达式的分类 按照运算符要求运算对象的个数可以分为:
3、F单目表达式F双目表达式F三目表达式 按照运算符在表达式中的作用,可以分为:F算术表达式赋值表达式F自增、自减表达式F关系表达式F逻辑表达式F逗号表达式第6页,本讲稿共29页北京邮电大学出版社3.1 表达式表达式四优先级和结合性四优先级和结合性优先级指同一个表达式中不同运算符进行运算时的优先次序。结合性是针对同一优先级的多个运算符而言的,它是指同一个表达式中相同优先级的多个运算是自左向右进行运算还是自右向左进行运算。关于C语言运算符的含义、类型、优先级、结合性等问题见附录B。第7页,本讲稿共29页北京邮电大学出版社3.2 算术运算符算术运算符一算术运算符一算术运算符 F+:加法运算符F-:减法
4、运算符F*:乘法运算符F/:除法运算符当运算对象均为整数时运算结果也为整数。F%:求余运算符(模运算符)。要求%两侧运算对象均为整型数据。算术运算符均为双目运算符,均具有左结合性。*、/、%的优先级为3级,+、-的优先级为4级。第8页,本讲稿共29页北京邮电大学出版社3.2 算术运算符算术运算符二算术表达式二算术表达式算术表达式是用算术运算符和括号将运算对象连接起来的、符合C语言的语法规则的式子。使用算术表达式时应注意:(1)当双目算术运算符两侧运算对象的类型一致时,运算结果的类型与运算对象的类型相同,如果类型不一致,系统将自动按规律先将运算对象转换为同一类型,然后再进行运算。(2)可以用括号
5、改变表达式的运算顺序,左右括号必须配对,多层括号都用小括号“()”表示。(3)注意算术表达式的书写形式,不要写成代数式的形式。第9页,本讲稿共29页北京邮电大学出版社3.3 赋值运算符赋值运算符一普通赋值运算符一普通赋值运算符1赋值运算符赋值运算符赋值符号“=”就是赋值运算符,其功能是将赋值运算符“=”右侧表达式的值求出并将结果赋值给“=”左侧的变量。赋值运算符的优先级很低,仅高于逗号运算符,为右结合性。第10页,本讲稿共29页北京邮电大学出版社3.3 赋值运算符赋值运算符2赋值表达式赋值表达式用赋值运算符将一个变量和一个表达式连接起来的符合C语言语法的式子称做赋值表达式。它的一般形式为:变量
6、名=表达式赋值表达式的结果是赋值号右侧的表达式的值。求解赋值表达式时,如果赋值运算符两侧的数据类型不一致,赋值时要进行类型转换。转换的原则是将右侧的表达式的值转换为左侧变量的类型再进行对左侧变量赋值。第11页,本讲稿共29页北京邮电大学出版社3.3 赋值运算符赋值运算符二复合赋值运算符二复合赋值运算符在赋值运算符“=”之前加上其它一些双目运算符可以构成复合赋值运算符,用于完成运算、赋值组合操作。C语言中复合赋值运算符的一般形式为:运算符=其中“运算符”可以是:+、-、*、/、%、|、&、所构成的复合赋值运算符是:+=、-=、*=、/=、%=、|=、&=、=、=所有的赋值运算符包括复合赋值运算符
7、的优先级全部相同,均为右结合性。第12页,本讲稿共29页北京邮电大学出版社3.3 赋值运算符赋值运算符由复合赋值运算符将一个变量和一个表达式连接起来的式子称为复合赋值表达式。它的一般形式为:变量名 复合赋值运算符 表达式复合赋值表达式的作用等价于:变量名=变量名 运算符(表达式)即先将变量和表达式进行复合赋值运算符所指定的运算,然后将运算结果赋给变量。复合赋值表达式的值就是复合赋值运算符左侧变量被赋值以后的值。第13页,本讲稿共29页北京邮电大学出版社3.4 不同数据类型数据间的混合运算不同数据类型数据间的混合运算一自动类型转换一自动类型转换整型、实型、字符型数据间可以混合进行算术运算。进行运
8、算时,参与运算的操作数的数据类型要一致,若参与运算的数据类型不同,先要将其转换为相同的类型,然后再进行运算。第14页,本讲稿共29页北京邮电大学出版社3.4 不同数据类型数据间的混合运算不同数据类型数据间的混合运算一自动类型转换一自动类型转换横向箭头表示必须的转换,纵向箭头表示当运算符两侧的运算对象为不同类型时的转换,这些转换都是由系统自动进行的。高低doublelongunsignedintchar,shortfloat第15页,本讲稿共29页北京邮电大学出版社3.4 不同数据类型数据间的混合运算不同数据类型数据间的混合运算二强制类型转换二强制类型转换强制类型转换是通过类型转换运算来实现的。
9、其一般形式为:(类型说明符)(表达式)(类型说明符)是类型转换运算符,单目运算,优先级别为2级,具右结合性。在类型转换运算符的右侧跟上表达式形成类型转换表达式,其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。第16页,本讲稿共29页北京邮电大学出版社3.4 不同数据类型数据间的混合运算不同数据类型数据间的混合运算三强制类型转换三强制类型转换赋值表达式的类型转换当赋值运算符两侧的运算对象数据类型不同时,系统也将进行自动类型转换,转换规则为:将赋值运算符右侧表达式的类型转换为左侧变量的类型。第17页,本讲稿共29页北京邮电大学出版社3.4 不同数据类型数据间的混合运算不同数据类型数据间
10、的混合运算1浮点型与整型相互转换浮点型与整型相互转换将浮点数据(包括单、双精度)转换为整型时,将舍弃浮点数的小数部分,只保留整数部分。2单、双精度浮点型相互转换单、双精度浮点型相互转换由于C语言中的浮点值总是用双精度表示的,所以float型数据只是在尾部加0延长为double型数据参加运算,然后直接赋值。double型数据转换为float型时,先截取双精度实数的前7位有效数字,然后再赋给单精度类型的变量。3字符型与整型相互转换字符型与整型相互转换将整型数据赋给字符型变量时,由于整型数据用两个字节存放,而字符型数据用一个字节存放,所以只保留其低8位赋给字符型变量,高位部分舍弃。字符型数据赋给整型
11、变量时,将字符数据的8位放入整型变量的低8位中,有些编译系统在整型变量的高8位补0;而有些编译系统(如Turbo C),根据字符的最高位为0或1将高8位全部补0或补1。第18页,本讲稿共29页北京邮电大学出版社3.4 不同数据类型数据间的混合运算不同数据类型数据间的混合运算4整型与长整型相互转换整型与长整型相互转换长整型数据赋值给整型变量时,将低16位值送给整型变量,将高16位截断舍弃。将整型数据赋值给长整型变量时,将整型数据的16位送到长整型变量的低16位中,根据整型数据符号位为0或1,在长整型的高16位全部补0或1,以保持数值不改变。5无符号整数与有符号整数相互转换无符号整数与有符号整数相
12、互转换若占据同样长度存储单元的有符号、无符号整型相互转换时,是原样赋值,内部的存储方式不变,但外部值可能改变。若占据不同长度存储单元的有符号、无符号整型之间转换,先参照(4)中所述方式进行转换,再按上面字节数相同的方式直接赋值。第19页,本讲稿共29页北京邮电大学出版社3.5 自增、自减运算符自增、自减运算符一自增自减运算符、表达式一自增自减运算符、表达式F+:自增运算符,使变量的值增加1。F-:自减运算符,使变量的值减少1。自增、自减运算符均为单目运算符,优先级为2,具右结合性。第20页,本讲稿共29页北京邮电大学出版社3.5 自增、自减运算符自增、自减运算符一自增自减运算符、表达式一自增自
13、减运算符、表达式自增、自减运算符都有两种用法:F前置运算将+或-运算符置于变量之前,一般形式为:+变量、-变量。其功能是使变量的值增(减),然后再以变化后的变量值参与其它运算,即先增减、后运算。F后置运算将+或-运算符置于变量之后,一般形 式为:变量+、变量-。其功能是变量先参与其它运算,然后再使变量的值增(减),即先运算、后增减。第21页,本讲稿共29页北京邮电大学出版社3.5 自增、自减运算符自增、自减运算符二关于自增自减运算符、表达式的说明二关于自增自减运算符、表达式的说明F自增、自减运算符实际上属于赋值运算符,不能应用于常量和表达式,操作对象只能是变量。F一般自增自减表达式或是以表达式
14、语句的形式出现,或是出现在for循环语句中使循环控制变量加(减),或应用于指针变量,使指针指向下(上)一个地址。其它将自增自减表达式应用于另一个表达式内部的形式,在尚未熟练掌握时尽量不去使用。F最好不要使用诸如i+j、(i+)+(i+)此类容易产生歧义或错误的形式。第22页,本讲稿共29页北京邮电大学出版社3.6逗号运算符逗号运算符逗号运算符就是用逗号“,”作为操作符,它可以把多个表达式连接起来形成逗号表达式。逗号运算符又称顺序求值运算符。逗号运算符为双目运算,其优先级别是C中所有运算符中最低的,具左结合性。逗号表达式扩展为n元运算的形式:表达式,表达式,表达式n逗号表达式的求值过程是自左向右
15、,依次计算各子表达式的值,最右侧子表达式“表达式n”的值即为整个逗号表达式的值。第23页,本讲稿共29页北京邮电大学出版社3.7其它运算符其它运算符sizeof的使用形式比较像是函数调用,但它是一种运算符。其一般应用形式为:sizeof(运算对象)sizeof运算的功能是求出运算对象在计算机的内存中所占用的字节数。其中运算对象可以是数据类型说明符或表达式,当运算对象是表达式时括号可省略。sizeof是单目运算符,优先级别为2,具右结合性,运算的结果是整型。第24页,本讲稿共29页北京邮电大学出版社本章小结本章小结本章主要介绍了运算符与表达式,其中涉及到的重要概念有:运算对象的个数、运算优先级、
16、结合性、类型转换等。运算符是C语言里用于描述对数据进行运算的特殊符号。表达式是由运算符连接常量、变量、函数所组成的式子,每个表达式都有一个值和类型。表达式求值按运算符的优先级和结合性所规定的顺序进行。1运算符优先级和结合性运算符优先级和结合性一般而言,单目运算符优先级较高,赋值运算符优先级较低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,而单目运算符、三目运算符、赋值运算符具有右结合性。第25页,本讲稿共29页北京邮电大学出版社本章小结本章小结2算术运算符算术运算符(1)整数相除是做整除,结果也为整数。(2)求余运算要求运算对象均为整型。(3)注意运算时的类型转换
17、问题。(4)注意C语言表达式与数学公式在形式上的差异3赋值运算符赋值运算符(1)赋值表达式的左边必须为变量。(2)复合赋值运算符的优先级全部在同一级别。(3)注意赋值时的类型转换。第26页,本讲稿共29页北京邮电大学出版社本章小结本章小结4类型转换(1)自动转换:在不同类型数据的混合运算中,由系统自动实现转换,由少字节类型向多字节类型转换。(2)强制转换:由强制转换运算符完成转换。(3)赋值时的类型转换:不同类型的量相互赋值时也由系统自动进行转换,把赋值号右边的类型转换为左边变量的类型。(4)无论是系统所做的自动类型转换还是强制类型转换,都只是将常量、变量、表达式的值进行转换去参与运算,不会改
18、变变量的数据类型和值。第27页,本讲稿共29页北京邮电大学出版社本章小结本章小结5自增、自减运算符自增、自减运算符(1)自增、自减其实也是赋值运算,只能针对变量做自增、自减运算。(2)注意前置运算(先增减后运算)与后置运算(先运算后增减)对所在表达式的影响的不同6逗号运算符逗号运算符(1)逗号表达式的值取最后一个表达式的值。(2)逗号运算符的优先级最低。7其它运算符(1)sizeof是运算符,不是函数名。(2)sizeof求表达式在内存中所占的字节数。第28页,本讲稿共29页北京邮电大学出版社习题参考答案习题参考答案一选择题CBBCADADCD二计算下列表达式的值12.80000025.5000003604-26454.500000三写出程序运行结果9,8,9,9第29页,本讲稿共29页