08《C语言程序设计》教案第三章程序的控制结构(4)—选择结构switch

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《C语言程序设计》课程教案表授课题目第三章程序的控制结构(4)——选择结构switch课时安排1授课时间教学目的和要求1.掌握:条件运算符switch语句2.熟悉:选择结构程序设计教学内容1.基本内容:(1)条件运算符(2)多分支语句(3)程序设计举例2.重点:条件运算符、多分支语句、选择结构程序设计3.难点:条件运算符1、条件运算符(10分钟)条件运算符的格式:变量=〈表达式1〉?〈表达式2〉:〈表达式3〉;执行过程:当表达式1的值为“真”时,将表达式2的值赋给变量;当表达式1的值为“假”时,将表达式3的值赋给变量。即:无论表达式1为“真”还是为“假”,都执行一个赋值语句且给同一个变量赋值。可以看出,用条件运算符“?:”的功能,来实现if语句的第2种格式。说明:条件表达式中的“表达式2”和“表达式3”,又可以是条件表达式,即嵌套使用;C语言中条件运算符的优先级高于赋值运算符,但低于逻辑运算符;条件运算符要求有三个操作对象,称三目(元)运算符;条件运算符的结合方向为“自右至左”。如条件表达式:y=x10?x/10:x0?x:-x;从右至左结合,等价于:y=x10?x/10:(x0?x:-x);它的功能是:当x10时,y的值为x/10;当x10时,y的值取决于表达式x0?【例4.4】输入两个整数,并将其中较大者显示出来。#includestdio.hmain(){inta,b,max;scanf(″%d%d″,&a,&b);max=ab?a:b;printf(″max=%d″,max);}【例4.5】利用条件运算符实现对输入的学生成绩划分等级:学习成绩=90分的同学用A表示;60-89分之间的用B表示;60分以下的用C表示。程序代码:#includestdio.hmain(){intscore;chargrade;printf(pleaseinputascore:\n);scanf(%d,&score);grade=score=90?'A':(score=60?'B':'C');printf(%dbelongsto%c,score,grade);}运行:pleaseinputascore:输入:86↙显示:86belongstoB练习:下面程序段的运行结果是[]intx=1,y=1,z=1;x+=y+=z;printf(“%d\n”,xy?y:x);A、3B、2C、4D、不确定的值执行以下程序的输出结果是[]main(){intk=4,a=3,b=2,c=1;printf(“%d\n”,ka?k:cb?c:a);}A、4B、3C、2D、1若运行下面程序时,给变量a输入15,则输出结果是[]main(){inta,b;scanf(“%d”,&a);b=a15?a+10:a-10;printf(“%d\n”,b);}A、5B、25C、15D、102、多分支语句(25分钟)switch语句是多分支选择语句。一般形式:switch(表达式){case常量表达式1:语句1;[break;]case常量表达式2:语句2;[break;]…case常量表达式n:语句n;[break;]default:语句n+1;}执行过程:首先计算switch后面圆括号内表达式的值,若此值等于某个case后面的常量表达式的值,则转向该case后面的语句去执行;若表达式的值不等于任何case后面的常量表达式的值,则转向default后面的语句去执行;如果没有default部分,则将不执行switch语句中的任何语句,而直接转到switch语句后面的语句去执行。其流程图如图4-3所示。说明:1)switch后面圆括号内的表达式的值和case后面的常量表达式的值,必须是整型或字符型。2)同一个switch语句中的所有case后面的常量表达式的值都必须互不相同,其中default和〈语句n+1〉可以省略。3)switch语句中的case和default的出现次序是任意的。4)由于switch语句中的“case常量表达式”部分只起语句标号的作用,所以,在执行完某个case后面的语句后,如果没有“break”来结束多分支语句,将自动转到该语句后面的语句去执行,直到遇到switch语句的右花括号为止,而不再进行条件判断。5)每个case的后面既可以是一个语句,也可以是多个语句,当是多个语句的时候,也不需要用花括号括起来。6)多个case的后面可以共用一组执行语句。如:switch(n){case1:case2:x=10;break;…}【例4.7】从键盘输入一个星期(1~7),并显示该星期的英文名称。#includestdio.hmain(){intweek;scanf(″%d″,&week);switch(week){case1:printf(″Monday″);break;case2:printf(″Tuesday″);break;case3:printf(″Wednesday″);break;case4:printf(″Thursday″);break;case5:printf(″Friday″);break;case6:printf(″Saturday″);break;case7:printf(″Sunday″);break;default:printf(″DataError!″);}}练习:运行下面程序时,从键盘输入字母H,则输出结果是[]#includestdio.hmain(){charch;ch=getchar()switch(ch){case‘H’:printf(“Hello!\n”);case‘G’:printf(“Goodmorning!\n”);default:printf(“Bye_Bye!\n”);}}运行下面程序时,输入数据为“2,13,5CR”,则输出结果是[]main(){inta,b,c;scanf(“%d,%d,%d”,&a,&b,&c);switch(a){case1:printf(“%d\n”,b+c);break;case2:printf(“%d\n”,b-c);break;case3:printf(“%d\n”,b*c);break;case4:{if(c!=0){printf(“%d\n”,b/c);break;}else{printf(“error\n”);break;}default:break;}}3、程序设计举例(10分钟)【例4.8】输入三个数,按由小到大的顺序输出。#includestdio.hmain(){inta,b,c,temp;printf(″Enterthreeintegers:\t″);scanf(″%d,%d,%d″,&a,&b,&c);if(ab){temp=a;a=b;b=temp;}if(ac){temp=a;a=c;c=temp;}if(bc){temp=b;b=c;c=temp;}printf(″%d%d%d″,a,b,c);}解释:语句temp=a;a=b;b=temp;是实现a,b二个数的互换,temp是一个临时中间单元。相当于一瓶可乐a,一瓶橘汁b互换瓶,需要一个空瓶temp,才可以实现互换。【例4.10】写一程序,从键盘上输入年份year(用4位十进制数,如2008),判断是否闰年。算法分析:闰年的条件是:某年能被4整除、但不能被100整除,或者能被400整除。我们用取余来判断year能否被4整除,余数为0则能整除,否则不能整除。据此写出是闰年的条件表达式:(Year%4==0andyear%100!=0)||(year%400==0),程序代码:main(){intyear;printf(Pleaseinputtheyear:);scanf(%d,&year);if((year%4==0&&year%100!=0)||(year%400==0))printf(%disaleapyear.\n,year);elseprintf(%disnotaleapyear.\n,year);}运行结果:①输入:1989↙输出:1989isnotaleapyear.②输入:2000↙输出:2000isaleapyear.【例4.11】大学对不同性质的学生听课收费不同。某校是这样规定的:本校全日制学生不收费;本校夜大学生选课12学分及以下付200元,然后每增加一个学分付20元;对外校学生选课12学分及以下付600元,然后每增加一个学分付60元。输入某个学生的编号、选课学分以及学生类型,编程计算该学生应付的学费。算法分析:学分用n,收费用x,编号用number,学生的类别用p。根据题意,分三种情况考虑:(1)本校全日制:x=0(2)本校夜大:n≤12,x=200n12,x=200+(n-12)*20(3)外校:n≤12,x=600n12,x=600+(n-12)*60main(){intn,x,number,p;printf(″\t学生收费管理\n″);printf(″\t============\n″);printf(″\t1-本校全日制学生\n\t2-本校夜大学生\n\t3-外校学生\n″);printf(″\t============\n″);printf(″\t请输入学生的类别(1~3):″);scanf(″%d″,&p);printf(″\t请输入学生的编号和学分:″);scanf(″%d,%d″,&number,&n);if(p==1)x=0;elseif(p==2)if(n=12)x=200;elsex=200+(n-12)*20;elseif(n=12)x=600;elsex=600+(n-12)*60;printf(″\t学生%4d应交费%4d元\n″,number,x);}运行结果:学生收费管理============1—本校全日制学生2—本校夜大学生3—外校学生============请输入学生的类别(1~3):2请输入学生的编号和学分:1001,34学生1001应交费640元按照输入,类别是2,编号是1001,学分是34。例4.12编程:根据输入的学生的成绩判断等级。当成绩score≥90时为A等;成绩80≤score90为B等;成绩70≤score80为C等;成绩60≤score70为D等成绩score60为E等(score为整数)。分析:设score为整型数,在score≥90的范围内,score可能取100,99,.....,90,利用两个整数相除,结果自动取整的特性,score和score/10有如下对应关系:scorescore/10≥9010,980~89870~79760~69660以下default因此,可以用score/10的值来确定分支。#includestdio.hmain()/*用switch语句评级*/{intscore;scanf(%d,&score);switch(score/10){case10:case9:printf(%d:A\n,score);break;case8:printf(%d:B\n,score);break;case7:printf(%d:C\n,score);break;case6:printf(%d:D\n,score);break;default:printf(%d:E\n,score);}}讨论、思考题、作业:实验指导书习题参考资料(含参考书、文献等):叶斌陈世强.C语言程序设计.北京:科学出版社授课类型:理论课讨论课□实验课□练习课□其他□教学方式:传统授课双语□讨论□示教□指导□其他□教学资源:多媒体模型□实物□挂图□音像□其他□

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功