c语言运算符和表达式课堂_第1页
c语言运算符和表达式课堂_第2页
c语言运算符和表达式课堂_第3页
c语言运算符和表达式课堂_第4页
c语言运算符和表达式课堂_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

1、1,内容回顾,单个字符的输入和输出函数,字符输出函数,putchar(c,字符输入函数,getchar(,格式化输入,scanf,输出,printf,函数的用法,整型数据的输入输出,d,%o,%x,%u,实型数据的输入输出,f,%e,%lf,%le,字符型数据的输入输出,c,常用函数,包含头文件,函数原型,LOGO,第三章,3,本章内容,3.1,算术表达式,3.2,赋值表达式,3.3,逻辑表达式,3.4,其他表达式,3.5,多种类型混合运算,4,运算符简介,C,语言中,数据是程序处理的对象,运算是,对数据进行加工的过程,体现数据之间的各,种不同运算关系的符号就称为,运算符,C,语言中,除了控制

2、语句和输入输出以外的,几乎所有的基本操作都是用运算符来实现的,例如:赋值操作的功能,在,C,语言中是用赋,值运算符,来实现的,5,C,语言的运算符按照其功能分为以下,13,类,算术运算符,/ % +,下标运算符,关系运算符,分量运算符,逻辑运算符,强制类型转换运算符,类型,赋值运算符,及其扩展赋值运算符,求字节数运算,sizeof,条件运算符,位运算符,逗号运算符,指针运算符,其他运算符,如函数调用运算符(,6,学习运算符,主要掌握以下,4,点,运算符操作的,数据的类型,不同的运算符操,作的数据的类型不一定相同;而且每种运算,符操作的数据的类型是相对固定的,运算符操作的,数据的个数,不同的运算

3、符操,作的数据的个数不一定相同;根据运算符连,接运算对象的个数,一般分为单目运算符,如,双目运算符(如,/ ,和,三目运算符(如?:,7,运算符在整个运算符系统中的,优先级,优,先级是指在运算对象的左右都有运算符时,运算的先后次序,运算对象先做优先级高,的运算。如,比,优先级高,运算符操作的数据的,结合性,运算符的结,合性规定了在表达式求解过程中,若运算,对象其左右运算符优先级相同时的,运算方,向,结合性有两种:左结合(从左到右计,算)和右结合(从右到左计算,8,表达式,用,运算符,将,运算对象,常量、变量、函数,等,连接而成的式子,如,a*b/c-1.5+a,表达式使用时应注意,表达式的值,

4、及,类型,a,不同类型的运算符所表示的表达式类型也是,不同的。表达式一般有,算术表达式,赋值表达,式,关系表达式,逻辑表达式,逗号表达式,条件表达式,等表达式,b,表达式虽然有各种类型,但它总是,有确定的,值,的,根据运算符的,优先级,和,结合性,进行计算,9,表达式书写的一般规则,表达式必须写在同一行上,只能使用,圆括号,且左右括号个数要相同,有多层括号时内层,括号中的运算优先,如,写作,1.0/2*(a*x+(a+x)/4/x,x,x,a,ax,4,2,1,2,2,y,x,2,y,例,写出下列代数式的,C,算术表达式,1+(4+x,1/3,x,1+pow( (4+x),1.0/3) )*x

5、,y/(2*sqrt(x*x+y*y),10,3.1,算术表达式,一,基本算术运算符,加法运算或正号运算符,减法运算或负号运算符,乘法运算符,除法运算符,求余运算符,或称模运算符,自增运算符,自减运算符,3.1.1,算术运算符,11,算术运算符的优先级和结合性,单目,双目,双目,高,低,从右向左,从左向右,如,5+3%2,相当于,5)+(3%2,结果为,4,优先级,3*5%3,相当于,3*5)%3,结果为,0,结合性,12,注意,1),与数学中的运算顺序相似,先,乘除,后加减,从左到右,2,求余运算符,要求两个运算对象均为,整型,数据,余数,符号与,左边,的运算对象符号相同,如,2%3,为,2

6、,9%5,为,4,9%-5,为,4,3,运算符的,右操作数,不可以为,0,4,字符类型的数据以该字符的,ASCII,码,参加运,算,如,a+2,相当于,97+2,13,5,运算符,操作数的类型不同,功能不同,当两个操作数均为整型时,其结果的类型也为整型,a,若除数和被除数都为正值,结果为正,直接舍去小数部,分,如,5/2,的结果为,2,若两个操作数中有一个为实数,则结果是,double,型,因为所有实数都按,double,型进行运算,如,5.0/2,的结果,2.5,b,若除数或被除数中有一个为负值,则舍入的方向是不固定的,如,5/3=,多数机器采取“向零取整”的方,法,即,5/3=1,5/3=

7、-1,取整后向零靠,拢,14,整除和求余数的特殊用处,123 % 10,的结果是,3,12 % 10,的结果是,2,123/10,结果是,12,12/10,的结果是,1,通过整除和求余数交叉应用,可以分解一个整数,这个技巧以后我们要经常使用,小程序,输入一个三位数的整数,请分离出各位,十位,百位,并输出,15,二)自增、自减运算符,运算符号,自增运算符,自减运算符,功能,使变量的值增,1,或减,1,用途:常用于循环语句中使循环变量自动加或减,也用于指针变量,使指针指向下或上一个地址,操作数:只能是,变量,不能是常量、表达式和函数,如,i+, +i, i-, -i,是正确的,8,sin(4,x+

8、y,是错误的,结合性,自增(减)运算符的结合性是,右结合,优先级:单目运算符,优先级高于算术运算符,低于括号,类运算符,16,作用于变量的形式有两种,前缀方式,prefix,运算符,变量,如,i,i,后缀方式,postfix,变量,运算符,如,i,i,在使用之前,先使,的值加(减,在使用之后,再使,的值加(减,17,自增、自减运算取变量的值作为表达式的值,如,设,n=10,n,1)n=n+1=11,2,取,n,值,11,作为表达式,的值,n,1,取,n,值,10,作为表达式,n,的值,2)n=n+1=11,例子,int,i,k,i=2,k=+i,i=2,k=i,i=3,i=3,k=3,k=2,

9、k=i,i=i+1,i=i+1,k=i,18,例,3.1,include,void main(,int a=2,b=2,x,y,x=-a+2;,前缀运算,y=b+-1;,后缀运算,牰湩晴尨?搥礠層湜,printf(a=%d b=%dn,a,b,运行结果,x,3 y=1,a=1 b=3,a=a-1,x=a+2,y=b-1,b=b+1,19,连续的,表示前两个是对,a,的自减,最后的,表示减法运算,例,3.2,include,void main(,int a=2,b=2,c,c=+a+b-;,变量,a,为前缀运算,b,为后缀运算,printf(a=%d,b=%d,c=%dn,a,b,c,a=b=2

10、,c=-a-b,printf(a=%d,b=%d,c=%dn,a,b,c,a=b=2,printf(a=%dn,a,printf(=%dn,+b,c=a+b; / a,b,增,1,后的值参加运算,printf(“c=%d,n”,c,a=a+1, c=a+b, b=b-1,c=-(a-)-b,c=-a-b, a=a-1,c= (a+1)+(b+1,b=b+1,输出,a=3,b=1, c=5,输出,a=1,b=2, c=-4,输出,c=6,输出,a=2,输出,b=3,说明,C,语言处理,时是从左到右取最,多个数的符号作为,一个合法的运算符,20,3.1.2,算术表达式,用算术运算符和括号将运算对象

11、,也称操作数,连接起来的、符合语法规则的式子,称为,算术表达式。运算对象包括常量、变量、函数,等,例如,5,a,是一个合法的表达式,21,3.2.1,赋值运算符,1,运算符,2,作用:将一个数据或表达式的值赋给一个变量,如,表示把常量,3,赋给变量,a,y=a*sin(z),表示把表达式,a*sin(z,的结果求出来再赋给一个变量,y,注:赋值运算符与数学中的等号不同,赋值运算符求解,后能够得到一个运算结果,3,赋值运算符的优先级和结合性,优先级较低,结合性是从右向左,如,x=y=3,3.2,赋值表达式,22,3.2.2,赋值表达式,变量,表达式,计算赋值运算符右侧,表达式,的值,将赋值运算符

12、右侧,表达式,的值赋给左侧的,变量,将赋值运算符左侧的,变量,的值作为表达式的值,例,n,2,n,n+1,23,对赋值表达式的说明,a,赋值运算符,左侧只能是变量,不可以是表达,式、函数或常变量也不能作为左值,b,赋值表达式中右边的,表达式又可以是赋值表,达式,例,a=b=7,赋值表达式中含有多个赋值运算符时,从右向,左依次赋值,c,赋值表达式可以以表达式形式出现在某些语,句(如输出语句、循环语句等)中,如,牰湩晴尨搥,a=b,24,3.2.3,赋值语句,变量,表达式,功能:先计算表达式的值,然后将值赋给,变量,例,int a,b,c,float x, y,x=sqrt(7,y=x+4,a=b

13、=c=6,25,3.2.4,复合赋值运算符,双目运算符与赋值运算符的合成或简化,称为,复合赋值运算符,语言规定可以使用种复合赋值运算符,复合赋值运算符的优先级和结合性同赋值运算符,26,变量,双目运算符,表达式,复合赋值运算符的,功能,先将变量与赋值运算,符后面的表达式进行一次双目运算符所指定的,运算,然后再将运算结果赋给变量,例如,等价于,等价于,等价于,以“”为例来说明,它相当于使进行一次自加,的操作。即先使加,再赋给,27,注意,如果,右边是包含若干项的表达式,则相,当于它有括号,如,x %= y+3,x %= (y+3,_,x = x %(y+3,不要错写成,x=x%y+3,复合赋值运

14、算表达式,变量,双目运算符,表达式,是个整体,步骤,1,左边变量的当前值与右边,整个表达,式,进行相应运算,2,把,1,的结果赋给左边的变量,3,赋值表达式的值是左边变量的值,28,例,3.3,赋值运算符的使用,include,void main(,int a=5, b=5,c=5,a-=2,b*=a+3,c/=a-1,printf(a=%d,b=%d,c=%dn,a,b,c,结果,a=3,b=30,c=2,a=a-2,b=b*(a+3,c=c/(a-1,29,3.3,逻辑表达式,关系运算符是用来比较两个运算对象大小,的,运算结果是成立或不成立,如果成立,则结果为逻辑值“真”,用整,数,1,来

15、表示;如,5=5,如果不成立,则结果为逻辑值假”,用整,数,0,来表示。如,55,3.3.1,关系运算符及关系表达式,1,关系运算符,30,C,语言提供的,6,种关系运算符,3.3,逻辑表达式,大于,名称,小于,等于,大于等于,运算符,ab,例子,ab,a=b,a=b,a=b,小于等于,a!=b,不等于,31,2,关系运算符的优先级,关系运算符的优先级低于算术运算符,高于赋值运算符,的优先级相同,的优先级相同,关系运算符的结合性,左结合,如,int x=7,计算下面关系表达式的值,x5!=1,1=15,高,低,32,3,关系表达式,用关系运算符将两个表达式连结而成的式子,如,ab,a+bb+c

16、,a=3)(b=5,ab,ab)(bc,等,C,语言中并没有,bool,这个数据类型或说逻辑型数,据,故表示关系运算结果时,以,1,代表真,以,0,代表,假。在实际运行过程中,非零值为真,零为假,33,如,1,若有,int a=3,b=2,c=1,d,则,d=(a=3)(b=4,结果为,0,d=abc,结果为,0,d=ac=c,结果为,1,2,若,int a=5, b=3,printf(%d, ab,34,例,3.4,分析下面程序的运行结果,include,void main(,float x,y=0.3,y=y*11,x=3+0.3,if(x= =y) printf(ok,x= =y,els

17、e printf( o,x!=y,说明,两个实数一般不作相等或不等比,较,因为实数表示或在计算过程,中有时存在误差,结果,no,x!=y,35,字符数据可以进行大小比较。比较时,用字符的,ASCII,码进行比较,如,A B,Z a,字母,AZ ASCII: 6590,字母,az ASCII: 97122,36,例,3.5,include,void main(,int a,b,c,scanf(%d%d%d,输入,2 3 4,a=b!=c;,将关系表达式的值赋给,a,printf(a=%d,b=%d,c=%dn,a,b,c,a=(b=c+*3); /a,与,b,进行相等比较,printf(a=%d

18、,b=%d,c=%dn,a,b,c,a=bc2;,将关系表达式的值赋给,a,printf(a=%d,b=%d,c=%dn,a,b,c,a=1,b=3,c=4,a=1,b=12,c=5,a=0,b=12,c=5,37,3.3.2,逻辑运算符及逻辑表达式,1,逻辑运算符,逻辑与,表示并且,逻辑或,表示或者,逻辑非,表示相反,例,a,例,a char c=A,float x=3.6,y=-4.4,1,ab,c,A,xy,2,a-b / m,取,a,b,中大数,m=mc?m:c; / m,取,c,m,中最大数,n=ab?a:b; / n,取,a,b,中小数,n=nc?n:c; / n,取,c,n,中最

19、小数,k=a+b+c,m,n;,三个数的和减去最大、最小数,得中间数,printf(%d %d %dn,m,k,n,输入,5 -8 7,输出,8,53,3.4,逗号运算符及逗号表达式,1,逗号运算符,常用,在,for,语句中,2,逗号表达式,表达式,1,表达式,2,表达式,n,功能,自左至右,计算各表达式的值,并以,最后一,个表达式的值,作为逗号表达式的值,如,a=2+4,3*5,a,的值为,整个表达式,的值为,54,优先级和结合性,逗号运算符是所有运算符中级别最低的,运算,方向:从左向右,例,3,赋值表达式,将,一个逗号表达式,的值赋给,的值等于,逗号表达式,包括,一个赋值表达式和,一个算术

20、表达式,的值为,整个,逗号表达式的值为,18,55,注意,并不是任何地方出现的逗号都是作为逗号运算符,例如函数参数也是用逗号来间隔的,如,printf(“%d,%d,%d”,a,b,c,,,并不是一个逗,号表达式,它,是,printf,函数的,3,个参数,printf(“%d,%d,%d”,(a,b,c),b,c,”是一个,逗号表达式,它的值等于,的值,56,3.5,多种类型混合运算,C,语言中,允许不同类型的数据进行混合运,算,包括整型,int,short,long,实型,float,double,字符型,char,数据都,可以进行混合运算,例如,10+a+1,5-8765,1234 *b,

21、是合法的,在进行运算时,不同类型的数据要先转换,成同一类型,然后再运算求值,57,表达式中数据类型的转换可分为两种,数据类型的隐式转换,自动转换,数据类型的强制转换,类型转换在,C,中也属于一种运算,58,1,自动转换,在进行算术运算过程中,两个参加运算的操,作数,在计算前先自动进行类型转换,水平方向:自动,垂直方向:低,高,高,double,float,unsigned,long,long,unsigned,unsigned,short,低,int,char,short,3.5.1,算术运算中的类型转换,59,例,A,12,65,77,规则,1,凡,char, short,型一律自动转换成,

22、int,型,float,一律转换成,double,型,转换后若两操作,数类型相同,作算术运算,其结果类型与转换,后的类型相同,1.5f*4.2,1.5f,转换为,double,型,计算结果,6.3,为,double,型,60,规则,2,相同类型的操作数(除,char, short,float,型,外)作算术运算的结果为同一类型,例:两个整数的除法其结果一定是整数,5/2,结果为,2,5/2,结果为,2,61,规则,3,不同类型的操作数或经规则,1,转换后仍然是,不同类型,则低级别的自动转换成高级别的再,运算,其结果类型与转换后的类型相同,char shortintunsigned longun

23、signed,longfloatdouble,62,例,3.11 2.0f+5/2*3,2,6,2.0 6.0,8.0,高,double,float,unsigned,long,long,unsigned,unsigned,short,低,int,char,short,规则,规则,规则,规则,63,可以利用强制类型转换运算符将一个表达式,转换成所需类型,类型名,表达式,强制类型转换运算符优先级同,高于,算术运算符,从右向左,如,double)3,int)3.8,double)(5/2,double)5/2,3.0,3,2.0,2.5,2,强制类型转换,64,例,12,include,void main(,float,int i,x=3.6,i=(int)x,牰湩晴尨?春,搥屜屮,x,i,说明:强制类型转换,对被转换变量本身没有,影响,既不改变变量的类型,也不改变变量值的,类型,只生成一个中间计算结果,运行结果,x,3.600000,i=3,说明,有两种类型转换,一种是在,运算时不必用户指定,系统自动进,行的类型转换。第二种是强制类型,转换。当自动类型转换不能实现目

温馨提示

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

评论

0/150

提交评论