欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    表达式与基本程序控制结构.ppt

    • 资源ID:6487786       资源大小:251KB        全文页数:40页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    表达式与基本程序控制结构.ppt

    第4章 C+表达式与基本程序控制结构,41 运算符与表达式运算符是指用来表示在数据上执行某些特定操作的符号。参与运算的数据称为操作数。(可以分别称为单目、双目和三目运算符)。表达式是指用运算符和圆括号把常量、变量和函数等运算成分连接起来的有意义的式子。单个常量、变量和函数也可以看成是一个表达式。,例如:98.56,(98.56),x,876-78,3*(2.5+5)都是表达式,,基本运算符,基本运算符是指完成算术运算、关系运算、逻辑运算、位运算的运算符。,4.1.1 算术运算 5.3%2错,C+中有如下单目运算符:+-(正负号)C+中有如下双目运算符:+-*/%5/2 5.0/2 8 5?运算符%的操作数只能是整型或字符型。,当赋值运算符的两边出现相同的变量时,C+还提供了一个简洁的表达方式:x=。其中的x可为+、-、*、/、等。假定e1和e2是表达式,那么 e1=(e1)x(e2)就等价于 e1 x=e2例如,表达式 a=a+9 可以用+=写成如下形式:a+=9 注意围绕 e2 的括号。例如,表达式 y-=x+1 实际上是 y=y-(x+1),+和-运算符增1运算符和减1运算符分别对其操作数进行加1和减1操作,它们既可以用在变量前,作为前缀运算符,例如 int m,n;+m;-n;又可用在变量后,作为后缀运算符。例如:m+;n-;在两种情形下,m的值都将加1而n的值都将减1。前缀增(减)1运算符在使用变量的值之前就使变量值加1或减1,后缀增(减)1运算符在使用变量的值之后才使变量值加1或减1。例如,若n的值为5,那么 x=n+;先将n的值5赋给x,即x的值为5,再将 n的值加1,则n为6。而 x=+n;先将n的值加1得到6,再将n的值赋给x,则x和n的值都为6。,postincrement&preincrement,4.1.2 关系运算C+的关系运算符都是二元的,有、=、=4的值为1,而表达式 67!=67的值为0。,例4.1 关于关系运算的一个例子。#include void main()double x=45.3,y;cout y;cout(x y)endl;例4.1执行后,若输入的y的值是小于45.3的,则得到的结果是1,否则得到0。,4.1.3 逻辑运算C+的逻辑运算符有三个:一元运算符!(逻辑非)和二元运算符 x=16 时,此表达式的值为0。,!运算符用在表达式的前面,表示取表达式的非。若表达式值为0,取非以后为1;若表达式值为非0,取非以后为0。例如:!(32)的值为0,因为(32)的值为1。,C+在计算逻辑表达式的值时,若从左到右计算到某处就已经能够确定表达式的值,则不再继续后面部分的求值。例如,形如 e1&e2的表达式,在已求得表达式e1的值为0的情况下,已经能够确定整个逻辑表达式的值为0,C+就不再对e2求值。同样,形如 e1|e2的表达式,如果已经求得e1的值为1,则整个表达式的值一定为1,C+就不再对e2求值。,4.1.4 条件运算符条件运算符?:是C+中唯一的一个三元运算符。条件运算符的表达式具有如下形式:e1?e2:e3 其中e1、e2、e3皆为表达式。条件运算执行的操作是:先计算表达式e1的值,如果为非0,则计算表达式 e2 的值并把它作为整个表达式的值;而如果e1的值为0,则计算表达式e3的值,并用它作为整个表达式的值。例如,表达式(x y)?10:20 如果x的值大于y的值,则表达式的值为10,否则表达式的值为20。又如,在语句 max=(a b)?a:b;中,max将赋值为a、b中较大的数。,4.1.5 运算符的优先级和结合性当一个表达式中有多个运算符时,运算符的优先级和结合性就决定了表达式中各运算的先后顺序。优先级相同时,由结合性决定运算次序。运算符的结合性分为左结合(从左到右计算)和右结合(从右到左计算)。例如,运算符+和-优先级相同、为左结合,因此表达式 45+89-23按从左到右的顺序计算,先做加法再做减法。而赋值运算符=是右结合的,因此表达式 x=y=78的运算次序为:先将78赋给y,再将y赋给x。,表4.1 C+常用运算符的优先级和结合性,C+各运算符的优先级总的来说有如下规律(按优先级从高到低):一元二元(除了赋值)三元赋值逗号;二元运算符又有如下规律:算术关系逻辑;逻辑运算符有如下规律:!&|。,请分析以下表达式的求值次序。假定有 int x=5,y=4,z=6;char a=s,b=t;int w=2;表达式 表达式的值 z/y z/4.0 z/y%z/x a b|y z a!=b&z 6 a=b&!(y z)a=b&!y z x+1+z x+1 z+-x-y|x+y z&z%3=0(x+,x+=y,x+y),1,1.5,0,1,0,0,1,1,0,1,14,42 基本程序控制结构按照结构化程序设计的思想,程序由三种单入口、单出口的基本结构组成:顺序结构、选择结构、循环结构。C+的控制流就是这三种基本结构组成的。,4.2.1 顺序结构 顺序结构的程序是指程序中的所有语句都是按书写顺序逐一执行的,只有顺序结构的程序功能有限。,例4.2 计算球的体积。已知球的体积公式为:4R3V=3#include void main()float radius,bulk;cout radius;/输入半径 bulk=(4*3.1416*radius*radius*radius)/3;cout bulk=bulk endl;/输出体积,4.2.2 选择结构选择结构也称为分支结构,用于处理在程序中出现了两条或更多执行路径可供选择的情况。选择结构可以用选择语句来实现。选择语句包括 if 语句和 switch 语句。1If 语句if语句有两种格式。格式一:if(条件表达式)语句,功能:对条件表达式求值,若值为真(非0)则执行它后面的语句;否则什么也不做。若需要执行的语句用单条语句写不下,就应该用复合语句。,例4.3 将两个数排序输出。#include void main()float a,b,ls;cout a b;if(a b)ls=a;/以下三句的功能为交换a、b的值 a=b;b=ls;cout a b endl;,格式二 if(条件表达式)语句1 else 语句2格式二的if语句完成的功能:对条件表达式求值,若值为真(非0)执行其后的语句1;否则执行else后面的语句2。即根据条件表达式是否为真分别作不同的处理。下面用格式二的if语句改写例4.3。,例4.4 对例4.3的改写。#include void main()float a,b,ls;cout a b;if(a b)cout a b endl;/先打印a再打印b else cout b a endl;/先打印b再打印a,上一节介绍的条件运算符也可以用if语句来改写。例如:y=(a b)?a:b;可以用下面这个if语句来代替:if(a b)y=a;else y=b;,条件表达式取值false:0true:所有非0值,例4.5 某单位向职工按月发放医疗补贴的具体方案如下:职工工龄在10年以下的,医疗补贴为其基本工资的10%;工龄在10年以上20年以下的,医疗补贴为其基本工资的15%;工龄在20年以上30年以下的,医疗补贴为其基本工资的20%;工龄在30年以上的,医疗补贴为其基本工资的30%。输入某职工的工龄及基本工资,计算他每月应得的医疗补贴。,#include void main()int seniority;double wages,allowance;cout seniority;/输入工龄 cout wages;/输入基本工资 if(seniority 10)/工龄在10年以下 allowance=wages*0.1;else if(seniority 20)/工龄在10年19年 allowance=wages*0.15;else if(seniority 30)/工龄在20年29年 allowance=wages*0.2;else allowance=wages*0.3;/工龄在30年以上 cout The allowance is:allowance endl;,if语句中也可以包含if 语句,这就构成了if语句的嵌套。,例4.5也可以不使用嵌套的if语句。借助逻辑运算符,用几个并列的if语句来完成例4.5的功能:,例4.6 对例4.5的改写。#include void main()int seniority;double wages,allowance;cout seniority;cout wages;if(seniority=10,二义性原与最近匹配原则在将两种格式的if语句混合起来进行嵌套时,要注意正确理解其含义。请看下面的语句:x=9;if(x 2)if(x 2)if(x 2)if(x 4)x=35;else x=78;当x2或者x4时,这两种理解会导致两个不同的答案。这就叫产生了二义性。在绝大多数的语言中,包括C+,都采用最近匹配原则来解决这个问题。所谓最近匹配原则就是每个else必须与离它最近的那个没有匹配的if相匹配。按照这个原则,上面的第二种理解是正确的。,2switch语句switch语句又称为开关语句,其格式如下:switch(表达式)case 常量表达式1:语句序列1 break;case 常量表达式2:语句序列2 break;case 常量表达式n:语句序列n break;default:语句序列n+1 break;,其中,switch后面的表达式的类型必须与case后面的常量表达式的类型一致,而且只能是字符型、整型或枚举型(注意不能是浮点型);case后面的表达式必须是常量表达式,不能含有变量;同一个switch中不能有重复的常量表达式。,switch语句执行的过程如下:先计算switch后面的表达式的值,然后拿它与各case后面的常量表达式比较。当遇到某个case中的常量表达式的值与它相等时,就执行那个case后的语句序列,直到遇到break语句或switch语句结束时的右花括号“”时,才退出switch语句,去执行switch后面的语句。如果没有一个常量表达式与switch后面的表达式值相等,就执行default后的语句序列。,#include void main()int w;/代表星期的整数 cout w;switch(w)case 0:cout Its Sunday.endl;break;case 1:cout Its Monday.endl;break;case 2:cout Its Tuesday.endl;break;,例4.7 根据一个代表星期的0到6之间的整数,在屏幕上打印出它代表的是星期几。,case 3:cout Its Wednesday.endl;break;case 4:cout Its Thursday.endl;break;case 5:cout Its Friday.endl;break;case 6:cout Its Saturday.endl;break;default:cout Invalid data!endl;,default语句是可以缺省的。如果没有default,则当所有匹配都失败时,将不执行任何操作。建议使用default语句,除非case语句已覆盖了所有的可能,以避免由于没有考虑到某种情况而给程序带来的不利影响。,break语句在switch中的作用是跳出整个switch语句。在例4.7中,每个case的语句序列后都有一个break语句(最后一个case或default语句的break可以省略)。在这种情况下,各个case的排列次序可以是任意,不会影响程序的结果。如果没有break,则执行完该case语句的语句序列后,还将接下去执行后面的case的语句序列。在这种情况下,各个case排列的次序不同,就可能产生不同的结果。例如,把例4.7中的break都删去(假定输入的w的值为4),会出现什么情况呢?。如果是在有break的情况下,w应与第五个case中的常量4匹配,从而在屏幕上打印出:Its Thursday.之后就该跳出switch,到达程序末尾并结束。然而,没有了break的switch语句得到的结果与原来大不一样。在打印了上面的字符串后,并不会跳出switch,而是依次进入后面的case及default语句去执行打印语句,于是得到的输出为:Its Thursday.Its Friday.Its Saturday.Invalid data!,如果多个case后的语句序列是相同的,即要做的操作是一样的,可采用下面的格式以避免重复书写:switch(表达式)case 常量表达式1:case 常量表达式2:case 常量表达式i:语句序列 break;case 常量表达式n:语句序列n break;default:语句序列n+1,#include void main()int seniority,s;double wages,allowance;cout seniority;cout wages;s=seniority/10;/得到工龄的十位数字 switch(s)case 0:/工龄在10年以下 allowance=wages*0.1;break;case 1:/工龄在10年19年 allowance=wages*0.15;break;case 2:/工龄在20年29年 allowance=wages*0.2;break;,例4.8 用switch语句来实现例4.5。,这个程序是按工龄不会超过49年来设计的。由于switch 不能象if语句那样可以进行大于、小于等判断,而只能判断是否相等,因此程序中取工龄的十位数字作为switch表达式。,case 3:/工龄在30年49年case 4:allowance=wages*0.3;break;default:allowance=0;cout The allowance is:allowance endl;,4.2.3 循环结构C+中有三种循环语句可用来实现循环结构:while语句、do_while语句和for语句。这些语句各有各的特点,而且常常可以互相替代。在编程时应根据题意选择最适合的循环语句。,1while语句while语句的格式为:,例4.9 计算100之内的奇数之和。#include void main()int n=1;/奇数 int sum=0;/奇数的累加和 while(n 100)/n不能超过100 sum+=n;/累加 n+=2;/修改为下一个奇数 cout The sum is:sum endl;,while语句的执行过程:对条件表达式求值,如果值为真(非0)则执行步骤,否则转步骤;执行循环体中的语句;返回;终止循环,去执行while语句的下一语句。,while(条件表达式)语句/循环体,例4.10 将例4.6改进为可以重复计算不同的人的医疗补贴。以输入的工龄为0作为结束条件。#include void main()int seniority;double wages,allowance;cout seniority;/输入第一个人的工龄 while(seniority!=0)/若工龄不为0则进入循环 cout wages;if(seniority=10/输入下一人的工龄,break语句不仅可用于跳出switch语句,还可用于跳出循环(包括三种循环语句)。但它只能跳出它所在的循环语句或switch语句,不能跳出外层的循环语句或switch语句(如果有的话)。若想跳出外层语句,还要在外层中使用break。,例4.11 从键盘接收10个整数,求它们的平方根。若遇到负数就终止程序。#include#include void main()int i=1,num;double root;while(i num;if(num 0)/若num是负数则退出循环 break;root=sqrt(num);cout root endl;i+;,这个程序有两个出口。每个输入的数在计算其平方根之前都要判断它的正负,若为负数就退出循环,这是一个出口。另外,整型变量被用来实现记数。i的初值为1,每执行一次循环体就将它的值加1,当它的值为11时,表示循环体已经执行了10次,于是循环终止。这是第二个出口。这样的程序可读性较差。,例4.12 对例4.11的改进:遇到负数则忽略并重新输入下一个数据。#include#include void main()int i=1,num;double root;while(i num;if(num 0)/若num是负数则回到循环开始处 cout valid number!;continue;root=sqrt(num);cout root endl;i+;,continue语句用在循环体中,它的作用是忽略循环体中位于它之后的语句,重新回到条件表达式的判断。,2do_while循环语句while语句的特点是先判断条件,再确定是否执行循环体,也即“先判断,后执行”;如果第一次对条件表达式求值时它就为假,则循环体就一次也不被执行。do_while语句是先执行一次循环体之后,再根据条件表达式的值确定是否还要继续执行循环体,也即“先执行,后判断”,循环体至少会被执行一次。do_while语句的格式为:do 语句/循环体 while(条件表达式);其中的条件表达式及语句的规定同while 语句一样。注意条件表达式后面的分号不能少,因为整个do_while语句实际上相当于一条语句。do_while语句的执行过程如下:执行一遍循环体;对条件表达式求值,若为真(非0)则转步骤,否则转步骤;终止循环,去执行do_while语句的下一语句。,do_while和while语句在大多数情况下都可以相互替代(除非是有可能循环体一次也不被执行的情况)。例如,例4.9中是利用while语句来计算100之内的奇数之和的,可以将它改写为用do_while语句来求和。,例4.13 用do_while语句来改写例4.9。#include void main()int n=1;/奇数 int sum=0;/奇数的累加和 do sum+=n;/累加 n+=2;/修改为下一个奇数 while(n 100);cout The sum is:sum endl;,例4.14 根据下面的公式求的值。计算到最后一项的绝对值小于10-6时停止。/4=1 1/3+1/5 1/7#include void main()double pi=0,x=1;int s=1;do pi=pi+s/x;x+=2;s=-s;while(1/x=1e-6);pi=pi*4;cout pi=pi endl;,3for语句当循环次数确定的时候,用 for 语句更为直观。for语句的格式如下:for(表达式1;表达式2;表达式3)语句/循环体其中的表达式1通常用于对循环控制变量进行初始化;表达式2用于表示循环是否结束的条件;表达式3用于对循环控制变量作修改。for语句执行的过程如下:对表达式1求值;对表达式2求值,若其值为真则执行步骤,否则转步骤;执行循环体;对表达式3求值;转步骤;结束循环,去执行for语句的下一语句。,例如:int i;for(i=1;i=10;i+)cout$;程序的运行结果是:$for语句也属于“先判断,后执行”的循环语句,可以用while语句替代。例如,上面这个程序段可以改写为:int i=1;while(i=10)cout$;i+;,C+中for语句的形式很灵活,for后面的三个表达式均可以缺省(但中间的分号不能缺省)。例如上面的程序段也可写成下面的形式:int i=1;for(;i 10)break;cout$;,例4.15 用for语句改写例4.9/例4.13。#include void main()int sum=0;/奇数的累加和 for(int n=1;n 100;n=n+2)sum+=n;/累加 cout The sum is:sum endl;在此例中,将变量n的声明及初始化作为for语句的第一个表达式,这是完全可以的。C+的变量可以随时定义,随时使用。只是定义在不同地方的变量的作用域可能会有所不同。比如上例中,如果将变量n定义在for语句的前面,它的作用域就会发生改变。,4多重循环 一个循环的循环体中如果又包含另外的循环,就构成了循环的嵌套。前者称为外循环,后者称为内循环。根据循环嵌套的重数,可以有双重循环、三重循环,统称多重循环。,例4.16 分析下面程序的运行结果。#include void main()for(int i=1;i=4;i+)for(int j=1;j=5;j+)cout i+j;cout endl;,此程序的输出为:2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9,习题43 解答假定有如下声明:int x=3,y=5,z=0;int*p=计算下列表达式的值:!(73=73)(x!=y)|(c B)z&y|x y z|y&x y 200*x/y double(x)/y+23 x/y+23 c+y%x x*=int(b/a)+y c c=2|y%-x 0+x=y?x+:y+*p*y+x-y,010012023.623678714 15-1,#includevoid main()int x=3,y=5,z=0;int*p=,010012023.623678715 52883,

    注意事项

    本文(表达式与基本程序控制结构.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开