第三讲 表达式和语句_第1页
第三讲 表达式和语句_第2页
第三讲 表达式和语句_第3页
第三讲 表达式和语句_第4页
第三讲 表达式和语句_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

第三讲表达式和语句语句、表达式基本概念运算符优先级和结合性表达式数据类型转换语句算法基本概念程序是一些按次序执行的语句,执行语句是为了要完成某个操作,修改某个数据。程序中大部分语句是由表达式构成的。表达式是计算求值的基本单位,它是由运算符和运算数组成的式子。运算符是表示进行某种运算的符号。运算数包含常量、变量和函数等。

C++语言定义了丰富的运算符。这些运算符按所要求的操作数的多少,可分为单目运算符、双目运算符和三目运算符。按运算符的运算性质又可分为算术运算符、关系运算符、逻辑运算符等。运算符算术运算符:

+-*/%

关系运算符:

<<=>===!=

逻辑运算符:

!&&||

位运算符:

<<>>~|^&

自增自减运算符:

++--

赋值运算符

=及其扩展(+=-=*=/=%=等)条件运算符:

?:

指针运算符:*和

&

逗号运算符:

,

函数调用运算符()下标运算符[]

求字节运算符

sizeof

强制类型转换运算符:(type)

算术运算符

算术运算符有双目运算和单目运算两种。包括:

+(加法运算符,或取正运算符,如1+2,+3)

-(减法运算符,或取负运算符,如1-2,-3)*(乘法运算符,如1*2)

/(除法运算符,如1/2)

%(模运算符或称求余运算符,如7%3=1)其中+(取正)、-(取负)是单目运算符,其余是双目运算符“/”运算符的两个操作数都是整数时,其计算结果应是除法运算后所得商的整数部分。例如,5/2的结果是2。取余运算符(%)的两个操作数必须是整数或字符型数据。赋值运算符(1)赋值运算符“=”的一般格式为:

变量=表达式; 表示将其右侧的表达式求出结果,赋给其左侧的变量。例如:

inti; i=3*(4+5); //i的值变为27(2)赋值表达式本身的运算结果是右侧表达式的值,而结果类型是左侧变量的数据类型。例如:

inti=1.2*3; //结果为3,而不是3.6(3)赋值运算符的结合性是从右至左的,因此,C++程序中可以出现连续赋值的情况。例如,下面的赋值是合法的:

inti,j,k; i=j=k=10;(4)复合运算符:

+=(加赋值), -=(减赋值), *=(乘赋值), /=(除赋值),

%=(取模赋值),

<<=(左移赋值),

>>=(右移赋值),

&=(与赋值),

^=(异或赋值),

|=(或赋值)

例如:inta=12;a+=a;

intb=12;b+=b-=b*=b;关系运算符(1)关系运算符用于两个值进行比较,运算结果为true(真)或false(假),分别用值非0(true)或0(false)表示。C++中的关系运算符如下:

<(小于),

<=(小于等于),

>(大于),

>=(大于等于),==(等于),

!=(不等于),

(2)关系运算符都是双目运算符,其结合性是从左到右,<、<=、>、>=运算符的优先级相同,==和!=运算符的优先级相同,前者运算的优先级高于后者。(3)关系运算符的优先级低于算术运算符而高于赋值运算符。例如:

a+b>c 等价于

(a+b)>c a!=b>c 等价于 a!=(b>c)

逻辑运算符

&&(逻辑与),||(逻辑或),!(逻辑非) 逻辑表达式的结果为真则为1,结果为假则为0。 逻辑非(!)是单目运算符,逻辑与(&&)与逻辑或(||)为双目运算符。

逻辑非的优先级最高,逻辑与次之,逻辑或最低。

“&&”和“||”低于关系运算符,“!”高于算术运算符。

aba&&ba||b!a!b0000110非00110非000101非0非01100自增、自减运算符(1)自增(++)、自减(--)运算符为变量的增1和减1提供了紧凑格式。(2)自增、自减运算符都是单目运算符,其作用是使变量的值增1或减1。(3)自增、自减运算符有四种应用格式:

inta=3;b=a++;等价于b=a;a=a+1;

inta=3;b=a--;等价于b=a;a=a-1;

(运算符后置用法,代表先使用变量,然后对变量增值)

inta=3;b=++a;等价于

a=a+1;b=a;

inta=3;b=--a;等价于a=a-1;b=a;

(运算符前置用法,代表先对变量增值,再使用变量)

(4)C++编译器在处理时尽可能多的自左向右将运算符结合在一起。如:a+++b表示为(a++)+b而不是a+(++b)。(5)++,––,的结合性为从右至左,而一般算术运算符为从左至右。如:–i++相当于–(i++)。(6)++和––运算法只能用于变量,不得用于常量和表达式。如:

5++,(a+b)++均为不合法。条件运算符(1)条件运算符“?:”是C++中惟一三目运算符,其形式为:

表达式1?表达式2:表达式3

它的运算方式为:先计算表达式1的值,如果其值为非0(真),则表达式2的值就是整个表达式的最终结果;否则表达式3的值就是整个表达式的值。常见的一个例子为:

max=((a>b)?a:b)

上面例子定义了一个求两个数a和b中最大值,其中决定哪一个是最大值用了条件运算符。(2)条件运算符的结合性是自右向左。例如有以下条件表达式:

a>b?a:c>d?c:d相当于

a>b?a:(c>d?c:d)(3)条件运算符的优先级别高于赋值运算符,低于关系运算符和算术运算符。例如有:

a>b?a-b:b-a相当于

a>b?(a-b):(b-a)位运算符(1)位(bit)是计算机中表示信息的最小单位,一般用0和1表示。一个字符在计算机中用8个位表示,8个位组成一个字节。C++语言需要将人们通常所习惯的十进制数表示为二进制、八进制或十六进制数来理解对位的操作。C++中所有的位运算符如下:

~(按位求反),<<(左移),

>>(右移), &(按位与), ^(按位异或),

|(按位或)。(2)位运算符是对其操作数按其二进制形式逐位进行运算,参加位运算的操作数必须为整数。sizeof运算符(求字节运算符)(1)sizeof运算符是单目运算符,用于计算运算对象在内存中所占字节的多少,它有两种形式:

sizeof

(类型标识符);

sizeof

表达式;(2)sizeof可以接受的类型标识符很多,如sizeof(int)表示求整型数据在内存中所占字节数。

例如:inta,则sizeof(a)表示求变量a在内存中所占字节数。 例如:inta[10],则sizeof(a)表示求数组a在内存中所占字节数。

逗号运算符(1)逗号运算符用于将多个表达式连在一起,并将各表达式从左到右的顺序依次求值,但只有其最右端的表达式的结果,作为整个逗号表达式的结果。(2)逗号表达式的一般格式为:

表达式1,表达式2,……,表达式n

例如:

inta=3,b=4,c=5; a+b,b+c,c+a;

则先求解a+b,再求解b+c,最后求解c+a,整个表达式的结果为c+a的结果。

运算符优先级(1)运算符优先级决定了在表达式中各个运算符执行的先后顺序。高优先级运算符先于低优先级运算符进行运算。(2)当表达式中出现了括号时,会改变优先级。先计算括号中的子表达式值,再计算整个表达式的值。(3)运算符的结合方式有两种:左结合和右结合。左结合表示运算对象先与其左边的运算符结合,如加法;右结合表示运算对象优先与其右边的运算符结合,如单目运算符+、-。(4)同一优先级的优先级别相同,运算次序由结合方向决定。如1*2/3,*和/的优先级别相同,其结合方向自左向右,则等价于(1*2)/3。(5)不同的运算符要求有不同的运算对象个数,单目运算符只需一个运算对象,如i++,-a,sizeof(b)等。优先级操作符结合性1()[].->::左→右2!~+-++--&*(强制转换类型)sizeof

右→左3*/%左→右4+加-减左→右5<<左移>>右移左→右6<<=>=>左→右7==!=左→右8&按位与左→右9^按位异或左→右10|按位或左→右11&&左→右12||左→右13?:右→左14=*=/=+=-=|=<<=>>=右→左15,左→右优先级和结合性表达式

表达式是用于计算的式子,它由运算符、运算数和括号组成。最简单的表达式只有一个常量或变量,当表达式中有两个或多个运算符时,表达式称为复杂表达式,其中运算符执行的先后顺序由它们的优先级和结合性决定。执行表达式所规定的运算,所得到的结果值便是表达式的值。

C++中由于运算符很丰富,因此表达式的种类也很多。常用的表达式有6种。

1. 算术表达式 由算术运算符和位操作运算符组成的表达式。其表达式的值是一个数值,表达式的类型由运算符和运算数确定。 例如,

a+3*(b/2)就是一个算术表达式。2. 逻辑表达式 由逻辑运算符组成的表达式。其表达式的值的类型为逻辑型,一般地,真用1表示,假用0表示。 例如,!a&&b||c就是一个逻辑表达式。

3. 关系表达式 由关系运算符组成的表达式。其表达式的值的类型为逻辑型,一般地,真用1表示,假用0表示。 例如,a>b!=c就是一个关系表达式。4. 赋值表达式 由赋值运算符组成的表达式。 例如,已知a=b就是一个赋值表达式。

5. 条件表达式 由三目运算符组成的表达式。条件表达式的值取决于?号前面的表达式,该表达式的值为非0时,整个表达式的值为“:”号前面表达式的值,否则为“:”号后面表达式的值。条件表达式的类型是“:”号前和“:”号后两个表达式中类型高的一个表达式的类型。 例如,a>b?a:b就是一个条件表达式。6. 逗号表达式 用逗号将若干个表达式连起来组成的表达式。该表达式的值是组成逗号表达式的若干个表达式中最后一个表达式的值,类型也是最后一个表达式的类型。逗号表达式计算值的顺序是从左至右逐个表达式分别计算。 例如,a+3,b+4,c+5就是一个逗号表达式。

数据类型转换

C++中数据类型转换有两类,即隐式类型转换和显式类型转换。1、隐式类型转换 隐式类型转换是由编译器自动完成的类型转换。当编译器遇到不同类型的数据参与同一运算时,会自动将它们转换为相同类型后再进行运算,赋值时会把所赋值的类型转换为与被赋值变量类型一样。隐式类型转换按从低到高的顺序进行。

数据类型转换的顺序整型(int)短整型,字符型(short,char)单精度浮点型(float)双精度浮点型(double)无符号长整型(unsigned

long)长整型(long)无符号整型(unsigned)2、显式类型转换显式类型转换是由程序员显式指出的类型转换,转换形式有两种:

类型名(表达式) (类型名)表达式 这里的“类型名”是任何合法的C++数据类型,例如float、int等。通过类型的显式转换可以将“表达式”转换成适当的类型。 例如:doublef=3.6;

intn=(int)f;//n=3。注意:转换后的类型数据由系统分配一个中间变量存放,而原变量类型不变。左值和右值左值(leftvalue)指能出现在赋值表达式左边的表达式。左值表达式具有存放数据的空间,并且存放是允许的。如:inta=3;constintb=4;右值(rightvalue)只能出现在表达式的右边。左值表达式可以作为右值表达式。语句语句是程序中最小的独立单位,根据复杂程度的不同,可以分为简单语句和复合语句;根据执行流程的不同,又可以分为顺序语句、分支语句和循环语句,这三种基本结构能够组织成任意复杂的程序。空语句是最简单的语句,仅由一个分号组成,表示什么也不做。复合语句由一对花括号“{}”和括号里的一系列简单语句组成,通常用在分支语句和循环语句中。顺序结构语句顺序结构语句在执行过程中,程序的流程不会发生转移。常见的顺序结构语句有:声明语句、赋值语句和输入输出语句。选择结构语句

if(条件表达式)//语句1;else

//语句2;if(条件表达式)//语句1;if(条件表达式1)//语句1;elseif(条件表达式2)//语句2;………elseif(条件表达式n)//语句n;else//语句n+1;多分支结构单分支结构双分支结构多分支语句

嵌套的if可以处理多分支选择,但容易引起困惑和许多难以发现的错误,可以用switch语句来替代它们,格式为:switch(判断表达式){

case

常量表达式1:语句1;

break;

case常量表达式2:语句2;

break;

//……

default:语句n+1;

}case后面的常量表达式必须是整型、字符型或枚举型表达式,并且要求互不相同,保证分支选择的唯一性。case分支的后面如果有多条语句,可以用花括号“{}”括起来,也可以不用。default语句是可选项,总是放在switch语句的最后。case语句仅起语句标号作用,并不改变控制流程。在case语句中通常会用到break语句,它的作用是使程序流程退出switch语句,转向switch语句后面的下一条语句。初学者易犯的一个错误是忽略break语句在使用switch语句时,需要注意以下四个问题:循环语句for(表达式1;表达式2;表达式3)

语句;while(表达式)

语句;do

语句;while(表达式);while循环语句do-while循环语句for循环语句转移语句用来改变程序的顺序执行流程,将程序执行流程转移到程序其他地方。包括:break、continue、goto和return等。break语句一般只用于while、do-while、for或者switch语句,作用是终止执行当前的循环语句或者switch语句,跳转到当前语句的下一条语句。在循环嵌套中,break语句用来从最近的封闭循环体内跳出,而不能中止所有的循环语句。continue语句用在循环语句中,作用为结束本次循环,即跳过循环体中尚未执行的语句,接着进行下一次是执行循环的判定程序的灵魂——算法做任何事情都有一定的步

温馨提示

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

评论

0/150

提交评论