![cxm-第3章C语言程序设计ppt课件_第1页](http://file3.renrendoc.com/fileroot_temp3/2021-12/9/9f1f04c3-8f89-4051-866c-cb85d6a8d4d6/9f1f04c3-8f89-4051-866c-cb85d6a8d4d61.gif)
![cxm-第3章C语言程序设计ppt课件_第2页](http://file3.renrendoc.com/fileroot_temp3/2021-12/9/9f1f04c3-8f89-4051-866c-cb85d6a8d4d6/9f1f04c3-8f89-4051-866c-cb85d6a8d4d62.gif)
![cxm-第3章C语言程序设计ppt课件_第3页](http://file3.renrendoc.com/fileroot_temp3/2021-12/9/9f1f04c3-8f89-4051-866c-cb85d6a8d4d6/9f1f04c3-8f89-4051-866c-cb85d6a8d4d63.gif)
![cxm-第3章C语言程序设计ppt课件_第4页](http://file3.renrendoc.com/fileroot_temp3/2021-12/9/9f1f04c3-8f89-4051-866c-cb85d6a8d4d6/9f1f04c3-8f89-4051-866c-cb85d6a8d4d64.gif)
![cxm-第3章C语言程序设计ppt课件_第5页](http://file3.renrendoc.com/fileroot_temp3/2021-12/9/9f1f04c3-8f89-4051-866c-cb85d6a8d4d6/9f1f04c3-8f89-4051-866c-cb85d6a8d4d65.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022-5-221C语言程序设计 2022-5-222第三章 表达式与运算符主讲主讲: : 计算机学院计算机学院 曹晓梅曹晓梅n表达式体现对数据的处理,由运算符和运算对象组成表达式体现对数据的处理,由运算符和运算对象组成 n掌握每种运算符的以下知识:掌握每种运算符的以下知识:n对运算对象的要求对运算对象的要求n运算符的结合性运算符的结合性n运算符的优先级运算符的优先级n运算结果的特性运算结果的特性n有多种运算符的复杂表达式的计算顺序及计算结果有多种运算符的复杂表达式的计算顺序及计算结果n数据类型的自动转换规则及强制转换的方法数据类型的自动转换规则及强制转换的方法n表达式实现对数据的处理,每个
2、表达式都有唯一的值表达式实现对数据的处理,每个表达式都有唯一的值n表达式由运算对象和运算符组成表达式由运算对象和运算符组成n运算对象的种类:常量、变量、有返回值的函数调用、运算对象的种类:常量、变量、有返回值的函数调用、其它表达式其它表达式n例:例:2 a rand() 2 a rand() (2+a)2+a)* *rand( )rand( )n运算符:共运算符:共3434种,分为种,分为1515个不同的优先级个不同的优先级可以理解成是不带运算符的最简单表达式可以理解成是不带运算符的最简单表达式常量表达式常量表达式变量表达式变量表达式函数表达式函数表达式带运算符的表达式带运算符的表达式n表达式
3、不是左值就是右值。表达式不是左值就是右值。n左值与右值的关系:右值只能出现在赋值号的右边;左值与右值的关系:右值只能出现在赋值号的右边;而左值既可以出现在赋值号的左边,又可以出现在赋而左值既可以出现在赋值号的左边,又可以出现在赋值号的右边。左值可以取地址值号的右边。左值可以取地址, ,右值不可以取地址右值不可以取地址. .n例:例: 2 a rand() 2 a rand() (2+a)2+a)* *rand( ) rand( ) a=ba=b常量表达式只能作为右值常量表达式只能作为右值例:例:a=2;(a=2;(右值右值) )变量表达式为左值变量表达式为左值, ,既可在赋值号左边也可以既可在
4、赋值号左边也可以在右边在右边, ,例:例:a=5;(a=5;(左边)左边) b=a;( b=a;(右边)右边)此函数表达式为右值此函数表达式为右值例:例:a=rand( )a=rand( )右值右值此表达式只能作为右值此表达式只能作为右值例:例:b=b=(2+a)2+a)* *rand( ); (rand( ); (右右值值) )赋值表达式只能作为右值赋值表达式只能作为右值例:例:c=a=b;(c=a=b;(右值)右值) (a=b)=c;( (a=b)=c;(出错)出错)算术运算符主要完成数值计算问题,具体如下表所列运算符运算符优先优先级级结合结合方向方向对运算对象对运算对象的要求的要求运算结
5、果特性运算结果特性特殊说明特殊说明- 取负取负2 2从右从右到左到左整、实型值整、实型值运算对象的相运算对象的相反数反数单目运算符单目运算符+ 自增自增整整,实实,字符字符,指针型指针型变量变量结果与变量的结果与变量的值可能一致值可能一致单目单目,分为前分为前+ 后后+- 自减自减单目单目,分为前分为前+ 后后- -* 乘乘3 3从左从左到右到右允许整型与允许整型与实型数混合实型数混合只要有只要有1个实对个实对象结果实型,象结果实型,否则整型结果否则整型结果/ 除除两个整数相除只能两个整数相除只能得到得到整数商整数商% 取余取余仅限整型数仅限整型数整除的余数整除的余数正负号同第正负号同第1数数
6、+ 加加4 4从左从左到右到右允许整型与允许整型与实型数混合实型数混合只要有只要有1个实对个实对象结果实型,象结果实型,否则整型结果否则整型结果- 减减例:例:int a=3,b,c; a+的表达式结果是的表达式结果是3,变量,变量a的值是的值是4;+a的表达式结果是的表达式结果是4,变量,变量a的值是的值是4;因而因而,c=a+执行后,执行后, c的值是的值是3,a的值是的值是4 b=+a执行后,执行后,b的值是的值是4,a的值也是的值也是4例:例:int a=3; -a结果为结果为-3,但是变量,但是变量a的值仍为的值仍为3-2.45是是2.45的相反数的相反数例:例:int a=3,b,
7、c; a-的表达式结果是的表达式结果是3,变量,变量a的值是的值是2;-a的表达式结果是的表达式结果是2,变量,变量a的值是的值是2;因而因而,c=a-执行后,执行后, c的值是的值是3,a的值是的值是2 b=-a执行后,执行后,b的值是的值是2,a的值也是的值也是2例:例:int a=27,b=5,c; 表达式表达式a/b结果是结果是5,而不是,而不是5.4表达式表达式27.0/b结果是结果是5.4表达式表达式27.0/5.0结果是结果是5.4例:例:int a=27,b=5,c; 表达式表达式a%b结果是结果是2,表达式表达式-a%b结果是结果是-2 表达式表达式27.0%b是错误的是错误
8、的例:表达式例:表达式2+3结果是结果是5表达式表达式2+3.0结果是结果是5.0表达式表达式2.0+3.0结果是结果是5.0例:表达式例:表达式3-2结果是结果是1表达式表达式3.0-2结果是结果是1.0表达式表达式3.0-2.0结果是结果是1.0n程序3.1 赋值表达式及算术运算符示例n#includen#include /包含随机函数rand的声明nint main( )n int a=5,b=6,c=7;nprintf(“%dn”,rand(); /显示随机数nprint(%dn,a*(b+c)/2-2); /显示算术表达式的值nprintf(%dn,a=b); /显示赋值表达式即a的
9、值nb=rand()%10; /混合表达式赋0至9之间的1个随机数nprintf(“%dn”,c=a=b); /显示赋值表达式的值即c的值n return 0;n动动态态演示演示过过程程关系运算符主要完成表达式间的比较,比较的结果非真即假,C语言中无逻辑类型,故用1表示真,0表示假任何类型的值,只要不等于0,在需要作出真假判断的场合就代表逻辑真。 运算符运算符优先级优先级结合结合方向方向对运算对象的要求对运算对象的要求运算结果特性运算结果特性 大于大于6 6从左从左到右到右允许允许不同类型不同类型的值混合的值混合计算,运算对象计算,运算对象非非0就就表示表示真真值,值,0表示表示假假,当当类型
10、不一致类型不一致时,会自时,会自动进行动进行类型转换类型转换为同一为同一种类型种类型 关系表达式的最终结关系表达式的最终结果只有两个值:果只有两个值:1或或0,1表示真,表示真,0表示假表示假用用括号括号可以可以提升优先提升优先级,级,有时为了更清晰有时为了更清晰= 大于等于大于等于= 小于等于小于等于= 相等相等7 7!= 不相等不相等结论结论: :关系运算符的优先级低于算术运算符关系运算符的优先级低于算术运算符例:例:c(a+b) 可以可以写成:写成: cb)!=c 可以写可以写成:成: ab!=c例:例:a=(bc)可以写可以写成:成: a=b=(a+b)用括号表达式的含用括号表达式的含
11、义清楚义清楚n程序3.2 关系运算示例n#includen#include /包含随机函数rand的声明nint main( )n n int a=rand()%10; /产生3个09的随机数 n int b=rand()%10;n int c=rand()%10,d;n printf(“a=%d,b=%d,c=%dn”,a,b,c); /输出n printf(%dn,c=(a+b);n return 0;na=1,b=7,c=410逻辑运算符主要完成更复杂的条件判断逻辑表达式的最终结果只有两个:1表示真,0表示假。任何类型的值,只要不等于0,在需要作出真假判断的场合就代表逻辑真,0代表逻辑假
12、运算符运算符优先级优先级 结合结合方向方向对运算对象的对运算对象的要求要求运算结果特运算结果特性性说明说明! 逻辑非逻辑非2从右从右至左至左允许允许不同类型不同类型的值混合计算,的值混合计算,运算对象运算对象非非0就表示就表示真真值,值,0表示表示假假一定是整型,一定是整型,并且只有两并且只有两个值个值1和和0,分别表示分别表示真真和假和假 单目运算符单目运算符,置,置反反运算对象真假运算对象真假& 逻辑与逻辑与11从左从左至右至右两个对象两个对象都为真都为真结果才为真结果才为真| 逻辑或逻辑或12两个对象只要有两个对象只要有1 1个真个真结果就为真结果就为真几种运算符的优先级几种运算符的优先
13、级: :单目单目-算术算术-关系关系-逻辑与逻辑与-逻辑或逻辑或例:!例:!A 结果为结果为0,!(2+35)结果为结果为1例:例:(ab)&(xy) 可可以写成:以写成: ab&x=A&ch=Z,而而不是:不是: A=chb)&(c=c*2) 0,c的值仍为的值仍为7 短路短路,因为因为ab的结果为的结果为0,故,故c=c*2不执行不执行 (ab)&(c=c*2) 1,c的值为的值为14 不短路不短路,因为,因为ab的结果为的结果为1,故,故c=c*2执行执行 (ab)&(c=c-7) 0,c的值为的值为0 不短路不短路,因为,因为ab的结果为的结果为1,故,故c=c-7执行执行(ab) )
14、|(c=c*5) 1,c的值仍为的值仍为7 短路短路,因为,因为ab)|(c=c*5) 1,c的值为的值为35 不短路不短路,因为,因为ab的结果为的结果为0,故,故c=c*5执行执行 (ab)|(c=c-7)0,c的值为的值为0 不短路不短路,因为,因为ab的结果为的结果为0,故,故c=c-7执行执行 假设已有定义:假设已有定义:int a=5,b=6,c=7; int a=5,b=6,c=7; 下表给出了下表给出了&和和|的短路功能的短路功能练习:练习:设有语句:设有语句:int a = 3 , b =5, m=0; int a = 3 , b =5, m=0; 则执行语句则执行语句a+b
15、8&(m = a=3)a+b8&(m = a=3)后,后,m m的值为的值为_,_,整个表达式的值为整个表达式的值为_n程序3.3 逻辑运算示例 n#includen#include /包含随机函数rand的声明nint main( )n n int a=1+rand()%50, b=1+rand()%50;n int x=rand()/a, y=rand()/b;n printf(%d,%d,%dn,a,b,ab);n printf(%d,%d,%dn,x,y,xy);n printf(%dn,(ab)&(xy);n printf(%dn,(a=b)|(x=y);n printf(%dn,(
16、!a)|(a!=b);n return 0;nrand( )函数产生一个非负随机整数,函数产生一个非负随机整数,产生一个产生一个a,b范围的非负随机整数的方范围的非负随机整数的方法是:法是:a+rand( )%(b-a+1) 动动态态演示演示过过程程n自增自增(+)(+)自减自减(-)(-)运算符的几个特殊性:运算符的几个特殊性:n(1)(1)这两种运算符专门用于改变一个变量自身的值这两种运算符专门用于改变一个变量自身的值( (增或增或减减1)1),因此实质上具有赋值功能,运算对象只能是一个,因此实质上具有赋值功能,运算对象只能是一个变量。变量。 n(2)(2)对变量变化的时机取决于运算符与运
17、算对象的相对对变量变化的时机取决于运算符与运算对象的相对位置,有前后之分,位置,有前后之分,+a+a和和aa为前为前+(-)+(-),a+a+和和aa为为后后+(-)+(-)。n(3)(3)需要区分表达式的值和变量的值。前需要区分表达式的值和变量的值。前+或前或前是指是指先改变变量的值,再用变化后的值参加运算;后先改变变量的值,再用变化后的值参加运算;后+或或后后是指先用未变化过的变量的值参加表达式的运算,是指先用未变化过的变量的值参加表达式的运算,最后再改变变量的值。共同点就是变量值肯定改变。最后再改变变量的值。共同点就是变量值肯定改变。n程序3.4 自增自减运算示例 n#includeni
18、nt main( )n int i=5,j=6,k;n i+; +j; /相当于i=i+1;j=j+1;n printf(i=%d,j=%dn,i,j);n i-;-j; /相当于i=i-1;j=j-1;n printf(i=%d,j=%dn,i,j);n k=(i+)+(+j); /相当于j=j+1;k=i+j; i=i+1;n printf(i=%d,j=%d,k=%dn,i,j,k);n k=(i-)+(-j); /相当于j=j-1;k=i+j; i=i-1;n printf(i=%d,j=%d,k=%dn,i,j,k); n return 0;ni=6,j=7i=5,j=6i=6,j=
19、7,k=12i=5,j=6,k=12 动动态态演示演示过过程程n条件运算符是C语言中唯一的1个三目运算符n其格式为:表达式1?表达式2:表达式3n计算方法及运算结果:先求表达式1得到非0表示真,得到0表示假。如果是真,则条件表达式的值等于表达式2的值(此时表达式3不计算);如果是假,则条件表达式的值等于表达式3的值(此时表达式2不计算)。 n优先级:13级,仅高于逗号和赋值运算符的优先级n结合方向:从右至左,当有条件运算符嵌套时,按照从右至左的顺序结合。n程序3.5 条件运算示例 n#includen#includenint main( )n n int a=rand()%10, b=rand
20、()%10,c,d;n c=ab?a:b;n d=aa=a=b+5 =a=a* *(b+5)(b+5)n程序3.6 赋值及复合赋值示例 n#includenint main( )n n int a,b,c;n a=b=c=7;/相当于c=7;b=c;a=bn c+=a+;/相当于c=c+a; a+;n printf(a=%d,c=%dn,a,c);n c%=+a;/相当于+a; c=c%a;n printf(a=%d,c=%dn,a,c);n c*=a-;/相当于c=c*a; a-;n printf(a=%d,c=%dn,a,c);n return 0;na=8,c=14a=9,c=5a=8,
21、c=45n逗号不仅是C语言源程序中的一种分隔符,还是一种运算符。n逗号表达式的形式:表达式1,表达式2,,表达式nn运算对象:可以是任何类型的表达式n计算方法及运算结果:按从左到右的顺序依次计算各表达式的值,最后一个表达式n的结果就是整个逗号表达式的结果.n优先级:15级,优先级最低,通常通过加括号提升其优先级n结合方向:从左至右 n例:设所有变量均为int型,计算 x=a=3,6*a 和 x=(a=3,6*a) 这是一个逗号表达式,先计算赋值表达式这是一个逗号表达式,先计算赋值表达式x=a=3x=a=3,该表达式的结果为,该表达式的结果为x x,变量,变量x x和和a a的的值均为值均为3
22、3,再计算第二个表达式,再计算第二个表达式6 6* *a a结果为结果为1818,因此逗号表达式最后结果为,因此逗号表达式最后结果为18 18 这是一个赋值表达式,先计算圆括号内逗号表这是一个赋值表达式,先计算圆括号内逗号表达达a=3,6a=3,6* *a a ,该表达式的结果为,该表达式的结果为1818,再将该,再将该结果赋值给变量结果赋值给变量x x,因此赋值表达式最后结,因此赋值表达式最后结果为果为1818,变量,变量a a的值为的值为3 3,x x的值为的值为18 18 C C语言中的括号也是运算符,处于第一优先语言中的括号也是运算符,处于第一优先级,用于提升其他运算符的优先级,及级,
23、用于提升其他运算符的优先级,及作为函数参数表的起止标记作为函数参数表的起止标记n不同类型进行混合运算需要先转换为同一种类型再计算,这个类型称为目标类型。C语言提供了3种方式的类型转换。n(1)不同类型数据混合运算时,由编译器自动完成隐式类型转换 nfloat转为doublen短存储型转为长存储型 n有符号数据转为无符号数据 n整型转为浮点型 n(2)强制性数据类型转换:根据用户需要用语句进行转换,形式n (目标类型名待转换表达式 n例: int a=(int)3.14; /a=3 n (float)a/4 = 3.0/4结果为0.75n (float)(a/4) = 3/4结果为0,然后float(0),结果0.0n 变量a的类型仍为int型。强制类型转换不会改变变量原类型 这也是这也是C C语言中的单目语言中的单目运算符,第运算符,第2 2优先级优先级n(3)赋值时的数据类型自动转换:赋值号右边表达式类型转换为左边变量的类型,原则: nfloat或double型数据赋值给int型变量:直接截断小数 nint或char型数据赋值给double或float型变量:补足有效位成为一个浮点数 nchar型数据赋值给整型家族的变量:将其ASCII码值赋给最低的一个字节,高字节全补0nlong或int型数据赋值给short int型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全生产事故隐患报告制度和举报奖励制度范文(五篇)
- 2025高一物理预习讲第7讲.牛顿运动定律基础含答案
- 2025年陕西省职教高考《语文》核心考点必刷必练试题库(含答案)
- 土方开挖运输合同
- 幼儿园圆形教学活动策划方案五篇
- 代理药品销售合同范本
- 公司口罩采购合同范本
- 标识的采购合同
- 咨询策划合同范本
- 电气设备安装合同
- 《梅大高速茶阳路段“5·1”塌方灾害调查评估报告》专题警示学习
- 2024年09月北京中信银行北京分行社会招考(917)笔试历年参考题库附带答案详解
- 《大健康解读》课件
- 2025年度交通运输规划外聘专家咨询协议3篇
- 2024年公司领导在新年动员会上的讲话样本(3篇)
- 人教版道德与法治二年级下册《第一单元 让我试试看》大单元整体教学设计2022课标
- 2024年3季度青岛房地产市场季度简报
- 苏东坡词十首
- 2023年天津市文化和旅游局直属事业单位招聘考试真题及答案
- 医务科运用PDCA循环提高门诊医生准时出诊率PDCA成果汇报
- 模具生产车间员工绩效考核表模板
评论
0/150
提交评论