(中职)编程语言基础-C++模块3教学课件_第1页
(中职)编程语言基础-C++模块3教学课件_第2页
(中职)编程语言基础-C++模块3教学课件_第3页
(中职)编程语言基础-C++模块3教学课件_第4页
(中职)编程语言基础-C++模块3教学课件_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、YCF正版可修改PPT(中职)编程语言基础-C+模块3教学课件模块3 运算符和表达式任务1 运算符任务2 运算符的优先级与结合性任务3 表达式返回任务1 运算符C+的运算符十分丰富,按照运算符要求操作数个数的多少,可把C+运算符分为单目(或一元)运算符、双目(或二元)运算符和三目(或三元)运算符三类。单日运算符一般位于操作数的前面,如对x取负为-x;双日运算符一般位于两个操作数之间,如两个数a和b相加表示为a+从三目运算符只有一个,即为条件运算符,它含有两个字符,分别把三个操作数分开。一个运算符可能是一个字符,也可能由两个或三个字符组成,还有的是一些C+保留字。如赋值号(=)就是一个字符,不等

2、于号(!=)就是两个字符,左移赋值号(=)就是三个字符,测类型长度运算符(sizeof)就是一个保留字。下一页返回任务1 运算符每一种运算符都具有一定的优先级,用来决定它在表达式中的运算次序。一个表达式中通常有多个运算符,对它们进行运算的次序通常与每一个运算符从左到右出现的次序相一致,但若它的下一个(即右边一个)运算符的优先级较高,则下一个运算符应先被计算。如当计算表达式a+b*(c-d)/e时,则每个运算符的运算次序依次为:-,*,/,+。 对于同一优先级的运算符,当在同一个表达式的计算过程中相邻出现时,可能是按照从左到右的次序进行,也可能是按照从右到左的次序进行,这要看运算符的结合性。如加

3、和减上一页下一页返回任务1 运算符运算为同一优先级,它们的结合性是从左到右,即当计算a+b-c+d时,先做最左边的加法,再做中间的减法,最后做右边的加法;又如各种赋值操作是属于同一优先级,但结合性是从右到左,即当计算a=b=c时,先做右边的赋值,使c的值赋给b,再做左边的赋值,使b的值赋给a.表3-1列出了在C+语言中定义的全部运算符,其中优先级数字从小到大对应的优先级别为从高到低。上一页下一页返回任务1 运算符3.1.1 算术运算符 C+语言中的算术运算符包括基本算术运算符和增1,减1运算符 1.基本算术运算符 一元运算符:+(取正)、一(取负)。 二元运算符:+(加)、一(减)、x(乘)、

4、/(除)、%(取余)。 其中“%”运算符要求它的两个操作数必须是整数或字符型数据,其优先级与结合性和“/”运算符相同。求两个数的余数的表达式如下: 操作数1%操作数2上一页下一页返回任务1 运算符 其计算结果是操作数1被操作数2除的余数,即余数=操作数1一操作数2整商(整商为操作数1除以操作数2所得的整数商)。 例如:9%4 /结果是1 对于“/”运算符,当它的两个操作数都是整数时,其计算结果应是除法运算后所得的商的整数部分。例如:7/2的结果是3 .上一页下一页返回任务1 运算符 2.增1、减1运算符 增1,减1运算符都是一元运算符,这两个运算符都有前置和后置两种形式。前置形式是指运算符在操

5、作数的前面,后置是指运算符在操作数的后面。 例如:int i =2,j =4; i+; /+后青经讨计算后:表达式值为2,i值为3 -j; /一前青经讨计算后:表达式值为-,I值为3上一页下一页返回任务1 运算符 前置形式是先计算操作数的值(增1或减1),后把操作数的值作为表达式的结果。后置形式是先将操作数的值作为表达式的结果,然后把操作数的值增1或减1. 在进行算术运算时,还需注意计算中的溢出问题。在计算机中每种基本数据类型都有一定的取值范围。对于实数,如果运算结果超出范围,程序将被异常中止;另外,整数或实数被零除也会导致程序异常中止。上一页下一页返回任务1 运算符3. 1 .2 关系运算符

6、 关系运算符是用来比较两个数据大小的,其操作结果只有两种:成立或不成立。如果成立,则结果为逻辑值“真”,用1来表示;如果不成立,则结果为逻辑值“假”,用0来表示。由关系运算符连接而成的表达式称为关系表达式。 关系运算符有:(小于)、(大于)、=(大于或等于)、= (等于)、!=(不等于)。上一页下一页返回任务1 运算符 在使用关系运算符时要注意以下两点。 (1)当关系运算符用于字符比较时,是按该字符的ASCII值的大小进行比较; (2)使用关系操作时,要注意它的优先级:算术运算符优先于关系运算符;、=优先于=、!=;、=同级;=、!=也是同级,它们的结合性自左向右.上一页下一页返回任务1 运算

7、符例如:设有如下变量定义:char c1=a,c2=A;int n1=65,n2=97;float f1=0.3e1,f2=3.0001;则c1c2的值为1;c1n1的值为1;f1=f2的值为0;c2=n1!=f2的值为1.即先操作c2=n1,其结果为0,再操作0!=f2,值为1.上一页下一页返回任务1 运算符3.1.3 逻辑运算符一元运算符!(逻辑求反):若其操作数为0(false),运算结果为ture(1),否则为false(0)二元运算符&(逻辑与):只要两个操作数中有一个为0 ( false ),运算结果就为false,否则为true ( 1)|(逻辑或):只要两个操作数中有一个不为0

8、 (flase),运算结果为true(1),否则为false(0)表3-2为逻辑运算的真值表.上一页下一页返回任务1 运算符3. 1 .4 位运算符 位运算符是对其操作数按其二进制形式逐位进行运算,参与运算的操作数应为整数。其中包括一元运算符一(按位求反)和二元运算符&(按位与),|(按位或)、(按位异或)、(右移位)。(1)按位求反():按位求反的作用是对一个二进制数的每一位求反。例如:计算024024 0000000000010100024 1111111111101011上一页下一页返回任务1 运算符(2)按位与(&):按位与操作的作用是将两个操作数对应的每一位分别进行逻辑与操作例如:计

9、算3 &5 3: 00000011 5:(&) 00000101 3&5: 00000001(3)按位或(|):按位或操作的作用是将两个操作数对应的每一位分别进行逻辑或操作例如:计算3|5 3: 00000011 5:(|) 00000101 3|5: 00000111上一页下一页返回任务1 运算符 (4)按位异或(八):按位异或操作的作用是将两个操作数对应的每一位进行异或,具体运算规则是:若对应位值相同,则该位运算结果为0;否则为1 例如:计算071052 071: 00111001 052:() 00101010 071052: 00010011上一页下一页返回任务1 运算符(5)移位:移

10、位运算符左边的操作数指定厂需要作移位操作的数。右边的操作数指定厂需要移动的位数,因而必须是一个整数表达式。 左移位“”是将左操作数的二进制值向右移动指定的位数。右移后,移出的低位舍弃。如果是无符号数则高位补0;如果是有符号数,则高位补符号位或补o.例:表达式42的移位操作过程如图3-2所示。结果为2 . 注意:移位运算的结果就是位运算表达式的值,参与运算的两个操作数的值并没有变化。移位运算可替代乘或除2或2的n次方运算上一页下一页返回任务1 运算符3. 1 .5 赋值运算符 赋值运算符是给变量或对象赋值,分为基本赋值运算符和复合赋值运算符。最后进行赋值运算的表达式,称为赋值表达式。 基本赋值操

11、作“=”是一种双目运算符,作用是将右操作数的值传递给左操作数。它的一般形式为:= 特别要注意以下两点。 (1)赋值运算符的左边一定是变量,不能是常量。例如:3 = I;/错误 (2)赋值运算符的结合性是从右向左。例如:a=b=10;可看做a=(b=10),,即a和b的值都为10上一页下一页返回任务1 运算符3. 1 .6 条件运算符条件运算符“?:”是C+中唯一一个三目运算符,其使用格式为:?: ?: 当计算由条件运算符构成的表达式时,首先计算,若其值非。则计算出的值,这个值就是整个表达式的值;若的值为0,则计算出的值,它就是整个表达式的值。如:(1)a=(xy? x:y) /若xy为真则把X

12、的值赋给a,否则把y的值赋给a(2)x? y=a+10:y=3*a-1 /若x非0,则把a+10的值赋给y,否则把3*a-1的值赋给y上一页下一页返回任务1 运算符3. 1 .7 逗号运算符 逗号运算符是一种顺序运算符,对于分别用逗号分开的若干个表达式,每个逗号都称为逗号运算符,合起来称为逗号表达式。计算一个逗号表达式时,将按照每个子表达式从左到右出现的先后次序依次计算出它们的值,最后一个子表达式的值就是整个表达式的值。如x+ ,y +=x,z-;就是一个逗号表达式,它首先计算x+的值,该计算使x增1;接着计算Y+=x的值,该计算使Y增加了x的值;最后计算z-的值,使z减1,而z的原值则成为整

13、个表达式的值。上一页下一页返回任务1 运算符3. 1 .8 圆括号运算符 使用圆括号能够改变运算的优先级,使得括号内的运算优先进行,这与数学上的含义相同。 在C+语言中,运算符比较多,级别划分得也比较细,往往不容易正确地记住每个运算符的优先级,因此也就不容易把它们正确地使用在复杂的表达式中。为厂使表达式中每个运算符的运算次序按照希望的次序进行,使用圆括号进行限定,即使有时是多余的,也没有关系,因为它能够使裘认式亘清晰,提高程序的可读性。如:(1) x 0&x o)&(x 3可能更清晰(2)couty? x:y)endl;上一页下一页返回任务1 运算符 在第二条语句中,若不使用括号是错误的,因为

14、和?:,所以不能把条件表达式作为一个整体看待。注意:在tout语句中,不是左移操作符,而是重新赋予厂把其后的一个数据项的值插人(即输出)到屏幕输出窗口的含义,虽然y? x:y时,先计算xy,再得到x或Y,为厂使计算次序更明确,可以把xy用圆括号括起来,即书写为(xy)? x:y上一页返回任务2 运算符的优先级与结合性每个运算符都有自己的优先级和结合性。当一个表达式中包含多个运算符时,要确定运算的结果必须首先确定运算的先后顺序,即运算符的优先级和结合性。C+中运算符的优先级和结合性如表3-3所示。表中,同一行的运算符具有相同的优先级,其优先级按从上到下的顺序递减,如:圆括号运算符的优先级最高,逗

15、号运算符的优先级最低。当同一表达式中有多个优先级相同的运算符时,则根据其结合性确定运算顺序。返回任务3 表达式由运算符和操作数组成的字符序列称为表达式,其日的是计算之后求得一个结果值操作数可以是常量、变量、函数和其它一些标识符。 在C+语言中表达式的种类很多,其分类方法也很多。按运算符的不同可将表达式分为:算术表达式、赋值表达式、关系表达式、逻辑表达式和逗号表达式。3. 3. 1算术表达式算术表达式是指用算术运算符、括号将常量、变量和函数等连接而成的一个有意义的式子如:(1+x)/(3*x),(2*x-3)*x+2)*x)-5,3.14*sqrt(r),b*b-4.0*a*c都是表达式下一页返

16、回任务3 表达式 要注意以下两方面的内容。 (l)表达式中的括号不管有多少层,一律使用圆括号,如(X+(y-10) )/(a*a-b) . (2)在将一个数学上的运算式写成对应的C+的表达式时,要注意进行必要的转换。 乘号不能省略。如:在数学上两个量相乘可写成xy,而写成C+的运算式时必须写成x*y,此处的乘号不能忘记。上一页下一页返回任务3 表达式 数学表达式中出现的数学运算函数要用C+提供的对应的数学运算库函数来代替。如:在数学上求一个数X的平方根,在C+中要写成sqrt(x),此处的sqrt是C+提供的求一个数的平方根的库函数。类似地,还提供有求绝对值、指数函数、对数函数和三角函数的库函

17、数,这些内容在C语言中已有详细介绍,在此不再赘述。要特别注意表达式中两个整型数相除的情况。如:有一数学表达式为2/3 (f-32) ,要写成对应的C+的表达式时,如果只简单地写为2/3*(f-32)时,则该表达式的值永远为0,因为式中的2和3都为整型常量,在计算2/3时按整型数据的除法运算,则结果为。,但结果。并不是我们所期望的运算结果。所以,正确的写法应是2.0/3.0*(f-32)。上一页下一页返回任务3 表达式3. 3. 2 关系表达式C+中提供厂6种关系运算符: (小于),(大于),=(大于等于),=(相等),!=(不相等). 上述6种运算符中的前4种和后两种的级别分别相等,且前者的级

18、别高于后者,但所有这6种的级别都小于算术运算符。它们都是需要两个运算数的双日运算符,且它们的结合性都是从左向右的。 用关系运算符将两个表达式连接起来,就是关系表达式。比如:3 9,s +f h,(3 +d) (7 +k) ,(3 5)(sg),l k,x =y都是合法的关系表达式。关系表达式是一种最简单的逻辑表达式,其结果类型为布尔型,值只能是true或false上一页下一页返回任务3 表达式3. 3. 3 逻辑表达式由逻辑运算符将两个表达式连接形成的式子称为逻辑表达式。各种逻辑运算的“真值表”如表3-4所示。表中列出厂当操作数a和b的取值为不同组合时,各种逻辑运算的结果。对于参加逻辑运算的操

19、作数,系统认为“非0”为真,0”为假。而逻辑表达式的结果只能为逻辑真(1)或逻辑假(0).上一页下一页返回任务3 表达式(1)C+中,在给出一个逻辑表达式的最终计算结果值时,用1表示真,用0表示假。但在进行逻辑运算的过程中,凡是遇到非零值时就当真值参加运算,遇到0值时就当假值参加运算。 如int a=10,h -15,c=14;则(a+6)&(hc)的值为1(真),因为表达式中逻辑运算符&左边的部分(a+6)的值为16,是非0值,所以,C+就把该值当成真值进行下一步的运算。而bc的值也为真,最后两个真值进行&运算,所以最终结果为1(真)。上一页下一页返回任务3 表达式(2)在逻辑表达式的求值过

20、程中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的值时才执行该运算符。 a&b&c:只有a为真时,才需要判别b的值;只有a和b的值都为真时,才需要判别c的值;只要a为假,就不必判别b和c,因为此时已能确定整个逻辑表达式的值为假值;如果a为真,b为假,则不必判别c 如int i = 10;则表达式i&(i =0) &(+i)的值为0(假),该表达式运算结束后,变量i的值为0,而不是1。因为在运算完表达式的前半部分i&(i = 0)的值(i为0)后,整个逻辑表达式的值为0(假)已能确定,所以后半部分(+i)就不再运算,因此,变量i的值没有进行自加运算。上一页下一页

21、返回任务3 表达式a|b|c:只要a为真,就不必判别b和c;只有a为假,才判别b;只有a和b都为假,才判别c. 如:int i=1,j;则表达式i+|i+|i+的值为1(真),运算结束后,变量i的值为2,而不是4。因为进行第一个i+运算时,其值为1(真),这时,整个逻辑表达式的值为真已能确定,所以就不再进行后面的计算,因此,变量只进行厂一次自加运算,其值为2 对于数学上的表示多个数据间进行比较的表达式,在C+中要拆写成多个条件,并用逻辑运算符将其连接形成一个逻辑表达式,而不能直接照搬。上一页下一页返回任务3 表达式 如:在数学上,要表示一个变量a的值处于-1和-9之间时,可以用-9a-9&a-

22、1,而不能写成-9a-1。因为,假设变量a当前的值为-5,它的值确实处在-1和-9之间,但在C+语言中求-9 a-1时,从左向右进行计算,先计算-9 a,得1(真),此时,该表达式可简化为1-9&a-1的形式上一页下一页返回任务3 表达式3. 3. 4 赋值表达式由赋值运算符和操作数组成的字符序列称为赋值表达式。赋值表达式要求赋值号(=)左边必须是左值,其功能是用右值表达式的值修改左值。赋值表达式的计算顺序是从右向左进行的,其值为左值表达式的值。例如:high=5*6;/表达式的值为high的值30high=low=0/相当干low=0,high=low,格个表达式的值为high的值0.rniox+=3*9/相当于 midx=midx+3*9上一页下一页返回任务3 表达式C+语言在使用厂复合赋值表达式后,使语句看起来非常简练。说明以下儿点。(1)赋值表达式本身是左值,可以出现在赋值号(=)左边。(x=s)=23+6; /x=5是左值,被修改29,29即为整个表达式的值x=y=z=0: /从右向左计算,先使z=0,然后再将z的值赋给y,最后将y的值赋给x (2)声明语句中的符号(=)为初始化符号,尽管在书写上与赋值号(=)一样,但含义不同。上一页下一页返回任务3 表达式float rmliusl=5.

温馨提示

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

评论

0/150

提交评论