Clanguage第5章选择结构.ppt

上传人:小飞机 文档编号:6503115 上传时间:2023-11-07 格式:PPT 页数:42 大小:230.49KB
返回 下载 相关 举报
Clanguage第5章选择结构.ppt_第1页
第1页 / 共42页
Clanguage第5章选择结构.ppt_第2页
第2页 / 共42页
Clanguage第5章选择结构.ppt_第3页
第3页 / 共42页
Clanguage第5章选择结构.ppt_第4页
第4页 / 共42页
Clanguage第5章选择结构.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《Clanguage第5章选择结构.ppt》由会员分享,可在线阅读,更多相关《Clanguage第5章选择结构.ppt(42页珍藏版)》请在三一办公上搜索。

1、第5章 选择结构程序设计,主要内容:关系运算符和关系表达式 逻辑运算符和逻辑表达式 if-else(重点、难点)switch 条件运算符和条件表达式(了解)根据选择结构的组成特点,我们在分析问题时着重明确以下两点:1)条件是什 么。2)条件成立和不成立时分别执行什么操作。,简单条件用关系表达式来表示例5.1 判断一个整数n是奇数还是偶数(设n由用户输入)分析:第一步,输入整数n。第二步,判断:若条件“n%2等于0“成立,则输出“n为偶数“;否则输出“n为奇数“。,5.1关系运算符和关系表达式,main()int n;printf(“n enter int n:”);scanf(“%d”,开始,

2、输入n,n%2为0,是偶数,是奇数,结束,输入n,例5.2输入任一考生的考号及成绩,判断其是否能上大学。(设分数线为600,若能上,则输出“success“,否则输出”failure”)。分析:第二步是选择结构,条件是“score大于等于600”,main()int no;float score;printf(“n enter no,score:”);scanf(“%d%f”,关系表达式的值:若条件满足,则关系表达式的值为ture(1);否则,关系表达式的值为false(0)。1.关系运算符:=!=例如下列关系表达式:ab 表示条件“a 大于 b“,x!=0 表示条件“x 等于 0“,a+b

3、关系运算符 赋值运算符 且=高于=!=结合性:自左向右(一般很少连用)。如:abb)c f=ag+1 表示 f=(a(g+1),特别提示:关系运算符“=”与赋值运算符“=”不同。比较:k=1 与k=1特别提示:表达式 a+bdc也是合法的关系表达式,但在实际应用中很少使用;因为它不能表示:a+b大于c且大于d。问题:如何表示:a x b 0y10 等条件,5.2 逻辑运算符和逻辑表达式,复杂条件可用逻辑表达式来描述例5.3 判断当前温度是否满足观赏鱼正常生活需要的温度(1520摄氏度)。(设当前温度由用户输入)。main()int temperature;printf(“n enter the

4、 temperature:”);scanf(“%d”,1.逻辑运算符 则!x-1、!y-0 x&y-0 x|y-1特别提示:if(!x)等价于 if(x=0),2.逻辑表达式:由逻辑运算符将一个或多个表达式连接起来的式子。比如:1)a和b中只有一个为0的逻辑表达式为:a+b!=0&a*b=02)某英语专业的招生条件“总分(total)超过分数线(600)并且英语成绩(score)不低于85分“,该条件的逻辑表达式为:total600&score=85 3)判断某年是润年应满足以下两个条件之一:该年能被4整除但不能被100整除,或该年能被400整除。该条件对应的逻辑表达式为:year%4=0&y

5、ear%100!=0|year%400=0,3 逻辑运算符的优先级和结合性当条件表达式中同时出现多个运算符时,首先按优先级计算,当同时出现多个优先级相同的运算符时,再按结合性计算。优先级:!算术运算符关系运算符&|赋值运算符结合性:逻辑与&、逻辑或|的结合性:自左向右,逻辑非!的结合性:自右向左 例如:(下页),优先级与结合性举例,例如:设int h=3,j=3,k=3;double x=0,y=2.3;计算下列表达式的值:h&j&k 等价于(h&j)&k hj&xy 等价于(hj)&(xy)hk|xy 等价于(hk)|(xy)x!=y&j+1=!k+4 等价于(x!=y)&(j+1)=(!k

6、)+4)结果:1,0,1,1,逻辑表达式计算特例,在逻辑表达式的计算过程中,当该表达式的值能够确定时,就停止该表达式的计算,即并不是表达式中所有的运算符都被执行。例5.4:1)设有如下定义:int a=1,b=2,c=3,d=4,m=2,n=2;则执行表达式:(m=ab),5.3 if 语句,if语句能实现所有的选择结构例5.5 将任意两个整数m、n中的较大数送给x,较小数送给y,然后按大小顺序输出(设m、n的值由键盘输入)分析:共分三步,S1:输入两个整数给m和n。S2:判断m、n的大小并分别给x和y 赋值。S3:输出x和y。其中第二步用选择结构.,main()int m,n,x,y;pri

7、ntf(“n please enter two integers:”);scanf(“%d%d”,思考:若条件改为:mn,如何实现?,1.If语句的一般形式:if(表达式)语句1 else 语句2 执行过程:(如右图)格式说明:语句1 和语句2 在语法上是一个语句,可以是简单语句,也可以是复合语句。在此要特别注意复合语句中一对 的正确使用。,2.if 语句的简化形式,例5.6 从键盘接收一个字符,若为大写字母,则将其转换成小写字母并输出;否则输出原字符。分析:共三步,其中第二步判断ch是大写字母的条件是:ch 在AZ之间#include main()char ch;printf(“n ente

8、r a character:”);/*第一步,输入ch*/ch=getchar();getchar();if(ch=A/*第三步,输出*/,2.if语句的简化形式,if(expression)statement1 执行过程如图:例:输入任意数n,输出其绝对值。main()float a;scanf(“%f”,3.if语句的嵌套,当if语句中的语句1或语句2又是if语句时,就构成了if语句的嵌套,嵌套的if语句能实现多分支结构。例5.7 猜数游戏:假设m是一个整型数15,让用户从键盘上输入所猜数字(用户已知数的范围是1020),若猜对,则输出“RIGHT”,否则,输出”WRONG“,并指出所猜的

9、数比m大还是小。分析:共3个分支 第一步,输入猜测的数n。第二步,判断并输出结果:条件可以是“m等于n”,若条件成立,则输出 RIGHT;否则,需执行两步操作:输出WRONG,判断m、n的大小:条件可以是“nm”;条件成立时输出“big”;否则输出“small”。很明显,又是一个选择结构。,main()int m=15,n;printf(n guess a num:);scanf(%d,例5.8某幼儿园只接收26岁的小孩,其中23岁编入小班,45岁编入中班,6岁编入大班。编程实现,对输入的任意一个年龄,输出该编入什麽班,或者告知“不收“。分析:首先根据条件“年龄在26岁之间”判断是“收”还是“

10、不收“,若条件满足,则执行的操作为:(1)判断该编入何班;否则,输出“不收”。其次,分析(1)如何实现。提示:本例可用不同的程序实现。如将条件改为“年龄超出26岁”;或者从条件“年龄小于2”开始判断。试编程实现。,main()int age;printf(“n enter age:”);scanf(“%d”,/*语句2*/,If语句中的语句1和语句2都可以包含if语句。If语句的嵌套结构中,因为else 是可选项,所以要注意if与else的匹配。C语言规定:else总是与其前面最近的、还没有匹配过的if相匹配,并且是由里向外逐对对匹配。编程时,可以通过合理使用 来明确if与else匹配关系。,

11、例5.10:分析以下两个程序,哪一个能实现:从键盘上接收一个整数,若该数为正偶数,则输出“positive and even.”;若为负数,则输出“negative”。程序(1):main()int n;printf(“n enter a integer:”);scanf(“%d”,画出该程序的流程图,程序结构更清楚。,例5.10程序(2):main()int n;printf(“n enter a integer:”);scanf(“%d”,4条件运算符,使用if语句时,有时是为了根据条件给同一个变量赋不同的值,比如:main()int x,y;scanf(“%d”,本例中,当条件满足或不满

12、足时分别执行一个赋值语句,且都是给变量 y 赋值。用C语言提供的条件运算符描述,比用if语句更简练。上述if语句等价于:y=x0?x+1:x*x+1;,其中“x0?x+1:x*x+1”是一个“条件表达式”,条件运算符:?:条件表达式的一般格式:表达式1?表达式2:表达式3计算过程:首先计算表达式1;若其值为真(非0),则计算表达式2,取表达式2的值作为整个条件表达式的值;否则,计算表达式3,取表达式3的值作为整个条件表达式的值。优先级:条件运算符的优先级比关系运算符和算术运算符都低,比赋值运算符高。例如:y=x0?x+1:x*x+1 等价于 y=((x0)?(x+1):(x*x+1))说明:并

13、不是所有的if语句都能用条件表达式实现。如 if(n0)a=6;else b=8;,5.4 switch语句,switch语句可用来处理一部分特殊的多分支选择结构。即根据某个表达式的值进行选择,而不能根据表达式的取值范围作出选择,所以使用时有很大的局限性。.如学生成绩等级分类,幼儿园分班等。若用if语句实现,程序冗长,嵌套层次多,结构不够清晰。而用switch语句则更清楚。例5.12输入某个成绩等级,输出该等级对应的分数段。(A:90100,B:8089,C:7079,D:6070,E:60以下),#include/*例5.12*/main()char grade;printf(n enter

14、 score grade(ae):);/*输出提示信息*/grade=getchar();getchar();/*接收输入的一个字符*/switch(grade)case a:printf(n 90100);/*case后是一常量*/break;/*多个语句组成的语句段1*/case b:printf(n 8089);break;case c:printf(“n 7079”);break;/*case后有空格*/case d:printf(n 6069.);break;case e:printf(n 60);break;default:printf(n error:out of the fie

15、ld(ae).);/*switch 语句结束*/,switch 语句的一般形式为:switch(expression)case 常量表达式1:语句段1 break;case 常量表达式2:语句段2 break;case 常量表达式N:语句段N break;default:语句段N+1(格式说明),switch语句的执行过程:计算switch 后面括号中的表达式。将表达式的值与第一个case后的常量表达式的值比较,若相等,则从语句段1开始,执行语句段1及其以后的所有语句,不再进行判断(即执行完语句段1后,接着执行后面的case或 default语句中的语句段),直至遇到break语句或执行至sw

16、itch 语句的末尾;若不相等,再与第二个case 后的常量表达式比较,依此类推;若所有的case均不匹配,则执行default后的语句段n+1。,main()/*幼儿园编班问题*/int age;printf(n enter childs age:);scanf(%d,/*实现多个case分支共用一个语句段。*/,例5.14输入任一百分之成绩,输出其对应的成绩等级:A(90100),B(8089),C(7079),D(6069),E(60)。分析:因为case后必须是一常量,所以要用switch语句实现,必须先找出各个分数段对应的常量。很容易可看出,除100分、60分以下的分数外,其它分数段

17、内的分数除以10取整结果相同。,main()/*例5.14*/int score,n;printf(n enter a score(0100):);scanf(%d,思考:如果将分数段的划分改为:A(10085),B(7084),C(6069),D(60),用switch 语句实现是否合适?特别说明:并不是所有的多分支结构都可用switch 语句实现,只有当各个分支能分别与某个常量对应时,才适合采用switch语句。,上机调试,一、习题 第一部分5、下面程序的执行结果是:main()int x=-1,y=3,k;k=(x+=0)提示:注意逻辑表达式的计算过程,特别是x+,y的计算。,5.5上机

18、调试,二测试用例的设计调试选择结构程序时,所用的测试用例至少必须保证所有的分支都能执行一遍。也就是说,测试用例应该能使各个基本条件都有成立和不成立的机会。否则,即使程序由是能运行,也不能保证整个程序是正确的。,例5.5.1邮局对包裹邮费规定如下:重量(千克)不超过10,收费标准为0.80元/千克;不超过20,收费标准为0.75元/千克;不超过30,收费标准为0.70元/千克;超过30千克不予邮寄。另对每件包裹收手续费0.2元。,main()float weight,r,money;printf(n enter weight:);scanf(%f,分析该程序,共有4个分支,分别对应weight的

19、取值为:30,20且10且=20,=10;因此若要实的每个分支都能执行一遍,weight应分别从上述每一范围中至少取一个值。考虑到边界容易出错,所以weight应分别取10,20,30作为测试数据,或直接将30,20 10作为后3个范围中的测试数据。测试用例:35,30,20,10(至少4个测试数据)或者使用:35,25,15,5,30,20,10(每个范围取一个测试数据,在加上边界数据供7组)。,5.5 上机调试,三、单步执行(run/step或F7或 F8)具体方法是:根据某个测试用例,若程序的运行结果不正确,则采用单步执行方式,利用原来的测试数据,重新运行该程序,根据亮条光标的移动,可以很清楚的看到程序的执行过程,然后与该程序要实现的任务比较,很容易找出程序中哪儿与实际不符。同时使用break/watch 可添加表达式,利用单步执行观察watch窗口中该表达式或变量的值,则更容易找出是哪一步出错了。比如:上例的执行。,作业,2.习题5,8,10,12,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号