第三章36-选择结构-课件

上传人:沈*** 文档编号:241652810 上传时间:2024-07-13 格式:PPT 页数:39 大小:307.50KB
返回 下载 相关 举报
第三章36-选择结构-课件_第1页
第1页 / 共39页
第三章36-选择结构-课件_第2页
第2页 / 共39页
第三章36-选择结构-课件_第3页
第3页 / 共39页
点击查看更多>>
资源描述
根据某个指定的条件是否满足来决定执行的内容。例如,购物在1000元以下的打九五折,1000元及以上的打九折。if amount0)y1;else y一一l;其中其中x0是一个关系表达式。是一个关系表达式。“”是是 一个关系运算符。一个关系运算符。3.6.1关系运算符和关系表达式关系运算符和关系表达式 “关系运算关系运算”“比较运算比较运算”。两个值进行比较,判断其结果是否符合给定条件。两个值进行比较,判断其结果是否符合给定条件。例如:例如:a3 关系表达式关系表达式 关系运算符关系运算符 如果如果a=5,则,则“a3”满足条件满足条件 关系表达式的值为关系表达式的值为“真真”;如果如果a=2,则,则“a3”不满足条件,不满足条件,关系表达的值为关系表达的值为“假假”。1.关系运算符及其优先次序关系运算符及其优先次序 c语言提供语言提供6种关系运算符:种关系运算符:(小于)(小于)(大于)(大于)=(大于或等于)(大于或等于)=(等于)(等于)!=(不等于不等于)优先级相同(高)优先级相同(高)优先级相同(低)优先级相同(低)注意:注意:关系运算符的优先级低于算术运算符。关系运算符的优先级高于赋值运算符。见下见下 例如:例如:CA+b 等效于等效于C(A+b)Ab=C 等效于等效于(Ab)=CA=bC 等效于等效于 A=(bC 等效于等效于 A=(bC)算术运算符算术运算符关系运算符关系运算符赋值运算符赋值运算符(高)(高)(低)(低)2 关系表达式关系表达式 用关系运算符将用关系运算符将两个表达式两个表达式连接起来的式子。连接起来的式子。算术算术 关系关系 逻辑逻辑 赋值赋值 字符字符 表达式表达式 表达式表达式 表达式表达式 表达式表达式 表达式表达式例如:例如:ab a+bb+c (a3)(b5)(ab)(bc)ab)AND(xy)1 逻辑运算符及其优先次序逻辑运算符及其优先次序 (1)&逻辑与逻辑与(相当于其他语言中的相当于其他语言中的AND)(2)|逻辑或逻辑或(相当于其他语言中的相当于其他语言中的OR)(3)!逻辑非逻辑非(相当于其他语言中的相当于其他语言中的NOT)“&”和和“|”是是“双目双目(元元)运算符运算符”,它要求有两个运,它要求有两个运算量算量(操作数)操作数)逻辑运算的真值表:逻辑运算的真值表:在一个逻辑表达式中如果包含多个逻辑运算符,如在一个逻辑表达式中如果包含多个逻辑运算符,如按以下的优先次序:按以下的优先次序:(1)!(非非)&(与与)|(或或),即,即“!”为三者中最高为三者中最高的。的。(2)逻辑运算符中的逻辑运算符中的“&”和和“|”低于关系运算符,低于关系运算符,“!”高于算术运算符。高于算术运算符。(见书中图(见书中图5.2)aa&bb!b!aa|b真真假假真假真假假假真真假真假真真假假假真真真假2 逻辑表达式逻辑表达式 逻辑表达式的值是一个逻辑量逻辑表达式的值是一个逻辑量 一个量的判断一个量的判断 “真真”“假假”以非以非0代表代表“真真”0 53&2|8500)cost=0.15;else if(number300)cost=0.10;else if(number100)cost=0.075;else if(number50)cost=0.05;else cost=0;说明:关系表达式 0值 假 (1)if后表达式 逻辑表达式 1值 真 (2)else前面一个分号,本语句结束一个分号 if(0)printf(“%f”,x);else printf(“%f”,-x);(3)if和else内嵌操作语句可是多个语句即复合语句 if(a+bc&b+ca&c+ab)s=0.5*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf(“area=%6.2f”,area)else printf(“it is not a trilateral”);举例说明:举例说明:main()float a,b,c,t;scanf(“f,f,f”,&a,&b,&c);if(ab)ta;ab;bt;/实现实现a和和b的互换的互换if(ac)ta;ac;ct:/实现实现a和和c的互换的互换if(bc)tb;bc;ct:/实现实现b和和c的互换的互换printf(“52f,52f,52f”,a,b,c);运行情况如下:运行情况如下:3,7,1 1.00,3.00,7.00举例说明:举例说明:3.7.2 if语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套,特别要注意if与else的配对关系。请比较以下两种嵌套的区别请比较以下两种嵌套的区别If ()If ()语句1 else()语句2else If ()语句3 else 语句4If ()If()语句1 else If ()语句2 else 语句3内嵌if内嵌if内嵌if编程序者把编程序者把else写在与第一个写在与第一个if(外层外层if)同一列上,希望同一列上,希望else是与第一个是与第一个if对应,但实际上对应,但实际上else是与第二个是与第二个if配对,配对,因为它们相距最近。因此最好使内嵌因为它们相距最近。因此最好使内嵌if语句也包含语句也包含else这样这样if的数目一一对应,不致出错。的数目一一对应,不致出错。-1 (x0)void main()if(x=0)int x,y;if(x0)y=1;scanf(“%d”,&x);else y=0;If(x=0)else y=1;if(x!=0)if(x0)y=1;printf(“%d,%d”,x,y);if(x0)y=1;else y=-1;else y=0;3.7.3 条件运算符条件运算符if(ab)max=a;else max=b可以用下面的条件运算符来处理:可以用下面的条件运算符来处理:max=(ab)?a:b;?:为为三目(元)运算符三目(元)运算符一般格式:表达式一般格式:表达式1?表达式?表达式2:表达式:表达式3(1)先求表达式先求表达式1 真真 假假求表达式求表达式2求表达式求表达式3整个表整个表达式的值达式的值整个表整个表达式的值达式的值其执行过程见图:其执行过程见图:表达式1条件表达式取表达式2的值非非0(真)(真)0(假)(假)条件表达式取表达式3的值(2)条件运算符优先级高于赋值运算符条件运算符优先级高于赋值运算符 max=ab?a:b (3)条件运算符为右结合性条件运算符为右结合性 ab?a:cd?c:d (4)if(ab)printf(“%d”,a);else printf(“%d”,b);printf(“%d”,ab?a:b)例3.7 输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。#include using namespace std;int main()char ch;cinch;ch=(ch=A&ch=Z)?(ch+32):ch;/判别ch是否大写字母,是则转换 coutchendl;return 0;求二元一次方程的根#include#include using namespace std;int main()float a,b,c,disc,x1;float x2,real,imag;cinabc;if(fabs(a)=1e-6)cout“is not a quadratic”;else disc=b*b-4*a*c;if(fabs(disc)=1e-6)cout1e-6)x1=(-b+sqrt(disc)/(2*a);x2=(-b+sqrt(disc)/(2*a);coutx1“”x2endl;else real=-b/(2*a);imag=sqrt(-disc)/(2*a);coutreal“+”imag“i”;coutendl;coutreal“+”imag“i”;coutendl;return 0;a等于0Disk等于0Disk大于0Disk小于03.9 Switch语句语句switch语句是多分支选择语句。用来实现多分支选择语句是多分支选择语句。用来实现多分支选择结构。结构。if语句只有两个分支可供选择,而实际问题中语句只有两个分支可供选择,而实际问题中常常需要用到多分支的选择。常常需要用到多分支的选择。例如,学生成绩分类例如,学生成绩分类(85分以上为分以上为A等,等,7084分为分为B等,等,6069分为分为C等等);人口统计分类;人口统计分类(按年龄按年龄分为老、中、青、少、儿童分为老、中、青、少、儿童);工资统计分类;银行存;工资统计分类;银行存款分类款分类。当然这些都可以用嵌套的订语句来处理,但如果分当然这些都可以用嵌套的订语句来处理,但如果分支较多,则嵌套的订语句层数多,很容易造成混乱和支较多,则嵌套的订语句层数多,很容易造成混乱和阅读性差阅读性差.C+语言提供语言提供switch语句直接处理多分支选择,语句直接处理多分支选择,它相当于它相当于PASCAL语言中的语言中的CASE语句。它的一语句。它的一般形式如下:般形式如下:switch(表达式表达式)case常量表达式常量表达式1:语句:语句1 case常量表达式常量表达式2:语句:语句2 .case常量表达式常量表达式n:语句:语句nDefault:语句语句n+1例如,要求按照考试成绩的等级打印出百分制分数段,例如,要求按照考试成绩的等级打印出百分制分数段,可以用可以用switch语句实现:语句实现:switch(grade)case A:printf(“85l00n);case B:printf(“7084n);case C:printf(“6069n”);case D :printf(“60n”);default:printf(errorn);“表达式表达式”,允许为,允许为任何类型任何类型表达式的值与某一个表达式的值与某一个case子句中的常量表达式的子句中的常量表达式的值相匹配时,就执行此值相匹配时,就执行此case子句中的内嵌语句子句中的内嵌语句所有的所有的case子句中的常量表达式的值都不能与子句中的常量表达式的值都不能与switch表达式的值匹配,就执行表达式的值匹配,就执行default子句的内子句的内嵌语句嵌语句。case表达式的值表达式的值必须互不相同必须互不相同case和和default的的出现次序不影响出现次序不影响执行结果执行结果执行完一个执行完一个case子句后,流程控制子句后,流程控制转移到下一个转移到下一个case子句继续执行子句继续执行上面的例子中,若上面的例子中,若grade的值等于的值等于A,则将连续输出:,则将连续输出:851007084606960error因此,我们要在执行一个因此,我们要在执行一个case分支后,使流程跳出分支后,使流程跳出switch结构,即终结构,即终止止switch语句的执行。语句的执行。可以用一个可以用一个break语句来达到此目的。语句来达到此目的。问题出现问题出现将前面的将前面的switch结构改写如下:结构改写如下:switch(grade)caseA:printf(”85100n);break;CaseB:printfC7084n”);break;caseC:printf(”6069n”);break;CaseD:printf(”60n”);break;default:printf(errorn);最后一个分支最后一个分支(default)可以不加可以不加break语句。如果语句。如果grade的值为,的值为,B,则只输出,则只输出7084。流程图见下:流程图见下:grade输出85-100输出70-84输出60-69输出60输出errorACBD其他3.10 程序举例程序举例判断某一年是否闰年。在第2章的例2.3,例2.13曾介绍过判别闰年的方法。现在我们用图513来表示判别闰年的算法。以变量1eap代表是否闰年的信息。Year被4整除真假Year被100整除真假真假Year被400整除Loop=1Loop=0Loop=0Loop=1Loop真输出“闰年”输出非“闰年”假#include using namespace std;int main()int year;bool leap;coutyear;/输入年份 if(year%4=0)/年份能被4整除 if(year%100=0)/年份能被4整除又能被100整除 if(year%400=0)/年份能被4整除又能被400整除 leap=true;/闰年,令leap=true(真)else leap=false;/非闰年,令leap=false(假)else /年份能被4整除但不能被100整除肯定是闰年 leap=true;/是闰年,令leap=true else /年份不能被4整除肯定不是闰年 leap=false;/若为非闰年,令leap=false if(leap)coutyear is;/若leap为真,就输出年份和“是”else coutyear is not;/若leap为真,就输出年份和“不是”cout a leap year.endl;/输出“闰年”return 0;运行情况如下:2019 2019 is not a leap year.1900 1900 is npt a leap year.也可以将程序中第816行改写成以下的if语句:if(year%4!=0)leap=false;else if(year%100!=0)leap=true;else if(year400!=0)leap=false;elseleap=true;也可以用一个逻辑表达式包含所有的闰年条件,将上述if语句用下面的if语句代替:if(year%4=0&year%100!=0)|(year%400=0)leap=true;else leap=false;例3.9 运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:s250km 没有折扣 250s500 2折扣 500s1000 5折扣 1000s2000 8折扣 2000s3000 10折扣 3000s 15折扣设每公里每吨货物的基本运费为p(price的缩写),货物重为w(wright的缩写),距离为,折扣为d(discount的缩写),则总运费f(freight的缩写)的计算公式为 f=p*w*s*(1-d)图3.8据此写出程序如下:据此写出程序如下:#include#include using namespace std;using namespace std;int main()int main()int c,s;int c,s;float p,w,d,f;float p,w,d,f;coutplease enter p,w,s coutpws;cinpws;if(s=3000)c=12;if(s=3000)c=12;else c=s/250;else c=s/250;switch(c)switch(c)case 0 case 0:d=0;break;d=0;break;case 1 case 1:d=2;break;d=2;break;case 2 case 2:case 3 case 3:d=5;break;d=5;break;case 4 case 4:case 5case 5:case 6 case 6:case 7 case 7:d=8;break;d=8;break;case 8 case 8:case 9 case 9:case 10 case 10:case 11 case 11:d=10;break;d=10;break;case 12 case 12:d=15;break;d=15;break;f=p*w*s*(1-d/100.0);f=p*w*s*(1-d/100.0);coutfreight=fendl;coutfreight=fendl;return 0;return 0;运行情况如下:运行情况如下:please enter p,w,splease enter p,w,s:100 20 300100 20 300freight=588000freight=588000 Thank you拯畏怖汾关炉烹霉躲渠早膘岸缅兰辆坐蔬光膊列板哮瞥疹傻俘源拯割宜跟三叉神经痛-治疗三叉神经痛-治疗
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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