




已阅读5页,还剩59页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章选择结构程序设计,关系运算符和关系表达式逻辑运算符和逻辑表达式if语句switch语句程序举例,回顾,printf()和scanf()函数属于格式输入输出函数getchar()和putchar()函数用来输入输出单个字符的函数赋值语句的概念和作用顺序结构编程思想,目标,熟练使用关系运算符熟练使用逻辑运算符掌握简单的条件语句的使用熟练使用多重if结构熟练使用printf和scanf函数熟练使用嵌套if结构熟练使用switch结构理解条件运算符的用法,一、关系运算符和关系表达式,符号种类:=!=结合方向:自左向右优先级别:关系表达式的值:是逻辑值“真”或“假”,用1和0表示,例ca+b/c(a+b)ab!=c/(ab)!=ca=bc/a=(bc),例inta=3,b=2,c=1,d,f;ab(ab)=cb+cbf=abc,/表达式值1,/表达式值1,/表达式值0,/d=1,/f=0,返回,运算符的优先级,sizeof:给出它右边的操作数的字节大小。,练习1,假设num1=3,num2=4,num3=5,则:(1)num1num2的值。(2)(num1num2)!=num3的值。(3)num1b53x0,表达式值为axy?1:1.5/xy,值为1.0;x0?a+b:a-b);,例(a=b)?Y:N(x%2=1)?1:0(x=0)?x:-x(c=a,形式二:格式:if(expression)statement1elsestatement2执行过程:,例:if(xy)max=x;elsemax=y;,四、选择结构程序设计,if语句(条件选择语句)if语句的三种形式形式一:格式:if(expression)Statement执行过程:,形式三:格式:,if(expr1)statement1elseif(expr2)statement2elseif(expr3)statement3.elsestatementn,例:if(salary1000)index=0.4;elseif(salary800)index=0.3;elseif(salary600)index=0.2;elseif(salary400)index=0.1;elseindex=0;,执行过程:,如:if(a=b,说明:if后面的表达式类型任意,语句可以是复合语句if(x)if(x!=0)if(!x)if(x=0),例5.1考虑下面程序的输出结果:#includemain()intx,y;scanf(“%d,%d”,CompileError!,if语句嵌套:一般形式:,if(expr2)statement1,例5.2输入两数并判断其大小关系,/*ch5_2.c*/#includemain()intx,y;printf(Enterintegerx,y:);scanf(%d,%d,运行:Enterintegerx,y:12,23XYEnterintegerx,y:12,12X=Y,ifelse配对原则:缺省时,else总是和它上面离它最近的未配对的if配对,例:if(a=b)if(b=c)printf(“a=b=c”);elseprintf(“a!=b”);,修改:if(a=b)if(b=c)printf(“a=b=c”);elseprintf(“a!=b”);,实现ifelse正确配对方法:加,main()intx=100,a=10,b=20;intv1=5,v2=0;if(a0,y=1,Y,N,y=0,程序2:,if(x=0)if(x0)y=1;elsey=0;elsey=1;,语句改为:,x!=0,N,y=0,Y,x0,y=1,Y,程序3:,y=-1,错误!,y=1;if(x!=0)if(x0)y=1;elsey=0;,语句改为:,x=0,N,y=-1,Y,x0,y=1,Y,程序4:,y=0,错误!,y=0;if(x=0)if(x0)y=1;elsey=1;,例5.5键盘输入三个数,并取出最大值。,/*功能:说明if语句的格式。*/main()intnum1,num2,num3,max;printf(Pleaseinputthreenumbers:);scanf(%d,%d,%d,程序运行情况如下:,本案例中的第1个if语句,可优化为如下不带else子句的形式:这种优化形式的基本思想是:首先取一个数预置为max(最大值),然后再用max依次与其余的数逐个比较,如果发现有比max大的,就用它给max重新赋值,比较完所有的数后,max中的数就是最大值。这种方法,对从3个或3个以上的数中找最大值的处理,非常有效。请各位仔细体会。,Pleaseinputthreenumbers:11,22,18Thethreenumbersare:11,22,18max=22,max=num1;if(num2max)max=num2;,例5.6输入任意三个数num1、num2、num3,按从小到大的顺序排序输出。,main()intnum1,num2,num3,temp;printf(Pleaseinputthreenumbers:);scanf(%d,%d,%d,1if语句的一般格式if(表达式)语句组1;else语句组2;(1)if语句中的“表达式”必须用“(”和“)”括起来。(2)else子句(可选)是if语句的一部分,必须与if配对使用,不能单独使用。(3)当if和else下面的语句组,仅由一条语句构成时,也可不使用复合语句形式(即去掉花括号)。2if语句的执行过程(1)缺省else子句时当“表达式”的值不等于0(即判定为“逻辑真”)时,则执行语句组1,否则直接转向执行下一条。如图P45,4.1,要点:,(2)指定else子句时当“表达式”的值不等于0(即判定为“逻辑真”)时,则执行语句组1,然后转向下一条语句;否则,执行语句组2。如图4-1(b)所示。3if语句的嵌套与嵌套匹配原则if语句允许嵌套。所谓if语句的嵌套是指,在“语句组1”或(和)“语句组2”中,又包含有if语句的情况。if语句嵌套时,else子句与if的匹配原则:与在它上面、距它最近、且尚未匹配的if配对。为明确匹配关系,避免匹配错误,强烈建议:将内嵌的if语句,一律用花括号括起来。,案例5.7写一程序,从键盘上输入1年份year(4位十进制数),判断其是否闰年。闰年的条件是:能被4整除、但不能被100整除,或者能被400整除。,算法设计要点:如果能被整除,则余数为,即如果的值等于,则表示能被整除!首先将是否闰年的标志leap预置为0(非闰年),这样仅当year为闰年时将leap置为1即可。这种处理两种状态值的方法,对优化算法和提高程序可读性非常有效,请读者仔细体会。参考程序如下:/*功能:说明if语句的嵌套格式和用法。*/,设用变量year表示年号,leap为待置值变量,当year为闰年:leap1,否则leap0。,流程图,leap%400=0,leap1,leap=0,打印非闰年,打印是闰年,结束,leap0,yes,No,yes,No,A,3.程序1:,main()intyear,leap;scanf(%d,elseleap=0;,elseleap=1;elseleap=0;if(leap)printf(%dis,year);elseprintf(%disnot,year);printf(aleapyearn);,main()intyear,leap=0;/*leap=0:预置为非闰年*/printf(Pleaseinputtheyear:);scanf(%d,3.程序2:,当(year%4!=0)(year%100=0break;caseE2:语句组2;break;.caseEn:语句组n;break;default:语句组;,执行过程:,break,break,break,default,1、一般形式:,返回,2、执行过程,(1)当switch后面“表达式”的值,与某个case后面的“常量表达式”的值相同时,就执行该case后面的语句(组);当执行到break语句时,跳出switch语句,转向执行switch语句的下一条。,(2)如果没有任何一个case后面的“常量表达式”的值,与“表达式”的值匹配,则执行default后面的语句(组)。然后,再执行switch语句的下一条。,3、说明,(1)switch后面的“表达式”,可以是int、char和枚举型中的一种(有限的个数)。,(2)每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。,(3)case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句。,(4)各case及default子句的先后次序,不影响程序执行结果。,(5)多个case子句,可共用同一语句(组)。例如,在案例4.5中的“case10:”和“case9:”共用语句“printf(grade=An);break;”,“case5:”“case0:”共用语句“printf(grade=En);break;”。,(6)用switch语句实现的多分支结构程序,完全可以用if语句或if语句的嵌套来实现。,如:caseA:caseB:caseC:printf(“score60n”);break;.,说明:E1,E2,En是常量表达式,且值必须互不相同case语句标号作用,必须用break跳出case后可包含多个可执行语句,且不必加switch可嵌套,break只能跳出一层嵌套多个case可共用一组执行语句default可放在任意case后,相当case作用,default不要再加break。,总结:,1、常表值必须互不相等,否则二异性。,2、case顺序无关紧要。,3、不一定非用break不可,有时几种情况合并执行一组语句。,switch(score)case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);,运行结果:score为5时,输出:Verygood!Good!Pass!Fail!dataerror!,例5.8,voidmain()intx=1,y=0,a=0,b=0;switch(x)case1:switch(y)case0:a+;break;case1:b+;break;case2:a+;b+;break;case3:a+;b+;printf(“na=%d,b=%d”,a,b);,运行结果:a=2,b=1,例5.9,其语义是:计算表达式的值,并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。,/*ch5_10.c*/#includemain()intc;printf(Entermornorhorother:);c=getchar();switch(c)casem:printf(nGoodmorning!n);break;casen:printf(nGoodnight!n);break;caseh:printf(nHello!n);break;default:printf(n?n);break;,例5.10根据输入字母输出字符串。,返回,程序举例,案例5.11求一元二次方程ax2+bx+c=0的解(a0)。,分析:,#includemain()floata,b,c,disc,x1,x2,p,q;scanf(%f,%f,%f,if(fabs(disc)1e-6)x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);printf(x1=%7.2f,x2=%7.2fn,x1,x2);,elsep=-b/(2*a);q=sqrt(fabs(disc)/(2*a);printf(x1=%7.2f+%7.2fin,p,q);printf(x2=%7.2f-%7.2fin,p,q);,案例5.12已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下(计量单位:元):profit1000没有提成;1000profit2000提成10%;2000profit5000提成15%;5000profit10000提成20%;10000profit提成25%。,为使用switch语句,必须将利润profit与提成的关系,转换成某些整数与提成的关系。分析本题可知,提成的变化点都是1000的整数倍(1000、2000、5000、100000)。,如果将利润profit整除1000后再取整,则当:profit1000对应01000profit2000对应12000profit5000对应2、3、45000profit10000对应5、6、7、8、910000profit对应10、11、12、,main()longprofit;intgrade;floatsalary=500;printf(Inputprofit:);scanf(%ld,switch(grade)case0:break;case1:salary+=profit*0.1;break;case2:case3:case4:salary+=profit*0.15;break;case5:case6:case7:case8:case9:salary+=profit*0.2;break;default:salary+=profit*0.25;printf(salary=%.2fn,salary);,良好的源程序书写风格注释,1、必要的注释,可有效地提高程序的可读性,从而提高程序的可维护性。,2、在语言源程序中,注释可分为三种情况:(1)在函数体内对语句的注释;(2)在函数之前对函数的注释;(3)在源程序文件开始处,对整个程序的总体说明。,3、函数体内的语句,是由顺序结构、选择结构和循环结构等三种基本结构构成的。在什么地方加以注释的原则是:如果不加注释,理解起来就会有困难,或者虽无困难、但浪费时间。,(1)顺序结构在每个顺序程序段(由若干条语句构成)之前,用注释说明其功能。除很复杂的处理外,一般没有必要每条语句都加以注释。,(2)选择结构,在C语言中,选择结构是由if语句和switch语句来实现的。一般地说
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绿色环保低碳建材产业园建设项目技术方案
- 腰痛考试题多选题及答案
- 堤防地质勘察与风险评估
- 水库扩建工程施工方案
- 企业离职补偿及员工培训协议范本
- 双方财产清算及分期偿还债务协议书
- 商业设施租赁合同范本:购物中心租赁合同
- 离婚协议子女抚养权及财产分割详细范本指南
- 研究型大学全职教师聘任与科研成果转化合同
- 采购文员考试试题及答案
- 2025湖北宜昌市不动产交易和登记中心招聘编外聘用人员17人考试参考题库及答案解析
- 疼痛介入治疗的护理
- DB44-T 2542-2024 自然教育基地建设规范
- 《拒绝努力羞耻症》学习动力主题班会课件
- 2025AICon全球人工智能开发与应用大会-上海站:昇腾推理技术的优化实践
- 第2课 信息技术伴成长教学设计-2025-2026学年小学信息技术(信息科技)第八册(2019)电子工业版(安徽)
- 2025年中国酒店行业白皮书-
- 2025年数字解密:药食同源生意下最香的成分与赛道研究报告
- GB/T 12643-2025机器人词汇
- Q∕GDW 12174-2021 智能量测开关技术规范
- T∕CBJ 2111-2022 调香白酒
评论
0/150
提交评论