1、 7.1 switch 语句语句:switch 语句语句是一条多分支选择语句是一条多分支选择语句.在实际应用中,要在多种情况中选择一种情况在实际应用中,要在多种情况中选择一种情况,执行某执行某一部分语句。一部分语句。当然可以使用嵌套的当然可以使用嵌套的if,if else if语句来处理,但其分支语句来处理,但其分支过多,程序冗长,难读过多,程序冗长,难读,不够灵巧。不够灵巧。switch语句是语句是C语言中语言中处理多路选择处理多路选择问题的一种问题的一种更直观更直观和有效的手段和有效的手段.在测试某个表达式是否与在测试某个表达式是否与一组常量一组常量表达式表达式中中的某一值相配时的某一值相
2、配时,switch语句显得更为方便语句显得更为方便.一般形式如下:一般形式如下:switch(表达式表达式)case 常量表达式常量表达式1:语句语句1 break;case 常量表达式常量表达式2:语句语句2 break;case 常量表达式常量表达式n:语句语句n break;default:语句语句n+1 说明说明:(1).关于关于表达式表达式:表达式可以是表达式可以是整型、字符型等表达式。整型、字符型等表达式。有一个确定的值有一个确定的值(不是逻辑值不是逻辑值).(2).关于常量表达式关于常量表达式1n:只起到只起到一个标号的作用一个标号的作用,根据表达式的值来根据表达式的值来判断判断
3、,找到一个相匹配的入口处找到一个相匹配的入口处,程程序往下执行。序往下执行。各个各个case后的常量表达式的值后的常量表达式的值必须互不相同必须互不相同.(3).每个每个case分支可有多条语句分支可有多条语句,可不用花括号,可不用花括号。switch(表达式表达式)case 常量表达式常量表达式1:语句语句1 break;case 常量表达式常量表达式2:语句语句2 break;case 常量表达式常量表达式n:语句语句n break;default:语句语句n+1 (4).各个各个case 语句只是一语句只是一个入口标号个入口标号,并不确定执行并不确定执行的终止点的终止点.(5).一般在各
4、个一般在各个case 语句最后应语句最后应该加一该加一break语句语句,可使程序流程可使程序流程跳出跳出Switch结构结构.否则会从入口处一直向下执行否则会从入口处一直向下执行.(6 6).).各个各个casecase和和defaultdefault出现的先后次序,并不影响执出现的先后次序,并不影响执行结果行结果.defaultdefault可以没有可以没有.(7).多个多个case可共用一可共用一组执行语句组执行语句.例如为了统计一段文例如为了统计一段文字中的数字字中的数字,字母及分隔字母及分隔符的个数符的个数,可用下列程序段实现可用下列程序段实现:switch(ch)case 0:ca
5、se 1:.case 8:case 9:digit+;break;case :case n:case t:white+;break;default:character+;break;这里有这里有一个空格一个空格.表达式后都有表达式后都有一冒号一冒号”:”.无无break语句语句表达式表达式=常量表达式常量表达式1?语句序列语句序列真真(非非0)break假假(0)有有break语句语句无无break语句语句表达式表达式=常量表达式常量表达式2?语句序列语句序列2break有有break语句语句真真(非非0)假假(0)表达式表达式=常量表达式常量表达式n?语句序列语句序列nbreak真真(非非0
6、)假假(0)无无break语句语句语句序列语句序列n+1有有break语句语句switch(表达式表达式)说明:说明:switch语句不等同于语句不等同于if语句语句:1.switch只能进行值的只能进行值的相等性相等性的检查的检查.2.if语句不但可以进行相等性的检查语句不但可以进行相等性的检查,还可以计算关还可以计算关系系表达式表达式或逻辑表达式或逻辑表达式,进行进行逻辑逻辑判断判断的真假的真假.只进行值的只进行值的相等性相等性的检查的检查,不是逻辑判断不是逻辑判断!#include int main()int day;printf(请输入星期的数字编号请输入星期的数字编号(0-6):);
7、scanf(%d,&day);.Ch7_7_1.c .switch(day)case 0:printf(星期日星期日 n);break;case 1:printf(星期一星期一 n);break;case 2:printf(星期二星期二 n);break;case 3:printf(星期三星期三 n);break;case 4:printf(星期四星期四 n);break;case 5:printf(星期五星期五 n);break;case 6:printf(星期六星期六 n);break;default:printf(输入有误,请输入输入有误,请输入0-6之间的数字!之间的数字!n);ret
8、urn 0;每个每个case分支可有多条分支可有多条语句,可不用花括号语句,可不用花括号,也可以用。也可以用。表达式表达式有一个确定的有一个确定的值值(不是逻辑值不是逻辑值).一般在各个一般在各个case 语句最后应该加语句最后应该加一一break语句语句,可使程序流程跳出可使程序流程跳出Switch结构结构.否则会从入口处一直向下执行否则会从入口处一直向下执行.0的的ASCII值为值为48.Ch7_7_2.cCh7_7_3.c#include void main()char ch;printf(Please input Y/N(y/n):);scanf(%c,&ch);.Ch7_7_4.c
9、.switch(ch)case y:case Y:printf(this is Y or y.n);break;case n:case N:printf(this is N or n.n);break;default:printf(this is other char.n);多个多个case可共用可共用一组执行语句一组执行语句.表达式表达式有一个确定的有一个确定的值值(不是逻辑值不是逻辑值).#include void main()int i,c=5;float m;printf(输入任意一个整型数:输入任意一个整型数:n);scanf(%f,&m);printf(*n);printf(1,输
10、出相反数输出相反数n);printf(2,输出平方数输出平方数n);printf(“3,输出开方根输出开方根n);printf(4,退出退出n);printf(*n);Ch7_7_5.c .while(1)scanf(%d,&c);switch(c)case 1:printf(输出相反数输出相反数:%fn,-m);break;case 2:printf(输出平方数输出平方数:%fn,m*m);break;case 3:printf(输出平方根输出平方根:%fn,sqrt(m);break;case 4:break;default:printf(请输入请输入14之间的数字!之间的数字!n);if
11、(c=4)break;Ch7_7_5.c#include#includeint main()char ch;for(;)printf(“n请输入十六进制数请输入十六进制数 0 F(输入输入Q 或或 q 退出退出):);scanf(%c,&ch);getchar();printf(输入的是:输入的是:%c,ch);.当输入一个字符当输入一个字符,打一个回车后打一个回车后,输输入结束入结束.但在输入缓冲区中存在二个字符但在输入缓冲区中存在二个字符:输输入的字符入的字符,还有一个是还有一个是n.当打了一个回车后当打了一个回车后(其实是二个动作其实是二个动作:回车回车,换行换行.c语言会把回车语言会把
12、回车,换行自动转换为换行自动转换为n.反之亦然反之亦然.switch(ch)case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:printf(十进制数十进制数:%dn,ch-0);break;case A:case B:case C:case D:case E:case F:printf(十进制数十进制数:%dn,ch-55);break;Ch7_7_6.cASCII值值:0 48A 65a”97 case a:case b:case c:case d:case e:case f:printf(十进制数十进
13、制数:%dn,ch-87);break;case Q:case q:printf(退出程序退出程序n);exit(0);default:printf(输入有误输入有误!);return 0;ASCII值值:0 48A 65a”97void main()int blank,digit,i,other;char ch;blank=digit=other=0;printf(input 10 characters:);.input 10 characters:Reold 123?blank=1,digit=3,other=6#include void main()int i;for(i=0;i 3;i
14、+)switch(i)case 1:printf(%d,i);case 2:printf(%d,i);default:printf(%d,i);以下程序的输出结果是以下程序的输出结果是:A.011122 B.012 C.012020 D.120注意所属关系Ch7_7_7.c#include#include int main()float numb1=0,numb2=0;int menu=1,flag;float total=0;char calType;.for(;)flag=1;printf(nt希望进行哪种运算希望进行哪种运算?nn);printf(t 1:加法加法n);printf(t
15、2:减法减法n);printf(t 3:乘法乘法n);printf(t 4:除法除法n);printf(t 0:退出计算器退出计算器n);printf(nt输入你的选择:输入你的选择:);.scanf(%d,&menu);if(menu=0)exit(0);else if(menu4)printf(t 无效的选择无效的选择!n);else printf(t输入两个数中的第一个数:输入两个数中的第一个数:);scanf(%f,&numb1);printf(t输入两个数中的第二个数:输入两个数中的第二个数:);scanf(%f,&numb2);.退出程序.switch(menu)case 1:to
16、tal=numb1+numb2;calType=+;break;case 2:total=numb1-numb2;calType=-;break;case 3:total=numb1*numb2;calType=*;break;case 4:if(numb2=0)printf(nt不能被不能被0除除n);flag=0;break;total=numb1/numb2;calType=/;break;default:printf(无效的选择!无效的选择!n);if(flag=1)printf(nn*);printf(nnt%.3f%c%.3f=%.3f,numb1,calType,numb2,to
17、tal);printf(nn*nn);return 0;Ch7_7_7.c问输出为问输出为?:?:A)K=3 A)K=3 B)K=4B)K=4 C)K=2 D)K=0 C)K=2 D)K=0 main()main()intint k=0;char c=A;k=0;char c=A;do do swich(cswich(c+)+)case A:K+;break;case A:K+;break;case B:K-;case B:K-;case C:k+=2;break;case C:k+=2;break;case D:K=K%2;continue;case D:K=K%2;continue;cas
18、e E:K=K case E:K=K*10;break;10;break;default:K=K/3;default:K=K/3;K+;K+;while(cG);while(cG);printf(“Kprintf(“K=%dn”,K);=%dn”,K);第第1次次.第第2次次.3.4.5.6.K=2 k=4 k=7 k=1 k=11 k=4c=B c=C c=D c=E c=F c=G注注:每次执行每次执行switch(C+)switch(C+)时时,先取先取C C的值的值,找到入找到入 口口,然后然后C C增增1.1.当执行到当执行到continuecontinue时时,流程跳过流程跳过do
19、-whiledo-while语句语句 中当未执行的语句中当未执行的语句,而直接转向而直接转向whilewhile的条件表的条件表 达式达式,判循环是否进行判循环是否进行.第7章后练习 练习与实践:练习与实践:1百分制转换成五分制百分制转换成五分制.#include int main()int x;printf(请输入学生百分制成绩请输入学生百分制成绩:n输入负数结束程序输入负数结束程序:n);scanf(%d,&x);课本课本 P101:1题题while(x0)switch(x/10)case 10:case 9:printf(五分制为五分制为:n5nn);break;case 8:print
20、f(五分制为五分制为:n4nn);break;case 7:printf(五分制为五分制为:n3nn);break;case 6:printf(五分制为五分制为:n2nn);break;default:printf(五分制为五分制为:n1nn);break;课本课本 P101:1题题 printf(请输入学生百分制成绩请输入学生百分制成绩:n输入负数结束程序输入负数结束程序:n);scanf(%d,&x);printf(谢谢使用,再见谢谢使用,再见:n);return 0;#include#includeint main()double x,s;int y;printf(Input a num
21、ber:n);scanf(%lf,&x);2计算计算sin(),cos(),tan().while(1)printf(您希望进行哪种运算您希望进行哪种运算?n);printf(1.计算计算sin(x)n);printf(2.计算计算cos(x)n);printf(3.计算计算tan(x)n);scanf(%d,&y);switch(y)case 1:s=sin(x);printf(sin(%f)=%fn,x,s);break;case 2:s=cos(x);printf(cos(%f)=%fn,x,s);break;case 3:s=tan(x);printf(tan(%f)=%fn,x,s);break;default:printf(“输入有误,请输入输入有误,请输入 1-3之间的数字!之间的数字!n);if(y=1|y=2|y=3)break;printf(谢谢使用谢谢使用:n);return 0;
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。