《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=x>10?x/10:x>0?x:-x;从右至左结合,等价于:y=x>10?x/10:(x>0?x:-x);它的功能是:当x>10时,y的值为x/10;当x<10时,y的值取决于表达式x>0? 【例4.4】输入两个整数,并将其中较大者显示出来。 #include <stdio.h> main() { int a,b,max; scanf(″%d%d″,&a,&b); max=a>b?a:b; printf(″max=%d″,max); } 【例4.5】利用条件运算符实现对输入的学生成绩划分等级:学习成绩>=90分的同学用A表示;60-89分之间的用B表示;60分以下的用C表示。程序代码: #include "stdio.h" main() { int score; char grade; printf("please input a score:\n"); scanf("%d",&score); grade=score>=90 ? 'A' :(score>=60?'B':'C'); printf("%d belongs to %c",score,grade); } 运行:please input a score: 输入:86↙ 显示:86 belongs to B 练习: 下面程序段的运行结果是[ ] int x=1,y=1,z=1; x+=y+=z; printf(“%d\n”,x<y?y:x); A、3 B、2 C、4 D、不确定的值 执行以下程序的输出结果是[ ] main() { int k=4,a=3,b=2,c=1; printf(“%d\n”,k<a?k:c<b?c:a); } A、4 B、3 C、2 D、1 若运行下面程序时,给变量a输入15,则输出结果是[ ] main() { int a,b; scanf(“%d”,&a); b=a>15?a+10:a-10; printf(“%d\n”,b); } A、5 B、25 C、15 D、10 2、多分支语句(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) { case 1: case 2: x=10; break; … } 【例4.7】从键盘输入一个星期(1~7),并显示该星期的英文名称。 #include <stdio.h> main() { int week; scanf(″%d″,&week); switch(week) { case 1: printf(″Monday″); break; case 2: printf(″Tuesday″); break; case 3: printf(″Wednesday″); break; case 4: printf(″Thursday″); break; case 5: printf(″Friday″); break; case 6: printfswitch的用法c语言(″Saturday″); break; case 7: printf(″Sunday″); break; default:printf(″Data Error!″); } } 练习:运行下面程序时,从键盘输入字母H,则输出结果是[ ] #include <stdio.h> main() { char ch; ch=getchar() switch(ch) { case‘H’: printf(“Hello!\n”); case‘G’: printf(“Good morning!\n”); default: printf(“Bye_Bye!\n”); } } 运行下面程序时,输入数据为“2,13,5<CR>”,则输出结果是[ ] main() { int a,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】输入三个数,按由小到大的顺序输出。 #include <stdio.h> main() { int a,b,c,temp; printf(″Enter three integers:\t″); scanf(″%d,%d,%d″,&a,&b,&c); if(a>b){temp=a;a=b;b=temp;} if(a>c){temp=a;a=c;c=temp;} if(b>c){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==0 and year%100!=0)|| (year%400==0), 程序代码: main( ) { int year; printf("Please input the year:"); scanf("%d",&year); if ((year%4==0 && year%100!=0)|| (year%400==0)) printf("%d is a leap year.\n",year); else printf("%d is not a leap year.\n",year); } 运行结果: ①输入:1989↙ 输出:1989 is not a leap year. ②输入:2000↙ 输出:2000 is a leap year. 【例4.11】大学对不同性质的学生听课收费不同。某校是这样规定的:本校全日制学生不收费;本校夜大学生选课12学分及以下付200元,然后每增加一个学分付20元;对外校学生选课12学分及以下付600元,然后每增加一个学分付60元。输入某个学生的编号、选课学分以及学生类型,编程计算该学生应付的学费。 算法分析:学分用n,收费用x,编号用number,学生的类别用p。根据题意,分三种情况考虑: (1)本校全日制:x=0 (2)本校夜大: n≤12,x=200 n>12,x=200+(n-12)*20 (3)外校: n≤12,x=600 n>12,x=600+(n-12)*60 main() { int n,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; else if(p= =2) if(n<=12) x=200; else x=200+(n-12)*20; else if(n<=12)x=600; else x=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≤score <90 为B等; 成绩70≤score <80 为C等;成绩60≤score <70 为D等成绩score < 60 为E等 (score 为整数)。 分析: 设score为整型数,在score≥90 的范围内,score可能取100, 99,.....,90,利用两个整数相除,结果自动取整的特性,score和 score /10 有如下对应关系: score score/10 ≥90 10, 9 80~89 8 70~79 7 60~69 6 60以下 default 因此,可以用score /10的值来确定分支。 #include <stdio.h> main() /*用switch 语句评级 */ { int score; scanf("%d" ,&score); switch (score /10) {case 10: case 9: printf("%d: A\n", score);break; case 8:printf("%d: B\n", score);break; case 7: printf("%d: C\n", score);break; case 6: printf("%d: D\n", score);break; default: printf("%d: E\n", score); }} | ||
讨论、思考题、作业: 实验指导书习题 | ||
参考资料(含参考书、文献等): 叶斌 陈世强. C语言程序设计. 北京:科学出版社 | ||
授课类型:理论课 讨论课□ 实验课□ 练习课□ 其他□ | ||
教学方式:传统授课 双语□ 讨论□ 示教□ 指导□ 其他□ | ||
教学资源:多媒体 模型□ 实物□ 挂图□ 音像□ 其他□ | ||
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论