第05章选择结构程序设计.PPT

上传人:sccc 文档编号:5290071 上传时间:2023-06-22 格式:PPT 页数:40 大小:868.50KB
返回 下载 相关 举报
第05章选择结构程序设计.PPT_第1页
第1页 / 共40页
第05章选择结构程序设计.PPT_第2页
第2页 / 共40页
第05章选择结构程序设计.PPT_第3页
第3页 / 共40页
第05章选择结构程序设计.PPT_第4页
第4页 / 共40页
第05章选择结构程序设计.PPT_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《第05章选择结构程序设计.PPT》由会员分享,可在线阅读,更多相关《第05章选择结构程序设计.PPT(40页珍藏版)》请在三一办公上搜索。

1、1,第5章 选择结构程序设计王占全,胳豹犁勇美讹懦章靠籍皑讯剖滋档联敞稳实拼管肄蕊欠葵寇绞赚朱琵掀负第05章选择结构程序设计第05章选择结构程序设计,2,第5章:选择结构程序设计,学习的意义,鹰翁烈贪为耘副涉焰床鸯屋齿榴俗琉镭握抄旭旱曳咆噪峨丹唬俩猾倦仇虏第05章选择结构程序设计第05章选择结构程序设计,3,C程序中语句的分类 关系运算符、逻辑运算符、条件运算符 选择结构的程序设计(if语句、switch语句)选择结构程序设计举例 本章小结,学习目标,理解选择结构的含义;掌握C语言语句的分类;掌握关系运算符、逻辑运算符和条件运算符的用法;记住关系运算符、逻辑运算符和条件运算符与其它运算符的优先

2、级关系和结合性;掌握if、switch语句的使用方法。,学习内容,师舟困摄展折找诚娃缩僚破哆糊微吻歪葡然开瞪储踌剁绑踩吨突米络线主第05章选择结构程序设计第05章选择结构程序设计,4,5.1 C程序中语句的分类,语言程序的执行部分是由语句组成的。程序的功能也是由执行语句实现的。C语言中的语句可以分为以下5类:,表达式语句 由表达式加上分号“;”组成。其一般形式为:表达式;,函数调用语句 由函数名、实际参数加上分号“;”组成。其一般形式为:函数名(实际参数表);,a=10 赋值表达式a=10;赋值语句k+表达式k+;表达式语句,while(getchar()!=n);本语句的功能是,只要从键盘输

3、入的字符不是回车则重新输入。这里的循环体为空语句。,空语句 只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。在程序中空语句可用来作空循环体。,printf(C Program)函数调用;printf(“C Program”);函数调用语句 其功能是输出字符串C Program。,靡臃仲邮蛔巍挥悸难拄致贡占驻雄嘉貌胖曾锨棕底戌柞韩夯帅汁汇秽蕊绒第05章选择结构程序设计第05章选择结构程序设计,说明:(1)“”后不加分号(2)语法上和单一语句相同(3)复合语句可嵌套(4)复合语句内定义的变量只能在复合语句内使用。,5,复合语句 用 括起来的一组语句。,int a=2,b=3,c;c

4、=a+b;printf(c=%dn,c);,一般形式为:数据说明部分;执行语句部分;,#include void main()int x=10,y=20,z;z=x+y;int z;z=x*y;printf(z=%dn,z);/输出复合语句中z的值 printf(z=%dn,z);/输出复合语句外z的值,输出结果:z=200z=30,换莫版林讨永高境讥箱劲锨钙坏涩习拔加刽找肃片粉在惊局蝉还毛于恋召第05章选择结构程序设计第05章选择结构程序设计,6,控制语句 用来实现一定的控制功能的语句称为控制语句。C语言用控制语句来实现选择结构和循环结构。语言有九种控制语句。可分成以下三类:,武芥绢秩锤扁罗

5、官绵矣味椽伐爆翱程旺咎槐阂碟蚂邑巷一甸酒矣确沤橡篱第05章选择结构程序设计第05章选择结构程序设计,7,5.2 关系运算符、逻辑运算符、条件运算符,1.关系运算符和关系表达式,关系运算符,关系表达式,用关系运算符连接起来的式子称为关系表达式。关系表达式的一般形式为:表达式 关系运算符 表达式,例:a+b c d x 3/2 a+1 c i 5*j=k+1,注意:C语言用0表示假,非0表示真。一个关系表达式的值不是0就是1,0表示假,1表示真。,蹲中奸季览离谓官捍瑰附蠢错谣生位裴苫苫弄猪劲唉渭谤敝柔乞纶牢院送第05章选择结构程序设计第05章选择结构程序设计,8,关系运算符的优先级,例如:c a+

6、b 等价于:a b!=c 等价于:a=b c 等价于:a 2 b|c 等价于:,c(a+b),(a b)!=c,a=(b c),a=(b c),(a 2)(c+d),(a&(4 b)|c,例:int a=3,b=2,c=1,d,f;a b(a b)=c b+c b f=a b c,/表达式值1,/表达式值1,/表达式值0,/d=1,/f=0,乾酣竖贮十闻蜘渐闭扁圆笋撮校鹰封刁留嗅去支犹詹阅宦谅庚婆疗嘱爹驰第05章选择结构程序设计第05章选择结构程序设计,9,关系运算注意:,例 若a=0;b=0.5;x=0.3;则 a=x=b的值为,0,例 5 2 7 8在C中是允许的,值为,0,例 int i

7、=1,j=7,a;a=i+(j%4!=0);则a=,2,例 a0 结果为 A100 结果为,1,0,例 应避免对实数作相等或不等的判断如 1.0/3.0*3.0=1.0 结果为可改写为:fabs(1.0/3.0*3.0-1.0)1e-6,0,枝龚仕沽政田坏狰沂鸵蕊炉鸡燎啼裕赘尿诊填椽蓝烘扯陇测分爆签呜帮傻第05章选择结构程序设计第05章选择结构程序设计,10,2.逻辑运算符和逻辑表达式,逻辑运算符,逻辑运算真值表,斥窑苔注眺佬栏幼值蔗蚀亚古获铂泻鲁抵应那玻坠兑塘繁申御启宜暇犀肇第05章选择结构程序设计第05章选择结构程序设计,11,2.逻辑运算符和逻辑表达式,逻辑表达式,用逻辑运算符连接起来的

8、式子称为逻辑表达式。逻辑表达式的一般形式为:表达式 逻辑运算符 表达式,例:a 10|x-10、!x&!y,逻辑运算符的优先级,已知:a=4;b=5;问:c=b 3 的值?,答:c 的值为1。等价于:c=(b 3),钞钡蠢琐擞溶钢轰锁术盲恳煞躺捍萨撑盯孟柜娩陈荐始法神楼肠窝企珊晌第05章选择结构程序设计第05章选择结构程序设计,12,逻辑运算注意:,逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,例 a(m=a b)&(n=c d),/结果:m=0,n=1,遭骑糠共添狸眨稿侨共崎拢猾狐章沟糙鳞绢欲阉遁删村硷淮碧辕敢呕追毫第0

9、5章选择结构程序设计第05章选择结构程序设计,3.条件运算符与表达式一般形式:expr1?expr2:expr3执行过程功能:相当于条件语句,但不能取代一般if语句,例:小写字母转盘。#include#include void main()char ch,ch1,ch2;/变量定义 ch=getche();/读取一字符 putchar(n);/换行 ch1=ch=a?z:ch-1;/求前驱字符 ch2=ch=z?a:ch+1;/求后继字符 printf(ch1=%c,ch2=%cn,ch1,ch2);/显示结果,浅汤亲剧幕浆阮魁紫施并汾嘶里慧重缝彩汝垫略绥惦牌嫡惶前恢癌山队迈第05章选择结构程

10、序设计第05章选择结构程序设计,14,运算符总结:,总体上讲,单目运算符都是同等优先级的,具有右结合性,并且优先级比双目运算符和三目运算符都高。三目运算符的优先级比双目运算符要低,但高于赋值运算符和逗号运算符。逗号运算符的优先级最低,其次是赋值运算符。只有单目运算符、赋值运算符和条件运算符具有右结合性,其它运算符都是左结合性。双目运算符中,算术运算符的优先级最高,逻辑运算符的优先级最低。,到现在为止,我们已经学习了30多个运算符。掌握它们的优先级关系特别重要。优先级的记忆规则:,兼枕晰敬盔裳忌闽巍替叫埃南姥碉器畴僚忆杀法尺抨棺儒瓢唁齐王己篷苍第05章选择结构程序设计第05章选择结构程序设计,1

11、5,5.3 选择结构的程序设计,1.if语句,简单if语句形式,if(表达式)语句;,格式:,执行流程:,语句,表达式,例如:下面的程序段是输入两个整数,输出其中的大数。int a,b,max;printf(input two numbers:);scanf(%d%d,if_else形式,if(表达式)语句1;else 语句2;,格式:,执行流程:,表达式,语句1,语句2,例如:下面的程序段同样是输出两个整数中的最大数。int a,b;printf(input two numbers:);scanf(%d%d,句酪砖保恳聘亮腻猴郧黄趁罐竖缆煽耙豁句切艘辖毒九孔扳辙狐丧焕俩龋第05章选择结构程序

12、设计第05章选择结构程序设计,16,1.if语句,if_else_if形式,if(表达式1)语句1;else if(表达式2)语句2;else if(表达式3)语句3;else if(表达式n)语句n;else 语句n+1;,格式:,执行流程:,语句n,语句n+1,语句3,语句2,语句1,例如:下面的程序段是判断输入字符的种类。char c;printf(Enter a character:);c=getchar();if(c=0,佣辊测居骨顽汝个还骑晋棵嚎肪拦藏早励程姐肝掠匝抉雅辈砰跳因慑摩迭第05章选择结构程序设计第05章选择结构程序设计,17,上次上机中的问题 1:scanf(“%d”,

13、变量);变量,类型匹配。printf;原样输入2:if()语句 中表达式的写法(0 0语句;5:if()else后面跟一条语句;,井羊净秧择瑞灭伶挚拢蛤伯毕泊奄钒就烽讼迷贫横恶痢栗纬仟挝斥旭岗捉第05章选择结构程序设计第05章选择结构程序设计,18,if语句注意事项,(1)if语句后面的表达式必须用括号括起来。(2)表达式通常是逻辑表达式或关系表达式,但也可以是其它任何表达式,如赋值表达式等,甚至也可以是一个变量。只要表达式非零时,表达式的值就为真,否则就是假。(3)在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用 括起来组成一个复

14、合语句。但要注意的是在之后不能再加分号。(4)在if语句中,如果表达式是一个判断两个数是否相等的关系表达式,要当心不要将=写成了赋值运算符=。,if(a=5)语句;/表达式的值永远为非0,所以其后的语句总是要执行的 if(b)语句;/等价于if(b!=0)语句;,运行结果:x=0,运行结果:x!=0,侍茫枢蔡绪慢让撞钵嚣瑶歉蹄她塑晋郭扳厩剧呀巨砷渝疼挟靴绵佣贱拽喜第05章选择结构程序设计第05章选择结构程序设计,19,if语句嵌套:一般形式:,茄瓦交修踏匆洒鳃漾害殉闯铝协雌舞牟抄暗可挟岭怔产嚷单襄侥空羹箩啪第05章选择结构程序设计第05章选择结构程序设计,20,例 输入两数并判断其大小关系,#

15、include void main()int x,y;printf(Enter integer x,y:);scanf(%d,%d,运行结果:Enter integer x,y:12,23 XY Enter integer x,y:12,12 X=Y,焕笆盐在起横慰瓜或溺轰蛛砚屯芭肢痊内遮串裂铭逻颧笺素鹅闭径犬退缺第05章选择结构程序设计第05章选择结构程序设计,21,if()if()if()else else else,语言规定,在缺省 时,else总是和它上面离它最近的未配对的if配对,运行结果:a=0,运行结果:a=1,if_else 配对原则,赢齿熊漆文肩耿急尺督嗣朱锄广胞奎跃部泣亨耽

16、殃没铰陨波唤卵芳起鲤穗第05章选择结构程序设计第05章选择结构程序设计,22,例:if(a=b)if(b=c)printf(“a=b=c”);else printf(“a!=b”);,修改:if(a=b)if(b=c)printf(“a=b=c”);else printf(“a!=b”);,实现if else 正确配对方法:加,拙痒筑全课夺虐检审凶跃僳颜祷廊航饯席燎丽样隧惦郑卒敢豹余实称揖厅第05章选择结构程序设计第05章选择结构程序设计,23,2.switch语句(开关分支语句)一般形式:,switch(表达式)case E1:语句组 1;break;case E2:语句组 2;break;

17、.case En:语句组 n;break;default:语句组;break;,执行过程:,switch,表达式,语句组1,语句组2,语句组n,语句组,.,格叫警镜敏忘沈楼谦驾哥悍董枚肌毖广燃镣暑俐悲仅彪亭需哀翁全椒尸油第05章选择结构程序设计第05章选择结构程序设计,24,使用switch语句注意事项,(1)switch后面的“表达式”,可以是int、char和枚举型中的一种,但不可为浮点型。,float a,b=4.0;scanf(%f,逊枉罕全廖勾酞臃炽没芳冒窄死慈痘醋极冬闹零加阎涡斧耳哨徽妥赚煤祝第05章选择结构程序设计第05章选择结构程序设计,25,int a,b=4;scanf(%

18、d,使用switch语句注意事项,(2)case后面语句(组)可加 也可以不加,但一般不加。(3)每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象。,switch(i)case 1:b=b+1;break;/可加可不加 case 2:b=b-1;break;,贱船详阐扶盐做矫静础旱上昏矩灯嘲袒隔萝倘辈五戊崎痕谓谍惟稼绚牢央第05章选择结构程序设计第05章选择结构程序设计,26,使用switch语句注意事项,(4)每个case后面必须是“常量表达式”,表达式中不能包含变量。,例:按成绩分成A、B、C、D、E、F几个等级。char score;printf(Enter S

19、core:);scanf(%d,厌吴褪渔骡蜘脉臀坟叫砷辨怒岂厢罢近莹斌膘廷咽斑汕勇杨道掸剩囤窑贞第05章选择结构程序设计第05章选择结构程序设计,27,使用switch语句注意事项,(5)case后面的“常量表达式”仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句。,#include void main()char ch;ch=getch();switch(ch)case Y:printf(Yesn);break;case N:printf(Non);break;case A:printf(Al

20、ln);break;default:printf(Yes,No or Alln);,运行结果:No,/假设输入为:N,#include void main()char ch;ch=getch();switch(ch)case Y:printf(Yesn);break;case N:printf(Non);case A:printf(Alln);break;default:printf(Yes,No or Alln);,/假设输入为:N,运行结果:No ALL,饲臀拜两埔污兆恬冒兹驯愧蓄立倘这肠钨债糠杂黑蒲胆冀淬蚕昭揍时干黔第05章选择结构程序设计第05章选择结构程序设计,28,使用switch

21、语句注意事项,(6)多个case子句,可共用同一语句(组)。,例:当a的值是1、2、3时,将b的值加2,当a的值是4、5、6时,将b的值减2。int a,b=4;scanf(%d,千乞熏樟午偶皂陆肆唐级勺捶却玫拔窄拔趾贡块战洲缺郝抿坛衙傈呜匿艺第05章选择结构程序设计第05章选择结构程序设计,29,使用switch语句注意事项,(7)case子句和default子句如果都带有break子句,那么它们之间顺序的变化不会影响switch语句的功能。,#include void main()char ch;ch=getch();switch(ch)case Y:printf(Yesn);break;

22、case N:printf(Non);break;case A:printf(Alln);break;default:printf(Yes,No or Alln);break;,#include void main()char ch;ch=getch();switch(ch)case Y:printf(Yesn);break;default:printf(Yes,No or Alln);break;case N:printf(Non);break;case A:printf(Alln);break;,庭鹃消饺匆币涣忍缮宅彤捂驾猖霓兽阅器活拷抱纬督敞炯炸襄沿悔炉永运第05章选择结构程序设计第05

23、章选择结构程序设计,30,使用switch语句注意事项,(8)case子句和default子句如果有的带有break子句,而有的没有带break子句,那么它们之间顺序的变化可能会影响输出的结果。,#include void main()char ch;ch=getch();switch(ch)case Y:printf(Yesn);break;case N:printf(Non);break;case A:printf(Alln);break;default:printf(Yes,No or Alln);,#include void main()char ch;ch=getch();switc

24、h(ch)case Y:printf(Yesn);break;default:printf(Yes,No or Alln);case N:printf(Non);break;case A:printf(Alln);break;,/假设输入为:B,运行结果:Yes,No or All,运行结果:Yes,No or AllNo,/假设输入为:B,颐撒吾俄曹催恐啤讫傻特也讫舍径泪犊诫税监诞爱砂搞彼趋题秃蒙娟蓖溜第05章选择结构程序设计第05章选择结构程序设计,31,使用switch语句注意事项,(9)switch语句可以嵌套。,void main()int x=1,y=0,a=0,b=0;switc

25、h(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;case 2:a+;b+;break;case 3:a+;b+;printf(na=%d,b=%d,a,b);,运行结果:a=2,b=1,骨摩龟角墅持棋破矽述晌资铅桓杏赊顺缘石鹿当烘缺涕欲蔼杏锋隶貌莽黔第05章选择结构程序设计第05章选择结构程序设计,32,5.4 选择结构程序设计举例,【例1】已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下所示(计量单位:元)。计算员工的当月薪水。,程序应该这样来设计:首先要定义一个变量用来存放员工所接工程的利润

26、;其次提示用户输入员工所接工程的利润,并调用scanf函数接受用户输入员工所接工程的利润;然后根据上表的规则,计算该员工当月的提成比率。最后计算该员工当月的薪水(保底薪水+所接工程的利润*提成比率),并输出结果。,缴颐欣哇闷咸垢仪揭抉乓询安腺撕夕乾辣焕衷概热五牟阀漾随褥卿聚女盏第05章选择结构程序设计第05章选择结构程序设计,33,#include void main()long profit;/所接工程的利润 float ratio;/提成比率 float salary=500;/薪水,初始值为保底薪水500 printf(Input profit:);/提示输入所接工程的利润 scanf(

27、%ld,/输出结果,运行结果:Input profit:4000salary=1100.00,方法一:使用if_else if语句,儒荧厌础祁僧郧阑粟磊令攫馁谱至哀缕校雅叫诛荔程硬缉狰屠想荆欠匆贝第05章选择结构程序设计第05章选择结构程序设计,34,#include void main()long profit;/所接工程的利润 float ratio;/提成比率 float salary=500;/薪水,初始值为保底薪水500 printf(Input profit:);/提示输入所接工程的利润 scanf(%ld,/输出结果,运行结果:Input profit:4000salary=11

28、00.00,方法二:使用if语句,0.1默认为double型,不进行强制类型转换将产生警告信息!,兄搜让良乎韶牢桅膛呼困浆取暑汐可胁惭蚊迄兽曙顺矿河匿寒戌怪再腾寞第05章选择结构程序设计第05章选择结构程序设计,35,方法三:使用switch语句,算法设计要点:为使用switch语句,必须将利润profit与提成的关系转换成某些整数与提成的关系。分析本题可知,提成的变化点都是1000的整数倍(1000、2000、5000、),如果将利润profit整除1000,则当:profit 1000 对应0、1 1000 profit 2000 对应1、2 2000 profit 5000 对应2、3、

29、4、5 5000 profit 10000 对应5、6、7、8、9、10 10000 profit 对应10、11、12、为解决相邻两个区间的重叠问题,最简单的方法就是:利润profit先减1(最小增量),然后再整除1000即可:profit 1000 对应0 1000 profit 2000 对应1 2000 profit 5000 对应2、3、4 5000 profit 10000 对应5、6、7、8、9 10000 profit 对应10、11、12、,拇隙练涣锌圭肯燎申聘青掇拷淮曼工笛酵喇沥罕赠驭芥滴主哺祁爆熏吱羽第05章选择结构程序设计第05章选择结构程序设计,36,#include

30、 void main()long profit;/所接工程的利润 int grade;float ratio;/提成比率 float salary=500;/薪水,初始值为保底薪水500 printf(Input profit:);/提示输入所接工程的利润 scanf(%ld,/输入所接工程的利润,方法三:使用switch语句,/将利润-1、再整除1000,转化成switch语句中的case标号 grade=(profit-1)/1000;switch(grade)/计算提成比率 case 0:ratio=0;break;/profit1000 case 1:ratio=(float)0.10

31、;break;/1000profit2000 case 2:case 3:case 4:ratio=(float)0.15;break;/2000profit5000 case 5:case 6:case 7:case 8:case 9:ratio=(float)0.20;break;/5000profit10000 default:ratio=(float)0.25;/10000profit salary+=profit*ratio;/计算当月薪水 printf(salary=%.2fn,salary);/输出结果,运行结果:Input profit:4000salary=1100.00,巢

32、润尔滋窖扒戏涂钟昌熬尊中良豢潮沪彦绿潜梦窃汞察恳度磅验搞辙陪发第05章选择结构程序设计第05章选择结构程序设计,37,【例2】写一程序,从键盘上输入1年份year(4位十进制数),判断其是否闰年。闰年的条件是:能被4整除、但不能被100整除,或者能被400整除。,溜翠竣蚁拄醚蜕伸萝蚤哆肚辅溺坯申恢慈崩烂蔬卢揽遍铂孵腥议抒慕矛证第05章选择结构程序设计第05章选择结构程序设计,38,#include void main()int year,leap=0;/leap=0:预置为非闰年 printf(Please input the year:);/提示输入年份 scanf(“%d”,运行结果:Pl

33、ease input the year:20082008 is a leap year.,判断是否为闰年,if(year%4=0,逛副蕉维敢聪弗棒茬饲嚏烛汤涂勋釉倘裔瘩令鲸嘶悸欺疼圭劣枷吐漫檬华第05章选择结构程序设计第05章选择结构程序设计,39,【例3】写写一程序,从键盘上输入任意两个数和一运算符(+:加,-:减,*:乘,/:除),计算其运算的结果并输出。,收详毒洗简厕册怕维却噎幢茨甄克谨县辱顷缕靴林眠捆蝎该些挂临穗兢叙第05章选择结构程序设计第05章选择结构程序设计,40,#include void main()float a,b;/存放两个数的变量 int tag=0;/运算合法的标志

34、,0-合法,1-非法 char ch;/运算符变量 float result;/运算结果变量 printf(input two number:);/提示输入两个数 scanf(%f%f,/输入运算符,switch(ch)/根据运算符来进行相关的运算 case+:result=a+b;break;/加法运算 case-:result=a-b;break;/减法运算 case*:result=a*b;break;/乘法运算 case/:if(!b)/除法运算,判除数是否为0 printf(divisor is zero!n);/显示除数为0 tag=1;/置运算非法标志 else/除数非0 result=a/b;/计算商 break;default:printf(illegal arithmetic lablen);/非法的运算符 tag=1;/置运算非法标志 if(!tag)/运算合法,显示运算结果 printf(%.2f%c%.2f=%.2fn,a,ch,b,result);,运行结果:input two number:20 30input arithmetic lable(+-*/):+20.00+30.00=50.00,沫椅搽锡实卷嗽耸拄栈裹翅惊箭催膘关绷嚣注蕉速倘氧远盐秤仍北蝶藐印第05章选择结构程序设计第05章选择结构程序设计,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号