单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,内容摘要:,1,,变量赋初值,2,,掌握,C,语言中的各种运算符,3,,掌握运算符的优先级与结合性,教学重点:,C,语言中各种运算符的使用,教学难点:,混合表达式中运算符的运算顺序,运算符与表达式,内容摘要:1,变量赋初值2,掌握C语言中的各种运算符3,掌握,1,2.6,变量赋初值,程序中常需要对一些变量预先设置初值。,C,语言允许在定义变量时对变量赋初值,-,变量的初始化。,int a=3,;,/*,指定,a,为整型变量,初值为,3*/,float f=3.56,;,/*,指定,f,为实型变量,初值为,3.56*/,char c=a,;,/*,指定,c,为字符变量,初值为,a*/,1.,可以对定义变量的一部分初始化,如:,int a,,,b,,,c=5;,2.,如果对几个变量赋以同一个初值,不能写成:,int a=b=c=3;,而,应写成,:,int a=3,b=3,c=3;,3.,初始化不是在编译阶段完成的,而是在程序运行时,执行函数时赋初值的,相当于有一个赋值语句。例如:,int a=3;,相当于:,int a;,a=3;,2.6 变量赋初值程序中常需要对一些变量预先设置初值。C,2,2.7,运算符和表达式,C,的运算符有以下几类,1,算术运算符 (,+-*/%),2,赋值运算符 (,=,及其扩展赋值运算符),3,.,逗号运算符 (,),4,关系运算符 (,=|,&),7,条件运算符 (,?:,),8,其它,2.7.1 C,语言运算符,2.7 运算符和表达式C的运算符有以下几类 1算术运,3,2,、,学习运算符应注意:,运算符功能,与运算量关系,要求运算量个数,要求运算量类型,运算符优先级别,结合方向,运算,结果的类型,2.7,运算符和表达式,2.7.1 C,语言运算符,2、学习运算符应注意:2.7 运算符和表达式2.7.1 C,4,2.7,运算符和表达式,C,语言允许使用以下类型的表达式,2.7.2 C,语言表达式类型,(,1,)赋值表达式,如:,a=1,(,6,)逗号表达式,如:,a=1,b=2,c=3,(,2,)算术表达式,如:,1*2+3/4.5,(,3,)关系表达式,如:,47,(,4,)逻辑表达式,如:,84&ab?a:b,2.7 运算符和表达式C语言允许使用以下类型的表达式2.7,5,2.7,运算符和表达式,2.7.3,表达式的求值规则,(,1,)按运算符的优先级别高低次序执行。,(,2,)如果运算对象两侧优先级别相同,则按规定的“结合方向”处理。,如:算术运算符的结合方向为“从左至右”,赋值运算符的结合方向为“从右至左”,2.7 运算符和表达式2.7.3 表达式的求值规则(1)按,6,1.,基本的算术运算符,+,(加法运算符,或正值运算符。如,3,5,、,3,),-,(减法运算符,或负值运算符,如,5-2,、,-3,),*(乘法运算符。如,3*5,),(除法运算符。如,5,3,),(模运算符,或称求余运算符,要求两侧均为整型数据,,如,7,4,的值为,3,)。,说明,1.,两个整数相除结果为整数。,2.,如果参加运算的两个数中有一个数为实数,则结果是,double,型。,2.7,运算符和表达式,2.7.4,算术运算符和算术表达式,1.基本的算术运算符说明1.两个整数相除结果为整数,7,2.,算术表达式和运算符的优先级与结合性,用算术运算符和括号将运算对象(也称操作数)连接起来的、符合,C,语法规则的式子,称,C,算术表达式,。运算对象包括常量、变量、函数等。例如,下面是一个合法的,C,算术表达式:,a*b/c-1.5+a,在表达式求值时:,先按运算符的优先级别高低次序执行,同一优先级的运算符,运算次序由结合方向决定,C,语言规定了运算符的优先级和结合性。,算术运算符的结合方向为,“,自左至右,”,,即先左后右,.,单目运算符、三目运算符、赋值运算符的结合方向,为“,自右至左,”,,即先右后左,.,2.7,运算符和表达式,2.7.4,算术运算符和算术表达式,2.算术表达式和运算符的优先级与结合性用算术运算符和括号将运,8,运算符的优先级,(,由高到低,),附录,B,初等运算符,()-.,单目运算符,算术运算符,(,先乘除,后加减,),关系运算符,逻辑运算符(不包括,!,),条件运算符,赋值运算符,逗号运算符,2.7,运算符和表达式,运算符的优先级(由高到低)附录B初等运算符(),9,3.,强制类型转换运算符,可以利用强制类型转换运算符将一个表达式转换成所需类型。,一般形式,:,(,类型名,)(,表达式,),例如:,(double)a,(将,a,的值转换成,double,类型),(int)(x+y),(将,x+y,的值转换成整型),(float)(5,3),(将,5,3,的值转换成,float,型),强制类型转换时,得到一个所需类型的中间量,原来变量的类型未发生变化。,main(),float x,;,int i;,x=3.6;,i=(int)x;,printf,(,x=%f,i=%dx,i);,运行结果如下,:,x=3.600000,i=3,2.7,运算符和表达式,3.强制类型转换运算符可以利用强制类型转换运算符将一个表达式,10,4,,自增、自减运算符,+-,作用:使变量值加,1,或减,1,种类:,前置,+i,-i (,在使用,i,之前,先使,i,的值加,(,减,)1,),后置,i+,i-(,先使用,i,值,再使,i,的值加,(,减,)1,),例,j=3;k=+j;,j=3;k=j+;,j=3;printf(,“,%d,”,+j);,j=3;printf(,“,%d,”,j+);,a=3;b=5;c=(+a)*b;,a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,2.7,运算符和表达式,说明,:,+-不能用于常量和表达式,如,5+,(,a+b)+,+-,结合方向:,自右向左,4,自增、自减运算符+-例 j=3;k=+j,11,例,自增、自减运算符的用法与运算规则示例。,/*,程序功能:自增、自减运算符的用法与运算规则示例*,/,main(),int x=6,y;,printf(x=%dn,x);/*,输出,x,的初值*,/,y=+x;/*,前置运算*,/,printf(y=+x:x=%d,y=%dn,x,y);,y=x-;/*,后置运算*,/,printf(y=x-:x=%d,y=%dn,x,y);,程序运行结果:,x=6,y=+x:x=7,y=7,y=x-:x=6,y=7,程序演示,2.7,运算符和表达式,例 自增、自减运算符的用法与运算规则示例。2.7 运,12,1.,赋值运算符(,=,),作用,:,将一个数据赋给一个变量,也可以将一个表达式的值,赋给一个变量。,如:,a=3,2.,类型转换,(1),将实型数据,(,包括单、双精度,),赋给整型变量时,舍弃实数的小数部分。,(2),将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。,(3),将一个,double,型数据赋给一个,float,变量时,截取其前面的,7,位有效数字,存放到,float,变量的存储单元中,(32,位,),。但应注意数值范围不能溢出。,(4).,其它转换规则参考教材,2.7,运算符和表达式,2.7.5,赋值运算符和赋值表达式,1.赋值运算符(=)作用:将一个数据赋给一个变量,也可以将一,13,3,、赋值运算符,简单赋值运算符,符号:,=,格式:,变量标识符,=,表达式,作用:将一个数据(常量或表达式)赋给一个变量,复合赋值运算符,在,赋值运算符,“,=,”,之前加上其他预算符号,可以构成复合的预算符。,例如,可以有:,a+=3,a=a+3,x*=y+8,x=x*(y+8),x%=3,x=x%3,2.7.5,赋值运算符和赋值表达式,3、赋值运算符复合赋值运算符a+=3a=a+3x*=y+8x,14,定义:,由赋值运算符将一个变量和一个表达式连接起来的式子。,形式:,求解过程,:,先求赋值运算符右侧“表达式”的值,然后赋给赋值运算符左侧的变量。,例如:,a=b=c=6,;,a=(b=4)+(c=6),;(表达式值为,10,,,a,值为,10,,,b,等于,4,,,c,等于,6,),4,、,赋值表达式,2.7.5,赋值运算符和赋值表达式,说明:,1,、赋值运算后,左边变量的值被右边表达式的值替换;,2,、若右边表达式的值的类型与左边变量类型不一致,则以左边变量的类型为准,将表达式的类型转换为左边变量的类型。,3,、赋值运算符的优先级仅高于逗号运算符。结合方向为“从右向左”。,4、赋值表达式2.7.5 赋值运算符和赋值表达式说明:,15,形式:,表达式,1,表达式,2,表达式,n,结合性,:,从左向右,优先级,:,所有运算符中优先级最低,逗号表达式,的值:等于表达式,n,的值,求解过程:先求表达式,1,再求表达式,2,依次求下去,直到求出表达式,n,整个逗号表达式的值就是表达式,n,的值,例,a=3*5,a*4,a=3*5,a*4,a+5,例,x=(a=3,6*3),x=a=3,6*a,例,a=1;b=2;c=3;,printf(“%d,%d,%d”,a,b,c);,printf(“%d,%d,%d”,(a,b,c),b,c);,/a=15,表达式值60,/a=15,表达式值20,/,赋值表达式,表达式值18,,x=18,/,逗号表达式,表达式值18,x=3,/1,2,3,/3,2,3,2.7.6,逗号运算符和逗号表达式,例 a=3*5,a*4/a=15,表达式值60/a=,16,求解过程分析:,自左至右,依次计算各表达式的值,“表达式,n”,的值即为整个逗号表达式的值。,例如,逗号表达式“,a=3*5,a*4”,的值,=60,:先求解,a=3*5,,得,a=15,;再求,a*4=60,,所以逗号表达式的值,=60,。,又例如,逗号表达式“,(a=3*5,a*4),a+5”,的值,=20,:先求解,a=3*5,,得,a=15,;再求,a*4=60,;最后求解,a+5=20,,所以逗号表达式的值,=20,。,注意:,并不是任何地方出现的逗号,都是逗号运算符。很多情况下,逗号仅用作分隔符。,2.7.6,逗号运算符和逗号表达式,求解过程分析:2.7.6 逗号运算符和逗号表达式,17,2.7.7,关系运算符及关系表达式,1,,关系运算符及其优先次序,在,C,语言中提供,6,种关系运算符,关系运算符,含义,优先级与结合方向,小于,优先级相同(高)结合方向(从左向右),大于,=,大于或等于,=,等于,优先级相同(低)结合方向(从左向右),!=,不等于,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符,2.7.7 关系运算符及关系表达式1,关系运算符及其优先次,18,2.7.7,关系运算符及关系表达式,2,,关系表达式,用关系运算符将两个表达式(算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子,称为关系表达式。,如:,a b,,,(A=3)(B=5),A B,这些都是合法的关系表达式。,在,C,语言中关系表达式的值是一个逻辑值,即“真”或“假”。,C,语言中以“,1”,代表“真”,以“,0”,代表“假”。,例:若,a=3,b=2,c=1,则:,a b,的值为“真”,此表达式的值为,1,。,(ab)=c,的值为“真”,表达式的值为,1,。(此处,ab,的值为,1,,,1=c,的值当然为,1,),f=abc f,的值为,0,2.7.7 关系运算符及关系表达式2,关系表达式用关系运算,19,小结,变量赋初值,运算符与表达式,算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,关系运算符与关系表达式,运算符与表达式,小结变量赋初值运算符与表达式算术运算符与算术表达式赋值运算符,20,