第三章36-选择结构-课件_第1页
第三章36-选择结构-课件_第2页
第三章36-选择结构-课件_第3页
第三章36-选择结构-课件_第4页
第三章36-选择结构-课件_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

根据某个指定的条件是否满足来决定执行的内容。例如,购物在1000元以下的打九五折,1000元及以上的打九折。ifamount<1000tax=0.95;//amount代表购物总额,tax代表折扣elsetax=0.9;pay=amount*tax;//pay为实付款流程可以用图3.4表示图3.43.6关系运算和逻辑运算

作用:根据所指定的条件是否满足, 决定从给定的两组操作选择其一。

最常见的形式为:

if(关系表达式)语句1else语句2if(x>0)y=1;elsey=一l;其中x>0是一个关系表达式。“>”是一个关系运算符。

3.6.1关系运算符和关系表达式“关系运算”“比较运算”。两个值进行比较,判断其结果是否符合给定条件。例如:a>3关系表达式>关系运算符如果a=5,则“a>3”满足条件关系表达式的值为“真”;如果a=2,则“a>3”不满足条件,关系表达的值为“假”。1.关系运算符及其优先次序

c语言提供6种关系运算符:①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)⑤==(等于)⑥!=(不等于)优先级相同(高)优先级相同(低)注意:

关系运算符的优先级低于算术运算符。关系运算符的优先级高于赋值运算符。见下

例如:C>A+b等效于C>(A+b)A>b==C等效于(A>b)==CA==b<C等效于A==(b<C)A=b>C等效于A=(b>C)算术运算符关系运算符赋值运算符(高)(低)2关系表达式

用关系运算符将两个表达式连接起来的式子。

算术关系逻辑赋值字符表达式表达式表达式表达式表达式例如:a>ba+b>b+c(a=3)>(b=5)(a>b)>(b<c)’a’<‘b’关系表达式的值是一个逻辑值,即“真”或“假”。

成立

不成立

103.6.2逻辑常量和逻辑变量C++的逻辑型常量只有两个,即false(假)和true(真)。逻辑型变量的定义:boolfound,flag=false;found=true;布尔变量布尔常量逻辑型,就是布尔型设立逻辑类型的目的是为了看程序时直观易懂3.6.3逻辑运算符和逻辑表达式

用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑毒达式。BASIC语言(a>b)AND(x>y)1逻辑运算符及其优先次序(1)&&逻辑与(相当于其他语言中的AND)(2)||逻辑或(相当于其他语言中的OR)(3)!逻辑非(相当于其他语言中的NOT)“&&”和“||”是“双目(元)运算符”,它要求有两个运算量(操作数)逻辑运算的真值表:在一个逻辑表达式中如果包含多个逻辑运算符,如按以下的优先次序:(1)!(非)&&(与)||(或),即“!”为三者中最高的。(2)逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算术运算符。(见书中图5.2)aa&&bb!b!aa||b真真假假真假真假假假真真假真假真真假假假真真真假2逻辑表达式逻辑表达式的值是一个逻辑量

一个量的判断“真”“假”

以非0代表“真”05>3&&2||8<4-!0aa&&bb!b!aa||b非0非000非00非000011010110001110注意与前面的真值表进行比较逻辑表达式的求解:(1)a&&b&&c只有a为真(非0)时,才判b值,a和b都为真判c值。

只要a为假,不必判别b和c。如果a为真,b为假,不判别c。见图5.3abc0(假)非0(真)0(假)0(假)非0(真)非0(真)0(假)1(真)(2)a||b||c

只要a为真(非0)时,不必判别b和c。只有a为假,才判b值,a和b都为假才判c值。如果a为假,b为真,不判别c。见图5.4abc0(假)非0(真)0(假)0(假)非0(真)非0(真)0(假)1(真)3.7if语句if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。if语句的三种形式:1、if(表达式)语句2、if(表达式)语句1else语句23、if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3elseif(表达式m)语句melse语句n其三种if语句的相应流程图如下:表达式语句表达式语句1语句20(假)非0(真)(真)(假)表达式表达式表达式语句3语句2语句1语句4假真假假真真例:if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075; elseif((number>50)cost=0.05; elsecost=0;说明:关系表达式0值假(1)if后表达式逻辑表达式1值真(2)else前面一个分号,本语句结束一个分号if(x>0)printf(“%f”,x);elseprintf(“%f”,-x);(3)if和else内嵌操作语句可是多个语句即复合语句if(a+b>c&&b+c>a&&c+a>b){s=0.5*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“area=%6.2f”,area)}elseprintf(“itisnotatrilateral”);举例说明:main(){floata,b,c,t;scanf(“%f,%f,%f”,&a,&b,&c);if(a>b){t=a;a=b;b=t;}//实现a和b的互换if(a>c){t=a;a=c;c=t:}//实现a和c的互换if(b>c){t=b;b=c;c=t:}//实现b和c的互换printf(“%5.2f,%5.2f,%5.2f”,a,b,c);}运行情况如下:3,7,11.00,3.00,7.00举例说明:3.7.2if语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套,特别要注意if与else的配对关系。请比较以下两种嵌套的区别If()If()语句1else()语句2elseIf()语句3else语句4If()If()语句1elseIf()语句2else语句3内嵌if内嵌if内嵌if编程序者把else写在与第一个if(外层if)同一列上,希望else是与第一个if对应,但实际上else是与第二个if配对,因为它们相距最近。因此最好使内嵌if语句也包含else这样if的数目一一对应,不致出错。-1(x<0)y=0(x=0)1(x>0)voidmain()if(x>=0){intx,y;if(x>0)y=1;scanf(“%d”,&x);elsey=0;If(x<0)y=-1;elsey=-1;y=0;elseif(x==0)y=0;y=-1;if(x>=0)elsey=1;if(x!=0)if(x>0)y=1;printf(“%d,%d”,x,y);if(x>0)y=1;elsey=-1;}elsey=0;3.7.3条件运算符if(a>b)max=a;elsemax=b可以用下面的条件运算符来处理:max=(a>b)?a:b;?:为三目(元)运算符一般格式:表达式1?表达式2:表达式3(1)先求表达式1真假求表达式2求表达式3整个表达式的值整个表达式的值其执行过程见图:表达式1条件表达式取表达式2的值非0(真)0(假)条件表达式取表达式3的值

(2)条件运算符优先级高于赋值运算符max=a>b?a:b(3)条件运算符为右结合性a>b?a:c>d?c:d(4)if(a>b)printf(“%d”,a);elseprintf(“%d”,b);printf(“%d”,a>b?a:b)例3.7输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。#include<iostream>usingnamespacestd;intmain(){charch;cin>>ch;ch=(ch>=′A′&&ch<=′Z′)?(ch+32):ch;//判别ch是否大写字母,是则转换cout<<ch<<endl;return0;}求二元一次方程的根#include<iostream>#include<cmath>usingnamespacestd;intmain(){floata,b,c,disc,x1;floatx2,real,imag;cin>>a>>b>>c;if(fabs(a)<=1e-6)cout<<“isnotaquadratic”;elsedisc=b*b-4*a*c;if(fabs(disc)<=1e-6)cout<<-b/(2*a);elseif(disc>1e-6)

{x1=(-b+sqrt(disc)/(2*a));x2=(-b+sqrt(disc)/(2*a));cout<<x1<<“”<<x2<<endl;

}else

{real=-b/(2*a);imag=sqrt(-disc)/(2*a);cout<<real<<“+”<<imag<<“i”;cout<<endl;cout<<real<<“+”<<imag<<“i”;cout<<endl;}return0;}a等于0Disk等于0Disk大于0Disk小于03.9Switch语句switch语句是多分支选择语句。用来实现多分支选择结构。if语句只有两个分支可供选择,而实际问题中常常需要用到多分支的选择。例如,学生成绩分类(85分以上为‘A’等,70~84分为‘B’等,60~69分为‘C’等……);人口统计分类(按年龄分为老、中、青、少、儿童);工资统计分类;银行存款分类……。当然这些都可以用嵌套的订语句来处理,但如果分支较多,则嵌套的订语句层数多,很容易造成混乱和阅读性差.C++语言提供switch语句直接处理多分支选择,它相当于PASCAL语言中的CASE语句。它的一般形式如下:switch(表达式){case常量表达式1:语句1case常量表达式2:语句2...case常量表达式n:语句nDefault:语句n+1}例如,要求按照考试成绩的等级打印出百分制分数段,可以用switch语句实现:switch(grade){case’A’:printf(“85~l00\n");case’B’:printf(“70—84\n'');case’C’:printf(“60~69\n”);case’D’:printf(“<60\n”);default:printf("error\n'');}“表达式”,允许为任何类型表达式的值与某一个case子句中的常量表达式的值相匹配时,就执行此case子句中的内嵌语句所有的case子句中的常量表达式的值都不能与switch表达式的值匹配,就执行default子句的内嵌语句。case表达式的值必须互不相同case和default的出现次序不影响执行结果执行完一个case子句后,流程控制转移到下一个case子句继续执行上面的例子中,若grade的值等于‘A’,则将连续输出:85~10070~8460~69<60error因此,我们要在执行一个case分支后,使流程跳出switch结构,即终止switch语句的执行。可以用一个break语句来达到此目的。问题出现将前面的switch结构改写如下:switch(grade){case’A’:printf(”85~100\n");break;Case’B’:printfC70~84\n”);break;case’C’:printf(”60~69\n”);break;Case’D’:printf(”<60\n”);break;default:printf("error\n');}最后一个分支(default)可以不加break语句。如果grade的值为,B,,则只输出"70~84'。流程图见下:grade输出85--100输出70--84输出60--69输出<60输出error‘A’‘C’‘B’‘D’其他3.10程序举例判断某一年是否闰年。在第2章的例2.3,例2.13曾介绍过判别闰年的方法。现在我们用图5.13来表示判别闰年的算法。以变量1eap代表是否闰年的信息。Year被4整除真假Year被100整除真假真假Year被400整除Loop=1Loop=0Loop=0Loop=1Loop真输出“闰年”输出非“闰年”假#include<iostream>usingnamespacestd;intmain(){intyear;boolleap;cout<<″pleaseenteryear:″;//输出提示cin>>year;//输入年份if(year%4==0)//年份能被4整除{if(year%100==0)//年份能被4整除又能被100整除{if(year%400==0)//年份能被4整除又能被400整除leap=true;//闰年,令leap=true(真)elseleap=false;}//非闰年,令leap=false(假)else//年份能被4整除但不能被100整除肯定是闰年leap=true;}//是闰年,令leap=true

else//年份不能被4整除肯定不是闰年leap=false;//若为非闰年,令leap=falseif(leap)cout<<year<<″is″;//若leap为真,就输出年份和“是”elsecout<<year<<″isnot″;//若leap为真,就输出年份和“不是”cout<<″aleapyear.″<<endl;//输出“闰年”return0;}运行情况如下:①2019↙2019isnotaleapyear.②1900↙1900isnptaleapyear.也可以将程序中第8~16行改写成以下的if语句:if(year%4!=0)leap=false;elseif(year%100!=0)leap=true;elseif(year%400!=0)leap=false;elseleap=true;也可以用一个逻辑表达式包含所有的闰年条件,将上述if语句用下面的if语句代替:if((year%4==0&&year%100!=0)||(year%400==0))leap=true;elseleap=false;例3.9运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:

温馨提示

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

评论

0/150

提交评论