《表达式与语句》PPT课件.ppt

上传人:sh****n 文档编号:11512441 上传时间:2020-04-26 格式:PPT 页数:53 大小:590KB
返回 下载 相关 举报
《表达式与语句》PPT课件.ppt_第1页
第1页 / 共53页
《表达式与语句》PPT课件.ppt_第2页
第2页 / 共53页
《表达式与语句》PPT课件.ppt_第3页
第3页 / 共53页
点击查看更多>>
资源描述
1,第三章表达式和语句,本章目标1.理解表达式和语句的概念;2.掌握各种运算符的功能与特点,产生副作用原因。,2,3.1表达式,1.表达式概述由操作符、操作数和标点符号组成的序列,用来说明计算过程。如:2+3+(5*sizeof(int)/345根据某些约定、求值次序、结合和优先级规则来计算。,3,约定:类型转换,如:floata;a=5/2;求值次序:表达式中各个操作数的求值次序视编译器不同而不同。结合性:表达式中出现同等优先级的操作符时,该先做哪个操作的规定。如:d=a+b+c;d=a=3;,4,优先级:不同优先级的操作符,总是先做优先级高的操作。d=a+b*c;*x+;/先做x+,5,2.左值与右值左值(leftvalue,简写为lvalue)是出现在赋值表达式左边的表达式。左值表达式具有存放数据的空间,并且存放是允许的。如:inta=3;constintb=4;/error右值只能出现在赋值表达式的右边。左值可以作为右值表达式。,6,inta,b=6;a=b;a=8;表达式可产生左值、右值或不产生值。如:inta;(a=4)=28;Voidf()return;,7,3.优先级和结合性看表3-14.语句与块C+所有的操作运算通过表达式来实现。表达式语句由表达式组成的语句,表达式和;组成。语句是用来规定程序执行的控制流。在没有跳转和分支的情况下,按照其在程序中出现的次序顺序执行。,8,语句可以是空语句。它不产生任何操作运算,只是作为形式上的语句,被填充在控制结构中。如:if(x9);elsecout9)cout“Thenumberisperfect.n”;cout“Itislargethan9n”;elsecout“notlargethan9n”;,10,3.2算术运算和赋值,1.操作符种类(加法运算符,或正值运算符。如3+5,+3)(减法运算符,或负值运算符。如5-2,-3)*(乘法运算符。如3*5)(除法运算符。如5/3)注:整型,浮点区别(模运算符,或称求余运算符,两侧均应为整型数据,如的值为)。,11,需要说明,两个整数相除的结果为整数,如5/3的结果值为1,舍去小数部分。但是,如果除数或被除数中有一个为负值,则舍入的方向是不固定的。例如,-5/3在有的C+系统上得到结果-1,有的C+系统则给出结果-2。多数编译系统采取“向零取整”的方法,即5/3的值等于1,-5/3的值等于-1,取整后向零靠拢。如果参加+,-,*,/运算的两个数中有一个数为float型数据,则运算的结果是double型,因为C+在运算时对所有float型数据都按double型数据处理。,12,2.赋值缩写赋值符号“”就是赋值运算符,它的作用是将一个数据赋给一个变量。如“a=3”的作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a。也可以将一个表达式的值赋给一个变量。当一变量既出现在表达式的左边又出现在右边时,可以缩写,如:x=x*y;缩写为:x*=y;x=x+y;缩写为:x+=y;x=x-y;缩写为:x-=y;x=x/y;缩写为:x/=y;x=x%y;缩写为:x%=y;,13,赋值以及缩写都要求左边的表达式为左值,即x为左值。赋值构成一个表达式,因而它具有值。如:cout(x=5)endl;(x=max(5,7)+=3;,14,3.溢出发生溢出是由于一个变量被赋予一个超出其数据类型表示范围的数值。在16位机上:intweight=42896;溢出值是多少?,15,3.3算术类型转换,C+遇到两种不同类型的数据进行运算时,例如:60A,会将两个数作适当的类型转换,然后再进行运算,转换方法如下图所示。,16,如果一个char型数据和一个int型数据相加,则将char型数据转换成int型数据,然后进行运算,例如:60+A=60+65=125。如果一个longint型数据和一个float型数据相加,则先将两个数据都转换成double型数据,然后进行运算。例如:longinta=20;floatb=15.32;doublex;x=a+b,17,如果一个int型数据和一个unsignedlong型数据相乘,则先将两个数据都转换成double型数据,然后进行运算。例如:unsigneda=20;intb=15;doublex;x=a*b;,18,转换总是朝表达数据能力更强的方向,并且转换总是逐个运算符进行的。例:floatf=3.5;intn=6;longk=21;doubless;ss=f*n+k/2;coutss;运行结果:31,转换成double,整除后转换为double,19,整型运算过程中自动进行的类型转换称为隐式类型转换。问题:longm=234*456/6;/为什么错怎么改?,20,强制转换类型又称显式转换,其语法是在一个数值或变量前加上带括号的类型名,也可以类型名后跟带括号的数值或表达式。shortintm=234;cout(long)m*456/6endl;运行结果:17784上面的语句也可以写成:coutlong(m)*456/6endl;,21,cout(unsignedlong)234*456/6endl;coutunsignedlong(234)*456/6endl;/error注意:coutlong(234*456)/6=(a+b)ab!=c等价于(ab)!=ca=bc等价于a=(b300)cost=0.10;elseif(number100)cost=0.075;elseif(number50)cost=0.05;elsecost=0;,34,图3.6,35,说明:(1)从图3.1和图3.2可以看到:3种形式的if语句都是由一个入口进来,经过对“表达式”的判断,分别执行相应的语句,最后归到一个共同的出口。这种形式的程序结构称为选择结构。在C+中if语句是实现选择结构主要的语句。(2)3种形式的if语句中在if后面都有一个用括号括起来的表达式,它是程序编写者要求程序判断的“条件”,一般是逻辑表达式或关系表达式。(3)第2、第3种形式的if语句中,在每个else前面有一分号,整个语句结束处有一分号。(4)在if和else后面可以只含一个内嵌的操作语句(如上例),也可以有多个操作语句,此时用花括号“”将几个语句括起来成为一个复合语句。,36,例求三角形的面积。#include#include/使用数学函数时要包含头文件cmath#include/使用I/O流控制符要包含头文件iomanipintmain()doublea,b,c;coutabc;,37,if(a+bc,38,运行情况如下:pleaseentera,b,c:2.453.674.89area=4.3565if语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套。一般形式如下:if()if()语句1else语句2内嵌ifelseif()语句3else语句4内嵌if,39,应当注意if与else的配对关系。else总是与它上面最近的、且未配对的if配对。假如写成if()if()语句1elseif()语句2else语句3内嵌if编程序者把第一个else写在与第一个if(外层if)同一列上,希望else与第一个if对应,但实际上else是与第二个if配对,因为它们相距最近,而且第二个if并未与任何else配对。为了避免误用,最好使每一层内嵌的if语句都包含else子句(如本节开头列出的形式),这样if的数目和,40,else的数目相同,从内层到外层一一对应,不致出错。如果if与else的数目不一样,为实现程序设计者的企图,可以加花括号来确定配对关系。例如:if()if()语句1/这个语句是上一行if语句的内嵌ifelse语句2/本行与第一个if配对这时限定了内嵌if语句的范围,外的else不会与内的if配对。关系清楚,不易出错。,41,3.7条件运算符,1语法格式:?:2说明例:max=(ab)?a:b;,if(ab)max=a;elsemax=b;,42,条件运算符要求有3个操作对象,称三目(元)运算符,它是C+中惟一的一个三目运算符.条件运算符的执行顺序是:先求解条件表达式,若为非0(真)则求解表达式1,此时表达式1的值就作为整个条件表达式的值。若条件表达式的值为0(假),则求解表达式2,表达式2的值就是整个条件表达式的值。“max=(ab)?a:b”的执行结果是将条件表达式的值赋给max。也就是将a和b二者中的大者赋给max。条件运算符优先于赋值运算符,因此上面赋值表达式的求解过程是先求解条件表达式,再将它的值赋给max。,43,条件表达式中,条件表达式的类型可以与表达式1和表达式2的类型不同。如x?ab如果已定义x为整型变量,若x=0,则条件表达式的值为字符b的ASCII码。表达式1和表达式2的类型也可以不同,此时条件表达式的值的类型为二者中较高的类型。如有条件表达式xy?1:1.5,如果xy,则条件表达式的值为1.5,若xy,值应为1,由于C+把1.5按双精度数处理,双精度的类型比整型高,因此,将1转换成双精度数,以此作为表达式的值。,44,例输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。#includeusingnamespacestd;intmain()charch;cinch;ch=(ch=A,45,3.8逗号表达式,格式:表达式1,表达式2,,表达式n功能:按照“从左到右”的顺序,先计算表达式1,将其值代入表达式2,再计算表达式2,,最后计算表达式n,整个表达式的值等于最后表达式n的值。,46,例:35,68表达式的值为14a=3*5,a*4先求解a=3*5,得a的值为15,然后求解a*4,得60,整个表达式的值为60。,47,3.9求值次序与副作用,在表达式中,同一个程序在不同的C+版本中在求值次序或者运算结果有可能不同。,48,不同的求值顺序例如:#includevoidmain()floata=3,b=5,c;c=a*b+b;coutcendl;运行结果在BC中:24在VC6.0中:21,49,求值顺序使交换率失去作用a+b=b+a例如:#includevoidmain()floata=3,b=5,c;c=a*b+(+b);c=(+b)+a*bcoutcendl;,50,求值顺序使括号失去作用例如:#includevoidmain()floata=3,b=5,c;c=+b*(a+b)coutcendl;,51,分析:预想的操作应为先做a+b得8,然后乘以+b得6*8=48,但实际上在VC6.0中是先计算+b得b=6,然后6*(3+6)=54,52,消除副作用举的例子中,原因主要是+b引起的。+b具有变量b的修改(副作用)和它所提供的表达式两个操作。同样赋值表达式也会引起副作用。例如:inta,b=20;a=(b=25)+b;a是25+20,还是25+25?分析后,赋值表达式同样有提供表达式值的同时修改变量的行为。,53,表达式和语句的副作用,说明编程者对程序思路还有不够完善不够周密的地方。它导致可读性下降,也破坏了可读性。所以务必要避免副作用的产生。解决的办法分解表达式语句,将复合表达式写成几个简单的表达式语句。如:c=b+a*b;b+;或者:b+=;c=b+a*b;,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!