1、C语言程序设计基础课件2Cswitchswitch语句部分流程图:语句部分流程图:(1 1)说明该程序的功能是什么?)说明该程序的功能是什么?答:根据输入的字母,输出相应的等级答:根据输入的字母,输出相应的等级(2 2)思考:如果将程序段中的所有)思考:如果将程序段中的所有breakbreak语句去掉,输入字符语句去掉,输入字符CC,运行结果是什么?运行结果是什么?及格及格不及格不及格输入数据错误!输入数据错误!真真假假ACBD真真真真真真假假假假假假grade错误错误优秀优秀良好良好及格及格不及格不及格breakbreakbreakbreakdefault2 switch语句语句 switc
2、h语句的一般形式 switch(表达式)case 常量表达式1:语句序列1;break;case 常量表达式2:语句序列2;break;case 常量表达式n:语句序列n;break;default:语句序列n+1;break;功能:计算表达式的值,与常量表达式的值比较,等于第i个值时,顺序执行语句序列1、2、n 若与所有常量表达式值都不相等,执行语句序列n+1。switchswitch语句的工作过程是:语句的工作过程是:1.1.根据根据switchswitch括号中的表达式从上至下查找与表达括号中的表达式从上至下查找与表达式的值匹配的式的值匹配的casecase标号入口,执行标号入口,执行c
3、asecase后的语句。后的语句。2.2.若没有匹配的若没有匹配的casecase标号,则转到标号标号,则转到标号defaultdefault:后的语句执行。否则跳出后的语句执行。否则跳出switchswitch语句。语句。说明:说明:1.1.程序出现(不好归纳的情况)程序出现(不好归纳的情况)“意外意外”归入归入default:default:标号作统一处理。标号作统一处理。2.2.default可以在可以在switch中任意位置。只要出现意中任意位置。只要出现意外都会转到外都会转到default执行。执行。3.break3.break的作用:使程序流程跳出的作用:使程序流程跳出switch
4、switch结构。结构。4.4.如果没有如果没有breakbreak语句:那么从匹配标号到语句:那么从匹配标号到switchswitch结构结束,中间所有的语句均被执行一次。结构结束,中间所有的语句均被执行一次。注意:switch语句的书写格式:1.语句体本身必须用花括号括起;2.case和default后面如果有多条语句,不必使用花括号;3.case和常量表达式之间必须有空格;4.default可以写在语句体的任何位置,也可以省略不写 允许switch嵌套使用,但同一个switch语句中,任意两个case的常量表达式值不能相同。3 3思考:在思考:在switchswitch语句中多个语句中多
5、个casecase可共用一组执行语句吗?如果可可共用一组执行语句吗?如果可以,请写出下面程序的预期运行结果?并且对比上机调试结果。以,请写出下面程序的预期运行结果?并且对比上机调试结果。includestdio.hmain()char grade;printf(请输入成绩等级(A、B、C、D)n);grade=getchar();switch(grade)case A:case B:case C:printf(及格n);break;case D:printf(不及格n);break;default:printf(输入数据错误n);输入输入 AA结果:结果:及格及格 执行下列程序,输入执行下列程
6、序,输入3后输出结果是。后输出结果是。#include”stdio.h”main()int k;scanf(”%d”,&k);switch(k)case 1:printf(”%dn”,k+);case 2:printf(”%dn”,k+);case 3:printf(”%dn”,k+);case 4:printf(”%dn”,k+);break;default:printf(”Full!n”);34 执行下列程序,输入执行下列程序,输入5后输出结果是。后输出结果是。#include”stdio.h”main()int k;scanf(”%d”,&k);switch(k)case 1:print
7、f(”%dn”,k+);case 2:printf(”%dn”,k+);default:printf(”Full!n”);case 3:printf(”%dn”,k+);case 4:printf(”%dn”,k+);break;Full!56 main()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;case 2:a+;b+;break;case 3:a+;b+;printf(“a=%d,b=%d”,a,b);a=2,b=1 main()int x=1,y=0,a=0,b=0;swit
8、ch(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;break;case 2:a+;b+;break;case 3:a+;b+;printf(“a=%d,b=%d”,a,b);a=1,b=0 main()int a=2,b=7,c=5;switch(a0)case 1:switch(b0)case 1:printf(“”);break;case 2:printf(“!”);break;case 0:switch(c=5)case 1:pritnf(“*”);break;case 2:printf(“#”);break;default:pri
9、ntf(“#”);break;default:printf(“&”);printf(“n”);*&main()int x,c,m;float y;scanf(“%d”,&x);if()c=-1;else c=;switch(c)case 1:y=0;break;case 0:y=x;break;case 1:y=10;break;case 2:case 3:y=-0.5*x+20;break;default:y=-2;printf(“y=%f”,y);0 (x0)x (0=x10)y=10 (10=x20)-0.5*x+20(20=x=40)x0 x/10 main()int x,c,m;fl
10、oat y;scanf(“%d”,&x);if()c=-1;else c=;switch(c)case 1:y=0;break;case 0:y=x;break;case 1:case 2:case 3:y=10;break;case 4:case 5:case 6:case 7:y=-0.5*x+20;break;default:y=-2;printf(“y=%f”,y);0 (x0)x (0=x50)y=10 (50=x200)-0.5*x+20(200=x=400)x0 x/50任务六 分支的应用题目:商家为了促销,以打折吸引顾客,其打折情况如下:题目:商家为了促销,以打折吸引顾客,其打
11、折情况如下:购买量购买量50 50 原价销售原价销售5050购买量购买量100 100 打打9 9折销售折销售100100购买量购买量200 200 打打8 8折销售折销售购买量购买量200 200 打打7 7折销售折销售编程实现:输入商品单价和购买量,求应缴付多少钱。编程实现:输入商品单价和购买量,求应缴付多少钱。任务六 分支的应用1 1分析:分析:据题意可知,由购买量决定打折情况,变量据题意可知,由购买量决定打折情况,变量r r代表打折率,变量代表打折率,变量n n代表购买量。代表购买量。(1 1)当)当n n小于小于1010时,时,r r1.01.0。(2 2)当)当n n介于介于101
12、0与与5050之间时,之间时,r r0.90.9。(3 3)当)当n n介于介于5050与与100100之间时,之间时,r r0.80.8。(4 4)当)当n n大于大于100100时,时,r r0.70.7。因为有多个选择,故可使用。因为有多个选择,故可使用if if else ifelse if结构。结构。2 2由上述分析,填写下列流程图。由上述分析,填写下列流程图。n10n100r=1.0r=0.9r=0.7真假真假真假n50r=0.8任务六 分支的应用#includestdio.hmain()int n;float price,money,r;printf(请输入商品购买量和单价:n)
13、;scanf(%f%f,&n,&price);if(n10)r=1.0;else if()r=0.9;else if(n100);elser=0.7;money=price*r*n;printf(应缴付%f元钱n,money);n50n50r=0.8r=0.83 3根据流程图,填写程序。根据流程图,填写程序。4 4请记录上机调试结果:请记录上机调试结果:main()float x,y,r;char op;scanf(“%f%c%f”,&x,&op,&y);switch(op)case+:r=x+y;case-:r=x+y;case*:r=x+y;case/:r=x+y;printf(“%f”,r);