,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,3,1,表达式,3,1,1,表达式概述,表达式是运算符(操作符)、操作数(运算对象、操作对象)和标点符号的序列,其目的是用来说明一个计算过程。例如:,a=b+c,表达式是嵌套的,例如:2+3+5*,sizeof(int)/345;,表达式根据约定、求值次序、结合性和优先级规则来进行计算的。,操作数指的是一个表达式,简单表达式包括变量、常量、函数;根据操作数的数目,将,运算符分为一元、二元和三元。,31表达式 311 表达式概述,1,3,1,表达式,3,1,2,左值和右值,左值(,left value,),是能出现在赋值表达式左边的表达式。左值表达式具有存放数据的空间,并且存放是允许的。,int a=3;/a,是变量,所以,a,时左值,const int b=4;/b,是常量,所以,b,不是左值,31表达式 312 左值和右值,2,3,1,表达式,右值(,right value,),只能出现在赋值表达式的右边。左值表达式也可作为右值表达式。,int a,b=5;,a=b;/b,是变量,所以是左值,此处/作为右值,a=8;/8,是常量,只能作右值,不能/作为左值,31表达式 右值(right value)只能出现在赋值表,3,3,1,表达式,3,1,3,优先级和结合性,所谓优先级,是指不同优先级的运算符,总是先做优先级高的操作,,C,共有16级优先级。,例如:,d=a+b*c;,所谓结合性,是指表达式中出现同等优先级的运算符是,该先做哪个操作的规定。,例如:,d=a+b-c;/,从左到右,先,a+b,,再-,c,d=a=3;/,从右到左,先,a=3,,再,d=a,31表达式 313 优先级和结合性,4,3,1,表达式,3,1,4,语句与块(复合语句),C,语言中所有的操作运算都通过表达式来实现的。由表达式组成的语句称为表达式语句,它由一个表达式后接一个分号”,;,”组成,例如:,a=b+c;,大多数表达式语句为赋值语句和函数调用 例如:,printf(“hello”);,表达式具有值,而语句是没有值的例如:,printf(“%d”,3+4),;,31表达式 314 语句与块(复合语句),5,3,1,表达式,空语句,;,复合语句是指括在一对花括号,里的语句序列。从语法上来说,块可以被认为是单个语句。,31表达式,6,3,2,算术、赋值和合并运算符,操作数,符号,含义,优先级,结合性,例子,一元,-,取负,2,从右到左,-1,,,-,I,+,不采取动作,2,从右到左,+1,,,+,x,二元,*,乘法,3,从左到右,3*,x,/,除法,3,从左到右,x/3.0,%,取余(取模),3,从左到右,k%3,+,加法,4,从左到右,x+1,x+y,-,减法,4,从左到右,x-1,3-y,算术运算符,32 算术、赋值和合并运算符 操作数符号含义优先级结合性,7,3,2,算术、赋值和合并运算符,注意:,1./,运算符可以对不同的数据类型进行不同的操作。,如:,5/2,5.0/2.0,2.%,只能对整数进行操作。,3.溢出问题,short i=42896,32 算术、赋值和合并运算符 注意:,8,3,2,算术、赋值和复合赋值运算符,算元,符号,含义,优先级,结合性,例子,二元,=,在变量中保存数值,14,从右到左,x=2.5,+=,与(,x=x+3.1,),相同,变量与一个数值相加之后的结果再次保存在变量中。,14,从右到左,x+=3.1,-=,与(,x=x-1.5,),相同,变量减去数值之后的结果再次保存在变量中。,14,从右到左,x-=1.5,*=,与(,x=x*5,),相同,相乘之后再次保存,14,从右到左,x*=5,/=,与(,x=x/2,),相同,相除之后再次保存,14,从右到左,x/=2,32 算术、赋值和复合赋值运算符 算元符号含义优先级结合,9,3,2,算术、赋值和复合赋值运算符,注意:,1.,所有这些运算符都是从右向左结合。每个左操作数必定是一个变量或者内存位置。,2.凡是二元运算符,都可以与赋值符一起组成复合赋值符。,32 算术、赋值和复合赋值运算符 注意:,10,3,2,算术、赋值和复合赋值运算符,例如:,a=b=c=5,a=5+(c=6),a=(b=4)+(c=6),a=(b=10)/(c=2),a+=a-=a*a (a,初值为2),32 算术、赋值和复合赋值运算符 例如:,11,3,3,算术类型转换,C,遇到两种不同数据类型的数值进行运算时,会将两个数做适当的类型转换,然后再进行运算。,类型转换的原则:转换总是朝数据能力更强的方向,并且转换总是逐个运算符进行的。,33 算术类型转换 C遇到两种不同数据类型的数值进行运算时,12,3,3,算术类型转换,char,short,int,long int,float,unsigned long,unsigned int,unsigned short,unsigned char,double,Long double,33 算术类型转换 charshortintlong in,13,3,3,算术类型转换,隐式类型转换:,5.0/9,类型转换运算符(类型)2 自右到左,显示类型转换:(,float,),5/(float)9,33 算术类型转换 隐式类型转换:5.0/9,14,3,4,增量和减量运算符,算元,符号,含义,优先级,结合性,例子,一元后缀,+,使用表达式中操作数的数值,然后加,1,2,从左到右,j+,-,使用表达式中操作数的数值,然后减,1,2,从左到右,j-,一元前缀,+,变量加,1,,然后在表达式中使用新数值,2,从右到左,+,j,-,变量减,1,,然后在表达式中使用新数值,2,从右到左,-,j,34 增量和减量运算符 算元符号含义优先级结合性例子一元后,15,3,4,增量和减量运算符,例:,int a=3;,int b=+a;,int c=a+;,int a=3;,+(+a);,int a=3;,+(a+);,3+;,34 增量和减量运算符 例:,16,3,4,增量和减量运算符,(,i+)+(i+)+(i+)(i=3),(+,i)+(+i)+(+i),2.i+j,3.int i=3;,printf(,“,%d%d,”,i+,i);,34 增量和减量运算符(i+)+(i+)+(i+),17,3,5,关系与逻辑运算符,A,B,A,A,P,P,A,真,真,假,假,顺序结构,选择结构,循环结构,C,程序的基本结构,35 关系与逻辑运算符 ABAAPPA真真假假顺序结构选择,18,3,5,关系与逻辑运算符,关系运算实际就是“比较运算“,即将两个值进行比较,判断比较的结果是否符合给定的条件。满足条件,则关系表达式为“真“;不满足条件,则关系表达式为“假”。在,C,语言中,,1,代表“真”,,0,代表“假”。,35 关系与逻辑运算符 关系运算实际就是“,19,3,5,关系与逻辑运算符,算元,符号,含义,优先级,二元,xy,x,是否小于,y?,6,xy,x,是否大于,y?,6,x=y,x,是否大于,y,或者等于,y?,6,x!=y,x,是否不等于,y?,7,x=y,x,是否等于,y?,7,35 关系与逻辑运算符 算元符号含义优先级二元xb,a+bb+c,(a=3)(b=5),a,b)(b 2+3,3 4!=2,0=3 2,35 关系与逻辑运算符 关系表达式,21,3,5,关系与逻辑运算符,!改变条件表达式的真假值,即逻辑运算的“非”,,优先级是2,结合性是从右到左。,&,求两个条件表达式的逻辑与,,优先级是11,结合性是从左到右。,|,求两个条件表达式的逻辑或,,优先级是12,结合性是从左到右。,35 关系与逻辑运算符!改变条件表达式的真假值,即逻辑运,22,3,5,关系与逻辑运算符,操作数,!,x,x&y,x|y,0,0,1,0,0,0,T,1,0,1,T,0,0,0,1,T,T,0,1,1,逻辑运算符的真值表,35 关系与逻辑运算符 操作数!xx&yx|y,23,3,5,关系与逻辑运算符,优先次序,!,a&b|xy&c,ab&xy,a=b|x=y,!a|ab,35 关系与逻辑运算符 优先次序,24,3,5,关系与逻辑运算符,逻辑表达式,逻辑运算符的操作数不但可以是,0,和,1,,或者是,0,和非,0,的整数,也可以是任何类型的数据,如,c,&,d,。,在逻辑表达式的求解过程中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算,如,a&b&c,,,a|b|c,。,35 关系与逻辑运算符 逻辑表达式,25,3,5,关系与逻辑运算符,例如:,a=3,b=4,c=5,a+bc&b=c,a|b+c&b-c,!(ab)&!c|1,!(x=a)&(y=b)&0,!(a+b)+c-1&b+c/2,35 关系与逻辑运算符 例如:,26,3,6,if,语句和条件运算符,3,6,1,if,语句,语法:,if(,条件表达式,),语句,;,或,if(,条件表达式,),语句,;,含义:如果条件表达式进行一次测试,且测试为真,则执行后面的语句。,语句,表达式,真(非0),假(0),36 if语句和条件运算符 361 if语句语句表达式,27,3,6,if,语句和条件运算符,语句,表达式,真(非0),假(0),例如:,if(xy),printf(,“,%d,”,x);,36 if语句和条件运算符 语句表达式真(非0)假(0)例,28,3,6,if,语句和条件运算符,3,6,2,if,else,语句,语法:,if(,条件表达式,),或,if(,条件表达式,),语句,1;,语句,1;,else,语句,2;,else,语句,2;,36 if语句和条件运算符 362 ifelse语句,29,3,6,if,语句和条件运算符,语句,语句,表达式,真(非,0),假(0),例如:,if(xy),printf(,“,%d,”,x);,else,printf(,“,%d,”,y);,36 if语句和条件运算符 语句语句表达式真(非0)假(0,30,3,6,if,语句和条件运算符,3,6,3,else if,语句,语法:,if(,条件表达式1,),语句,1;,else if(,条件表达式2,),语句,2;,else if(,条件表达式3,),语句,3;,.,else if(,条件表达式,n,),语句,n;,else,语句,2;,36 if语句和条件运算符 363 else if语句,31,3,6,if,语句和条件运算符,表达式1,语句1,表达式2,语句2,表达式3,语句3,语句4,假,假,假,真,真,真,36 if语句和条件运算符 表达式1语句1表达式2语句2表,32,3,6,if,语句和条件运算符,例如:,if(weight 200),printf(,“,胖子,”,);,else if(weight150),printf(,“,壮汉,”,);,else if(weight120),printf(,“,一般,”,);,else,printf(,“,瘦子,”,);,36 if语句和条件运算符 例如:,33,3,6,if,语句和条件运算符,3,6,4,if,语句的嵌套,语法:,if(,条件表达式1,),if(,条件表达式2,),语句,1;,else,语句,2;,else,if(,条件表达式,3,),语句,3;,else,语句,4;,36 if语句和条件运算符 364 if 语句的嵌套,34,3,6,if,语句和条件运算符,if(x0),y=-1;,else,if(x=0),y=0;,else,y=1;,Y=,-1(,x0),例如:,36 if语句和条件运算符 if(x0)Y=-1(,35,3,6,if,语句和条件运算符,3,6,5,条件运算符,条件运算符的语法:,(表达式1)?(表达式2):(表达式3),例如:,x=a b?a:b;,等价,if(a5?3:74?2:8,main(),cha