资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第3章 运算符与表达式,任课教师:,张 盈,教案制作:张 盈,1,本次课主要内容:,C运算符简介,算术运算,赋值运算,逗号运算符及逗号表达式,长度运算符,强制类型转换,运算符的优先级和运算顺序,2,3.1 C运算符简介,(1)算术运算符:,、*、/、,(2)关系运算符:、=、|、&,(7)条件运算符:?:,3,C运算符简介(续),(8)指针运算符:*、&,(9)强制类型转换运算符:(类型),(10)下标运算符:,(11)求字节数运算符:sizeof,(12)分量运算符:,、,-,(13)其他运算符:如函数调用运算符(),4,3.2 算术运算,算术运算符,双目运算符:有两个操作数参与运算,(加)、(减)、*(乘)、/(除)、(求余),单目运算符:有一个操作数参与运算,(正)、(负)、(自增)、(自减),算术表达式,注意:C语言中不含乘方运算符,不能直接进行乘方运算!,5,除法运算符“/,注意下面的表达式:,1/3*3,1*3/3,结果一样?,说明:,两个整数相除,结果为整数;两个实数相除,结果为实数。,阅读程序:,main(),int a=22;,int b=3;,printf(“%dn,a/b);,运行结果为7,而不是,7.333333,Why?,6,求余运算符“,说明:表达式ab的运算结果为a除以b的余数,并且a、b必须为整数。,举例:,135 结果为3,28结果为2,-227结果为-1,练习:,12211 19,7,自增和自减运算符、,作用:将操作数自己增加1或者减少1。,前置(前缀):,如:i、i,后置(后缀):,如:i、i,main(),int i=3,j=4;,i+;+i;,j-;-j;,printf(“%d%dn,i,j);,结果输出:5 2,掌握,8,比较前置运算和后置运算,main(),int i=3,j,k;,j=i+;,k=+j;,printf(%d%d%dn,i,j,k);,请先阅读下面的程序:,结果输出显示:,4 4 4,过程:,i=3;3,j=i;3,i=i+1;4,j=j+1;4,k=j;4,i,j,k:4 4 4,9,自增、自减运算小结:,自增运算符和自减运算符是单目运算符,且只能用于单个变量。,当前置运算或者后置运算与其他运算结合在一个表达式中时:,前置运算:先增值后引用,后置运算:先引用后增值,“+和“-的运算结合方向是从右到左。,10,阅读下面的程序,写出运行结果:,main(),int i=2,j,k;,j=(i+)+(i+)+(i+);,k=(-i)+(-i)+(-i);,printf(“%d%d%d n,i,j,k);,Answer:,2 6 6,11,算术表达式,算术表达式是指由算术运算符、运算量、括号和函数组成,符合C语言语法规那么的式子。,算术运算符优先级:,12,括号可用于改变计算顺序,先算括号里面的表达式,得到的结果再参与括号外面的相关计算。,For Example:,-3-2*3+2/3*2,-(3-2)*(3+2)/(3*2),13,算术表达式的数据类型,算术表达式的数据类型即该表达式的值的类型。,两个同类型的运算量参加运算,其结果也是同类型的。,14,3.3 赋值运算,赋值运算符:,其结合方式为自右向左。其优先级很低,低于所有的算术运算符。,赋值表达式:由赋值运算符“将变量和表达式连接起来的式子。,形式:变量表达式,运算过程:将赋值运算符右边表达式的值赋给左边的变量。,15,For Example:,(1)a=a+1;,等价于:a+;,(2)a=b=c=2;连续赋值,等价于:a=(b=(c=2);,或者:a=2;b=2;c=2;,(3)a=2+(b=3);,等价于:b=3;a=2+3=5;,(4)a=(b=2)*(c=3);,等价于:b=2;c=3;a=2*3=6;,允许赋,值表达式中含,有另外的赋值,表达式,进行,连续赋值,16,赋值运算的本卷须知:,“是一个双目运算符,需要左右两个变量。,“是赋值运算符,不等于等号,没有相等的含义。,“左端的运算量必须是单个变量,而不能是表达式。,赋值运算中,首先使运算符左端的变量具有右端表达式的值,然后整个表达式的结果为右端表达式的值。,17,赋值运算中数值类型的转换,当赋值运算符两端的数据类型不同时,编译程序将赋值运算符右边表达式的数据类型自动,转换成左边变量的数据类型,。,18,复合的赋值运算符,复合赋值运算符:+=、-=、*=、/=、%=等。,复合赋值运算表达式的一般形式:,变量op表达式,说明:“op为其它运算符,如+、-、*、/、%等。,举例:a+=b a*=b,等同:a=a+b a=a*b,19,表达式“变量op表达式;的执行过程,步骤:,(1)求出“表达式的值;,(2)把求出的表达式的值与“变量做op运算;,(3)把第二步求出的值再赋给“变量。,例如:设x=5,y=2,求,x%=y+3,的值。,(1)y3 5,即:,x%=5,(2),x%5 0,(x=5),(3)x 0,20,复合赋值运算小结,但凡双目运算符都可以与赋值运算符一起组合成复合的赋值运算符。注意两个运算符之间不能有空格存在。,共10种复合赋值运算符:,+=、-=、*=、/=、%=、=、&=、=、|=,复合赋值运算符的结合方式为“自右向左。,21,练习:,设有int a=10;,写出下面表达式的值。,a+=a,a-=12,a*=3+a,a/=a+a,n=5,a%=n%2,a+=a-=a*=a,Answer:,20,-2,130,0,0,0,22,3.4 位运算,位运算:是指对操作数的二进制位进行的运算,包括位逻辑运算、移位运算。,位逻辑运算:可设置或屏蔽内存中某个字节的某一位。,移位运算:可对存储单元中的二进制位进行左移、右移操作。,23,位运算符(6种),说明:,(1)位运算符中,除了取反“运算以外,其余均为双目运算符。,(2)运算量只能是整型或字符型数据,其在机器内存中以二进制形式存储。,24,逗号运算符、逗号表达式,逗号运算符:“,即顺序求值运算符。,逗号表达式:用逗号把假设干独立的运算表达式结合成一个运算表达式,称为逗号表达式。,逗号表达式的一般形式:,表达式1,表达式2,表达式n,求解过程:先求“表达式1,再求“表达式2,最后求“表达式n。整个表达式的值为“表达式n的值。,25,举例:,求下面逗号表达式的值:,a=3*4,b=a+10,c=a*b,解题步骤:,求表达式,1,:,a=3*4=12,求表达式,2,:,b=a+10=22,求表达式,3,:,c=a*b=12*22=264,写结果:逗号表达式的值为,264,。,26,逗号表达式的特点,逗号表达式可以嵌套。,逗号表达式可以作为赋值运算中的表达式。,逗号运算符的结合方向是从左到右。,逗号运算符是所有运算符中级别最低的。,27,长度运算符,运算符:sizeof(),功能:取数据类型或变量的长度。,格式:,sizeof(数据类型说明符或变量名),举例:,:int a;float b;double c;,那么:sizeof(a)=2,sizeof(b)=4,sizeof(c)=8,28,混合类型表达式的类型确定规那么,两个不同类型的运算量参加运算,C编译系统自动把长度较短的类型转换为长度较长的类型,以保证不丧失精度。,混合类型计算举例:,1/3*3 与 1*3/3,2.5012,327672L,29,各数据类型混合运算的排列顺序:,30,强制类型转换,目的:弥补自动类型转换的缺乏。,一般形式:,(类型关键字)(变量名或表达式),举例:,float a=56.789;int b;b=(int)a%3;,(double)b,(float)(20%3+4),31,使用强制类型转换注意:,在进行强制类型转换时,类型关键字必须用括号括住。,在对一个表达式进行强制类型转换时,整个表达式也要用括号括住。,如:(float)(a+b),(float)a+b,在对变量和表达式进行了强制类型转换后,并不改变原变量或表达式的类型。,如:int z;float x;double y;,z=(int)(x+y);,执行后x、y的类型不变。,32,运算符的优先级和运算顺序,C,语言中的优先级从高到低分为,15,级。,运算符的一般顺序:,先运算优先级别高的,再运算优先级别低的。,对于优先级别相同的运算符,按其结合方向执行。,33,运算符的优先级和结合方向,34,优先级分级一般规律:,单目运算符优先级最高,双目次之,三目较低。,双目运算符中,算术运算符较高,关系次之,逻辑较低(!除外)。,位运算符中,移位运算高于关系运算,位逻辑运算低于关系运算。,圆括号运算符优先级最高,逗号运算符最低。,可用括号,强调或改变,运算顺序。,35,Homework,上机运行以前各章,(,包括本章,),中的程序例题,并输出正确结果!,独立完成第三章中的课后习题。,(,上机运行调试,以确定结果无误。,),36,上机运行程序请注意检查TC所在目录位置:,37,
展开阅读全文