《c语言程序设计教学资料》第3章-运算符与表达式.ppt

上传人:牧羊曲112 文档编号:5896110 上传时间:2023-08-31 格式:PPT 页数:52 大小:816.50KB
返回 下载 相关 举报
《c语言程序设计教学资料》第3章-运算符与表达式.ppt_第1页
第1页 / 共52页
《c语言程序设计教学资料》第3章-运算符与表达式.ppt_第2页
第2页 / 共52页
《c语言程序设计教学资料》第3章-运算符与表达式.ppt_第3页
第3页 / 共52页
《c语言程序设计教学资料》第3章-运算符与表达式.ppt_第4页
第4页 / 共52页
《c语言程序设计教学资料》第3章-运算符与表达式.ppt_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《《c语言程序设计教学资料》第3章-运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《《c语言程序设计教学资料》第3章-运算符与表达式.ppt(52页珍藏版)》请在三一办公上搜索。

1、第三章运算符和表达式,常用运算符和表达式运算符的优先级和结合性,第三章运算符和表达式,内容提要:,常用运算符和表达式,运算符按性质分类:(1)算数运算符:+-*/%(2)关系运算符:=|&(5)赋值运算符:=(6)条件运算符:?:(7)逗号运算符:,(8)指针运算符:*&(9)求字节数运算符:sizeof(10)强制类型转换运算符:(类型名)(11)分量运算符:-.(12)下标运算符:(13)其它数运算符:函数调用运算符(),常用运算符和表达式,运算符按运算所需对象(操作数)的个数分类:,(1)单目运算符(仅对一个运算对象进行操作)+-!-(2)双目运算符(需要两个操作数)+-*/%等(3)三

2、目运算符(需要三个操作数)?:(唯一的一个三目运算符),表达式是运算符、变量、常量和函数的任意组合构成的式子。优先级是指表达式中包含多个运算符时,先进行优先级高的运算符操作,然后进行运算级低的运算符操作。当表达式中包含的几个运算符的优先级完全相同时,由运算符的结合性来决定它们的运算顺序。结合性同一优先级,自左向右,为左结合性,反之为右结合性。运算符的两侧数据类型不同,需要数据类型转换。,常用运算符和表达式,有些运算符的结合方向为自右向左,如赋值运算符。,算数运算符和算数表达式,基本的算术运算符:(加法运算符。如:35、)(减法运算符,或负值运算符。如:52、3)*(乘法运算符。如:3*5)(除

3、法运算符。如:53,5.03)(模运算符,或称求余运算符,两侧均应为整型数据,如:74的值为3)。,算数运算符和算数表达式,例:12/5=2 12.0/5=2.4,整型+(-、*、/)整型=整型实型+(-、*、/)实型=实型若一个操作数为整型,另一个操作数为实型,结果是实型,算数运算符和表达式,例:1/2=-5/2=-5/2.0=,例:5%2=-5%2=5/-2=1%10=5%1=5.5%2=,0-2-2.5,1-111 0,类型转换,同种数据类型的运算结果,还是该类型 不同数据类型的运算结果,是两种类型中取值范围更大的那种,例:计算2L+3*4.5,如果自动转换不符合需要,可以要求做特定类型

4、转换。(类型)表达式,例:(int)(3.6*15.8)+4,例:#include main()int m=5;printf(“m/2=%dn”,m/2);printf(“(float)(m/2)=%fn”,(float)(m/2);printf(“(float)m/2=%fn”,(float)m/2);,运行结果:m/2=2(float)(m/2)=2.000000(float)m/2=2.500000,类型转换,算术表达式和运算符的优先级与结合性用算术运算符和括号将运算对象(也称操作数)连接起来的、符合语法规则的式子,称为算术表达式。,例:(-16/3*2+1)%6=,-3,算数运算符和表

5、达式,使用标准数学函数时,程序开头必须加上编译预处理命令。#include,例:给出三角形的三边长,求三角形面积。,解题思路:假设给定的三个边符合构成三角形的条件关键是找到求三角形面积的公式公式为:,其中s=(a+b+c)/2,#include#include/调用数学函数加此行int main()double a,b,c,s,area;a=3.67;b=5.43;c=6.21;s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);/函数 printf(a=%ftb=%ft%fn,a,b,c);printf(area=%fn,area);return 0;,实验P

6、43 面积:体积:,#include#include#define PI 3.14159main()double r,surf,volu;printf(“Input r:”);scanf(“%lf”,运行结果:Input r:.5.0surf=314.159000Volu=523.598333,#include#define PI 3.14159main()double r,surf,volu;printf(“Input r:”);scanf(“%lf”,算数运算符和表达式,常见错误:(1)将*省略,或者写成。(2)使用或者限定表达式的运算顺序。只能用()(3)使用数学函数运算时,未将参数()

7、括起来,且未注意其定义域要求参数的单位。(如:三角函数参数的单位是弧度,不是角度,开平方函数的参数不能小于0等),说明:(1)两个整数相除的结果仍为整数,舍去小数部分的值。(2)求余运算先定参与运算的两个操作数为整数。(3)运算符的两侧数据类型不同,先自动进行类型转换,使二 者具有同一种类型,然后进行运算。,赋值运算符与表达式,赋值运算符含义是将一个数据赋给一个变量,三种赋值形式:,(1)简单赋值,变量名=表达式,a=c+d,赋值表达式左边必须是变量,而不能是常量或者表达式,右边是合法的C语言表达式。例:i+3=i a*b=c*8 5=x 错误,赋值表达式中的“表达式”,又可以是一个赋值表达式

8、,(2)多重赋值,变量1=变量2=变量n=表达式,等价于:变量1=(变量2=(=(变量n=表达式),a=b=7+1,赋值运算符与表达式,(3)复合赋值,变量 复合赋值符表达式,等价于:变量=变量 赋值符 表达式,在赋值符“=”前加上某些运算符,可以构成复合赋值运算符,复合赋值运算符可以构成赋值表达式 C语言规定可以使用10种复合赋值运算符,+=、-=、*=、/=、%/、=、|=、=、&=,赋值运算符与表达式,赋值运算符与表达式,例:已知变量a=3,求分别执行下列语句后,变量a的值分别是多少 a+=a-=a*a;a+=a-=a*=a;,常见错误:没有将复合赋值运算符右侧的表达式作为一个整体参与运

9、算,例:n*=m+1,n=n*m+1(错),n=n*(m+1)(对),增1和减1运算符,说明:,自增、自减运算符+-作用:使变量值加1或减1 种类:前置+i,-i(在使用i之前,先使i的值加(减)1)后置 i+,i-(先使用i值,再使i的值加(减)1),增1和减1结合方向:自右向左,增1和减1都是单目运算符,只需一个操作数,操作数只能是变量,不能是常量和表达式。如:5+,(a+b)+,增1和减1运算符,+或-作为前缀或后缀运算符使用时,对变量而言,结果是一样的,但对于表达式而言,结果不一样。,设a=5(1)b=+a(2)b=a-(3)b=-a(4)b=a+,a=6,b=6a=4,b=5a=4,

10、b=4a=6,b=5,例 j=3;k=+j;j=3;k=j+;a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/c=20,a=4,/c=15,a=4,例:若n=3,则执行完m=-n+后,m,n分别是多少,m=-(n+),例:j=+i-2,等价于:i=i+1;j=i-2;,j=i+-2,等价于:j=i-2;i=i+1;,增1和减1运算符,逗号运算符和逗号表达式,逗号运算符:,作用:连接两个表达式 优先级:所有运算符中优先级最低 结合方向:从左向右 形式:表达式1,表达式2,表达式n,逗号表达式的值:等于表达式n的值求解过程:先求表达式1,

11、再求表达式2,依次求下去,直到求出表达式n,整个逗号表达式的值就是表达式n的值,例 a=3*5,a*4 a=3*5,a*4,a+5例 x=(a=3,6*3),/a=15,表达式值60,/a=15,表达式值20,/赋值表达式,表达式值18,x=18,注意:并不是任何地方出现的逗号,都是逗号运算符。很多情况下,逗号仅用作分隔符。,逗号运算符和逗号表达式,关系运算符与表达式,关系运算:比较运算,比较两个操作数,看是否满足给定的关系。用于简单的条件判断。,关系运算符与表达式,例:(1)3.24=2.98,关系运算结果:非0,表示真。0,表示假。,0,(2)5!=3+1,1,关系运算符的优先级低于算数运

12、算符,高于赋值运算符,用关系运算符将两个表达式(算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子,称为关系表达式。,例:a=1+23-1,等价于:a=(1+2)(3-1),关系运算符与表达式,例:,0 0,2=32=3=5 z=3+1=2+3-1=5+6*2,等价于z=(3+1)=(2+3-1)=(5+6*2),z=4=4=17,z=4=1,z=0,关系运算符中=、!=优先级低,算数运算符(1)关系运算符(2)赋值运算符(3),关系运算符与表达式,常见错误:(1)误认为关系运算符优先级相同。(2)关系运算符的表达形式写错。例:!=!(符号写反)=(无空格)=(关系运算

13、和赋值运算混淆,两者含义不同)(3)误以为语法上合法的关系表达式在逻辑上一定是正确的。例:若a=3,b=2,c=1,则abc。,ab,逻辑运算符与表达式,逻辑运算也成布尔运算,用于复杂的条件判断,逻辑运算真值表(表征逻辑事件输入和输出之间全部可能状态的表格),(1)&两个操作数都为真时,结果为真。(2)|只要有一个操作数为真,结果为真。,例如:若a=3,b=2,c=1,则abc(ab)&(bc),逻辑运算符与表达式,在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。&:若第一个操作数为0时,则第二个操作数不在计算。|:若第一个操作数为非0,则第二个操作数不在计算。,例:a=0;b=1;c

14、=2;d=a+,运算结果:d=0,a=1,b=1,c=2,d=(a+),例:a=0;b=1;c=2;d=a+|b+|-c;,运算结果:d=1,a=1,b=2,c=2,d=(a+)|(b+)|(-c);,条件运算符与条件表达式,有两个符号:?:,它与三个操作数组成三元运算。,一般形式:?:,求值规则和表达式的值:,例:,int max,a=5;b=3;,max=ab?a:b,优先级:逻辑 条件 赋值,结果:max=5,a=5,b=3,位运算符与表达式,位运算真值表,左移位xn,把x的每一位向右移n位,左边空位补零。,从一端移走的不移入另一端,移出的位信息丢失,运算量只能是整型或字符型的数据,不能

15、为实型数据。,位运算符与表达式,“按位与”运算符()参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。即:000,010,100,111,例:35并不等于8,应该是按位与运算:,注意:如果参加&运算的是负数(如-3&-5),则要以补码形式表示为二进制数,然后再按位进行“与”运算。,按位与的用途:,清零,若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合以下条件:原来的数中为的位,新数中相应位为0。然后使二者进行运算,即可达到清零目的。,取一个数中某些指定位,如有一个整数(2个字节),想要取其中的低字节,只需

16、将与8个1按位与即可。,“按位或”运算符(|),两个相应的二进制位中只要有一个为1,该位的结果值为1。即:0|00,0|11,1|01,1|11,例:060|017,将八进制数60与八进制数17进行按位或运算。,应用:按位或运算常用来对一个数据的某些位定值为。例如:如果想使一个数的低4位改为1,只需将与017进行按位或运算即可。,“异或”运算符(),异或运算符也称XOR运算符。它的规则是:若参加运算的两个二进制位同号则结果为0(假)异号则结果为1(真),即:00=0,01=1,10=1,11=0,即:071052=023(八进制数),例:,运算符应用:,使特定位翻转,设有01111010,想使

17、其低4位翻转,即1变为0,0变为1。可以将它与00001111行运算,即:,运算结果的低4位正好是原数低4位的翻转。可见,要使哪几位翻转就将与其进行运算的该几位置为1即可。,与0相,保留原值,因为原数中的与0进行运算得,00得0,故保留原数。,例如:01200=012,交换两个值,例如:3,4。想将和的值互换,可以用以下赋值语句实现:ab;ba;ab;,011()100 111(ab的结果,a已变成7)()100 011(ba的结果,b已变成3)()111 100(ab的结果,a已变成4),“取反”运算符(),是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,将1变0。例如,02

18、5是对八进制数25(即二进制数00010101)按位求反。11101010,作用:加密处理,初始字节:00000101一次求反后:11111010二次求反后:00000101,左移运算符(),左移运算符是用来将一个数的各二进制位全部左移若干位。其右边空出的位用0填补,高位左移溢出则舍弃该高位。,例如:a=2 将的二进制数左移2位,右补0。若15,即二进制数00001111,左移2位得00111100,(十进制数60),高位左移后溢出,舍弃。,右移运算符(),右移运算符是a2表示将a的各二进制位右移2位0。,例:a2 a=017时,a的值用二进制形式表示为00001111,舍弃低2位11:a2=

19、00000011,右移一位相当于除以2 右移n位相当于除以2n。,在右移时,需要注意符号位问题:对无符号数,右移时左边高位移入0;对于有符号的值,-如果原来符号位为0(该数为正),则左边也是移入0。-如果符号位原来为1(即负数),则左边移入0还是1,要取决于所用的计算机系统。有的系统移入0,有的系统移入1。移入0的称为“逻辑右移”,即简单右移;移入1的称为“算术右移”。,常用运算符优先级和结合性,用括号来控制运算顺序更方便直观减小出错概率,习题:,1.表达式!x|a=b等效于,2.设有语句inta=3;则执行了语句a+=a-=a*=a;后,变量a的值是,3.解逗号表达式x=a=3,6*a后,表达式值、x、a的值依次为4.如下所示,执行以下程序段后,变量a,b,c的值分别是 int x=10,y=9;int a,b,c;a=(-x=y+)?-x:+y;b=x+;c=y;,结果:(1)(!x)|(a=b)(2)0(3)18,3,3(4)a=8,b=8,c=10,已知inta=12,n=5;则:,课后习题P43,习题3.2,#include#include/调用数学函数加此行main()int x,b0,b1,b2,y;printf(“Input x:”);scanf(“%d”,运行结果:Input x=-123y=321,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号