高级语言程序设计(CC++版) 课件 第3章 选择结构_第1页
高级语言程序设计(CC++版) 课件 第3章 选择结构_第2页
高级语言程序设计(CC++版) 课件 第3章 选择结构_第3页
高级语言程序设计(CC++版) 课件 第3章 选择结构_第4页
高级语言程序设计(CC++版) 课件 第3章 选择结构_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

第3章

选择结构目录if语句嵌套的if语句关系运算符与关系表达式逻辑运算符与逻辑表达式条件运算符与条件表达式switch语句216:121.if语句if语句通常用来实现双分支选择,它通过判断条件表达式取值(true或false),选择执行相应的语句序列。if语句的一般格式为:if(表达式)语句1[else语句2]if...else的功能是:当表达式为真时(非0值为真,0值为假)执行语句1,否则执行语句2(else子句为可选项,无该选项时与语句2为空语句等价)。语句1和语句2可以是一个简单语句,也可以是一个复合语句,甚至是一条空语句。表达式可以是关系表达式、逻辑表达式,甚至是数值表达式。其执行流程图如图3.1所示。3返回16:12例3.1:输入一个双精度浮点数,将其向0舍入到整数。向0舍入的含义是“正数向下舍入,负数向上舍入”输入:输入一个双精度浮点数。输出:该双精度浮点数向0舍入的整数。样例输入:3.14样例输出:3#include<iostream>usingnamespacestd;intmain(){ doublea;cin>>a;if(a>0)cout<<int(a)<<endl;elsecout<<-int(-a)<<endl;return0;}416:12例3.2:输入三个整数,按从小到大的顺序输出这三个数?#include<iostream>usingnamespacestd;intmain(){ inta,b,c,temp; cin>>a>>b>>c; if(a>b){ temp=a; a=b; b=temp; }

if(b>c){ temp=b; b=c; c=temp; } if(a>b){ temp=a; a=b; b=temp; } cout<<a<<""<<b<<""<<c<<endl; return0;}516:122.嵌套的if语句if语句还可通过嵌套实现多分支选择,其一般格式如下:if(条件1)语句1elseif(条件2)语句2elseif(条件3)语句3……注意:if语句可以缺少else选项,但else不能脱离if关键字单独使用。else必须与if关键字配套使用,且else总是与离它最近的还未配对的if匹配。6返回16:12例3.3:输入一个整数,判断该数是正数、负数还是零。输入:一个整数。输出:该数为正数则输出“positive”,负数则输出“negative”,零则输出“zero”。#include<iostream>usingnamespacestd;intmain(){ inta; cin>>a; if(a>0)cout<<"positive"<<endl; elseif(a<0)cout<<"negative"<<endl; elsecout<<"zero"<<endl; return0;}716:12例3.4:龟兔赛跑中,已知乌龟速度为a米每秒,兔子速度为b米每秒,龟兔赛跑的赛程总长度为s米,兔子在比赛中到达终点前的某一时刻睡着了(且仅睡着这一次),耽误了t秒的时间,如果乌龟赢了输出"Turtlewin",兔子赢了输出"Rabbitwin",否则输出"Tie"。#include<iostream>usingnamespacestd;intmain(){ inta,b,s,t; cin>>a>>b>>s>>t; doubletur=(double)s/a; doublerab=(double)s/b+t; if(tur<rab)cout<<"Turtlewin"; elseif(tur>rab)cout<<"Rabbitwin"; elsecout<<"Tie"; return0;}816:12例3.5:输入a、b、c,求一元二次方程ax2+bx+c=0的解。

输入:三个整数a、b、c。

输出:方程ax2+bx+c=0的解(保留两位精度),a=0则输出“Thisisnotaquadraticequation”。若有多个解,则多个解以空格分隔输出。#include<cstdio>#include<cmath>intmain(){ doublea,b,c,delta,x1,x2,realpart,imagpart; scanf("%lf%lf%lf",&a,&b,&c); if(fabs(a)<=1e-6)printf("Theequationisnotaquadraticequation\n"); else { delta=b*b-4*a*c; if(fabs(delta)<=1e-6)printf("%.2f\n",-b/(2*a)); elseif(delta>1e-6) { x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a); printf("%.2f%.2f\n",x1,x2); } else { realpart=-b/(2*a); //realpart是复根的实部 imagpart=sqrt(-delta)/(2*a); //imagpart是复根的虚部 printf("%.2f+%.2fi",realpart,imagpart); //输出一个复根 printf("%.2f-%.2fi\n",realpart,imagpart); //输出另一个复根 } } return0;}916:123.关系运算符与关系表达式关系运算符也称比较运算符,关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,“<、<=、>、>=”的优先级相同,“==、!=”的优先级相同,且前四个运算符优先级高于后两个运算符。10返回16:12例3.6:输入一个整数,判断该数的奇偶性(“odd”或“even”)。

输入:一个整数。

输出:奇数则输出“odd”,偶数则输出“even”。#include<iostream>usingnamespacestd;intmain(){ inta; cin>>a; if(a%2==0)cout<<"even"<<endl; elsecout<<"odd"<<endl; return0;}1116:124.逻辑运算符与逻辑表达式关系运算符可以方便地构成相对简单的条件判断,而逻辑运算符则可以连接多个关系表达式构成逻辑表达式,以表达相对复杂的条件组合判断。逻辑运算符包括与(&&)、或(||)、非(!)3种,C/C++中逻辑运算符的含义和逻辑运算的真值表分别见表3.1和表3.2。

“&&”和“||”是双目运算符,“!”是单目运算符。“!”的优先级别高于关系运算符和所有的双目运算符,“&&”和“||”的优先级则低于算术运算符和关系运算符,而“&&”的优先级又高于“||”。逻辑运算符和其它运算符优先级从低到高依次为:

非(!)>算术运算符>关系运算符>与(&&)>或(||)>赋值运算符(=)在逻辑表达式的求值过程中,并非所有的逻辑运算符都能够得到执行,只有当必须要执行下一个逻辑运算符才能求解表达式的值时,才执行该运算符。a&&b&&c。只有a为真时才需要计算b的值,只有当a和b都为真时才需要判别c的值。a‖b‖c。只要a为真,就不再判断b和c。只有a为假时才判别b,a和b都为假才判别c。12返回运算符含义示例真值&&与p&&q若p和q均为真则判定为真,否则为假||或p||q若p和q均为假则判定为假,否则为真!非!p若p真则!p为假,若p假则!p为真pq!p!qp&&qp||q11001110010101100100110016:12例3.7:输入年份year,判断该年是否为闰年。

输入:输入一个整数代表年份。

输出:若该年是闰年则输出“yearisaleapyear”,否则输出“yearisnotaleapyear”。#include<iostream>usingnamespacestd;intmain(){ intyear; cin>>year; if((year%4==0&&year%100!=0)||year%400==0)cout<<year<<"isaleapyear"<<endl; elsecout<<year<<"isnotaleapyear"<<endl; return0;}//地球绕太阳运行周期为365天5小时48分46秒(合计365.24219天)1316:125.条件运算符与条件表达式“?:”是条件运算符,条件表达式需要3个操作对象,“?”和“:”一起出现在表达式中,条件运算符是C/C++中唯一的一个三目运算符。使用条件表达式的一般形式为:

<表达式1>?<表达式2>:<表达式3>条件表达式的计算过程为:

计算表达式1的值;

若表达式1的值为真(非0),则仅计算表达式2并将其结果作为整个表达式的值;

若表达式1的值为假(0)则仅计算表达式3并将其结果作为整个表达式的值。14返回16:12例3.8:输入两个整数,输出其中的较大数。

输入:两个整数。

输出:两个整数中的较大数。#include<iostream>usingnamespacestd;intmain(){ inta,b,max; cin>>a>>b; max=a>b?a:b; cout<<max<<endl; return0;}1516:126.switch语句if…else…语句可清晰便捷地实现双分支选择,当需要处理的分支情况较多时,使用switch语句可使程序结构更清晰,执行速度更快。switch常和关键词case、break、default等一起配合使用。switch语句的一般格式如下:switch(表达式){ case常量表达式1:[语句1][break;]

…… case常量表达式n:[语句2][break;] default:[语句n+1]}16返回16:12说明switch语句中表达式的取值只能是整型、字符型、布尔型或枚举型。花括号内是一个复合语句,内包含多个以关键字case开头的语句行和最多一个以default开头的行。case后面跟一个常量(或常量表达式,其取值类型与表达式类型一致),它们和default都是起标号作用,用来标志一个位置。执行switch语句时,先计算switch后面的“表达式”的值,然后将它与各case标号比较,如果与某一个case标号中的常量相同,流程就转到此case标号后面的语句。如果没有与switch表达式相匹配的case常量,流程转去执行default标号后面的语句。可以没有default标号,此时如果没有与switch表达式相匹配的case常量,则不执行任何语句。各个case标号出现次序不影响执行结果。任意两个case后的常量表达式取值必须不同,否则将导致冲突。case标号只起标记的作用。在执行switch语句时,根据switch表达式的值找到匹配的入口标号,在执行完一个case标号后面的语句后,就从此标号开始执行下去,不再进行判断。因此,一般情况下,在执行一个case子句后,应当用break语句使流程跳出switch结构。最后一个case子句(今为default子句)中可不加break语句。在case子句中虽然包含了一个以上执行语句,但可以不必用花括号括起来,会自动顺序执行本case标号后面所有的语句。当然加上花括号也可以。break语句为可选项,用于终止

switch

中的一个case,是否需要视具体情形而定。若某几个case子句后无break语句,则这几个case子句和随后紧跟的第一个带break语句的case子句共用一组执行语句。1716:12例3.9:给定一个百分制成绩,请根据百分制成绩输出其对应的等级。转换关系如下:90分及以上为'A',80~89为'B',70~79为'C',60~69为'D',60分以下为'E'。

输入:一个百分制成绩(0~100的整数)。

输出:成绩对应的等级。#include<iostream>usingnamespacestd;intmain(){ intscore; scanf("%d",&score); switch(score/10) { case10: case9:printf("A\n");break; case8:printf("B\n");break; case7:printf("C\n");break; case6:printf("D\n");break; default:printf("E\n"); } return0;}1816:12例3.10:输入三个整数,输出最大数和最小数。

输入:输入三个整数a、b、c。

输出:三个数中的最大数和最小数(以空格分隔)。#include<iostream>usingnamespacestd;intmain(){ inta,b,c,max,min;cin>>a>>b>>c; if(a>b){ max=a; min=b; } else{ max=b; min=a; }if(max<c)max=c;elseif(min>c)min=c;cout<<max<<""<<min;return0;}1916:12例3.11:输入运算数和四则运算符,输出计算结果。

输入:输入两个浮点数和一个操作符。

输出:输出计算结果(精度为2)。#include<cstdio>intmain(){ doublea,b; charc; scanf("%lf%lf%c",&a,&b,&c);

switch(c)

{ case'+':printf("%.2lf\n",a+b);break;

case'-':printf("%.2lf\n",a-b);break;

cas

温馨提示

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

评论

0/150

提交评论