C语言switch语句_精品文档.ppt
《C语言switch语句_精品文档.ppt》由会员分享,可在线阅读,更多相关《C语言switch语句_精品文档.ppt(38页珍藏版)》请在冰豆网上搜索。
*switchswitch语句句7.1switch语句语句:
switch语句语句是一条多分支选择语句是一条多分支选择语句.在实际应用中,要在多种情况中选择一种情况在实际应用中,要在多种情况中选择一种情况,执行某执行某一部分语句。
一部分语句。
当然可以使用嵌套的当然可以使用嵌套的if,ifelseif语句来处理,但其分支过语句来处理,但其分支过多,程序冗长,难读多,程序冗长,难读,不够灵巧。
不够灵巧。
*switch语句是语句是C语言中语言中处理多路选择处理多路选择问题的一种问题的一种更直观更直观和有效的手段和有效的手段.在测试某个表达式是否与在测试某个表达式是否与一组常量一组常量表达表达式式中中的某一值相配时的某一值相配时,switch语句显得更为方便语句显得更为方便.一般形式如下:
一般形式如下:
*switch(表达式表达式)case常量表达式常量表达式1:
语句语句1break;case常量表达式常量表达式2:
语句语句2break;case常量表达式常量表达式n:
语句语句nbreak;default:
语句语句n+1说明说明:
(1).关关于于表表达达式式:
表表达达式式可可以以是是整型、字符型等表达式。
整型、字符型等表达式。
有一个确定的值有一个确定的值(不是逻辑值不是逻辑值).
(2).关于常量表达式关于常量表达式1n:
只起只起到一个标号的作用到一个标号的作用,根据表达式的根据表达式的值来判断值来判断,找到一个相匹配的入口找到一个相匹配的入口处处,程序往下执行。
程序往下执行。
各个各个case后的常量表达式的值后的常量表达式的值必须互不相同必须互不相同.(3).每个每个case分支可有多条语分支可有多条语句,可不用花括号句,可不用花括号。
*switch(表达式表达式)case常量表达式常量表达式1:
语句语句1break;case常量表达式常量表达式2:
语句语句2break;case常量表达式常量表达式n:
语句语句nbreak;default:
语句语句n+1(4).各个各个case语句只是语句只是一个入口标号一个入口标号,并不确定执并不确定执行的终止点行的终止点.(5).一般在各个一般在各个case语句最后应语句最后应该加一该加一break语句语句,可使程序流程可使程序流程跳出跳出Switch结构结构.否则会从入口处一直向下执行否则会从入口处一直向下执行.(66).).各个各个casecase和和defaultdefault出现的先后次序,并不影响执出现的先后次序,并不影响执行结果行结果.defaultdefault可以没有可以没有.*(7).多个多个case可共用可共用一组执行语句一组执行语句.例如为了统计一段文例如为了统计一段文字中的数字字中的数字,字母及分字母及分隔符的个数隔符的个数,可用下列程序段实现可用下列程序段实现:
switch(ch)case0:
case1:
.case8:
case9:
digit+;break;case:
casen:
caset:
white+;break;default:
character+;break;这里有这里有一个空格一个空格.表达式后都有表达式后都有一冒号一冒号”:
”.*无无break语句语句表达式表达式=常量表达式常量表达式1?
语句序列语句序列真真(非非0)break假假(0)有有break语句语句无无break语句语句表达式表达式=常量表达式常量表达式2?
语句序列语句序列2break有有break语句语句真真(非非0)假假(0)表达式表达式=常量表达式常量表达式n?
语句序列语句序列nbreak真真(非非0)假假(0)无无break语句语句语句序列语句序列n+1有有break语句语句switch(表达式表达式)*说明:
说明:
switch语句不等同于语句不等同于if语句语句:
1.switch只能进行值的只能进行值的相等性相等性的检查的检查.2.if语句不但可以进行相等性的检查语句不但可以进行相等性的检查,还可以计算关还可以计算关系系表达式表达式或逻辑表达式或逻辑表达式,进行进行逻辑逻辑判断判断的真假的真假.只进行值的只进行值的相等性相等性的检查的检查,不是逻辑判断不是逻辑判断!
*例例7.17.1键盘输入键盘输入0-60-6之间的整数,分别代表每周的星期日、星期一、之间的整数,分别代表每周的星期日、星期一、星期、星期六六#includeintmain()intday;printf(请输入星期的数字编号请输入星期的数字编号(0-6):
);scanf(%d,&day);.Ch7_7_1.c.switch(day)case0:
printf(星期日星期日n);break;case1:
printf(星期一星期一n);break;case2:
printf(星期二星期二n);break;case3:
printf(星期三星期三n);break;case4:
printf(星期四星期四n);break;case5:
printf(星期五星期五n);break;case6:
printf(星期六星期六n);break;default:
printf(输入有误,请输入输入有误,请输入0-6之间的数字!
之间的数字!
n);return0;每个每个case分支可有多条分支可有多条语句,可不用花括号语句,可不用花括号,也可以用。
也可以用。
表表达达式式有有一一个个确确定定的的值值(不是逻辑值不是逻辑值).*例例7.27.2求执行下列程序段后求执行下列程序段后k的值的值#includeintmain()charc=2;intk=1;switch(c+1-0)case2:
k+=1;case2+1:
k+=2;case4:
k+=3;printf(k=%dn,k);return0;一般在各个一般在各个case语句最后应该加语句最后应该加一一break语句语句,可使程序流程跳出可使程序流程跳出Switch结构结构.否则会从入口处一直向下执行否则会从入口处一直向下执行.0的的ASCII值为值为48.Ch7_7_2.c*例例7.37.3执行下列程序,当分别输入执行下列程序,当分别输入A、B、C、E时,求时,求K的值的值.charc;intk=2;scanf(“%c”,&c);switch(c-A)case0:
k+;case1:
K+=2;break;default:
k*=k;case4:
k*=3;printf(“k=%d”,k);Ch7_7_3.c*例例7.47.4输入一字符,如果是输入一字符,如果是Y,N或或y,n,则分别执行则分别执行一输出语句,如果是其他字母则执行另一输出语句。
一输出语句,如果是其他字母则执行另一输出语句。
#includevoidmain()charch;printf(PleaseinputY/N(y/n):
);scanf(%c,&ch);.Ch7_7_4.c.switch(ch)casey:
caseY:
printf(thisisYory.n);break;casen:
caseN:
printf(thisisNorn.n);break;default:
printf(thisisotherchar.n);多个多个case可共用可共用一组执行语句一组执行语句.表表达达式式有有一一个个确确定定的的值值(不是逻辑值不是逻辑值).*例例7.57.5编写程序,实现如下功能。
编写程序,实现如下功能。
输入一个实数后,屏幕显示如下菜单输入一个实数后,屏幕显示如下菜单:
1.1.输出相反数输出相反数2.2.输出平方数输出平方数3.3.输出平方根输出平方根4.4.退出退出#includevoidmain()inti,c=5;floatm;printf(输入任意一个整型数:
输入任意一个整型数:
n);scanf(%f,&m);printf(*n);printf(1,输出相反数输出相反数n);printf(2,输出平方数输出平方数n);printf(“3,输出开方根输出开方根n);printf(4,退出退出n);printf(*n);Ch7_7_5.c*.while
(1)scanf(%d,&c);switch(c)case1:
printf(输出相反数输出相反数:
%fn,-m);break;case2:
printf(输出平方数输出平方数:
%fn,m*m);break;case3:
printf(输出平方根输出平方根:
%fn,sqrt(m);break;case4:
break;default:
printf(请输入请输入14之间的数字!
之间的数字!
n);if(c=4)break;Ch7_7_5.c*例7.6根据输入字符(0-9及A-F(AF)显示与该字符所表示的十六进制数相对应的十进制数。
(例如,输入A,输出10,输入0,输出0)#include#includeintmain()charch;for(;)printf(“n请输入十六进制数请输入十六进制数0F(输入输入Q或或q退出退出):
);scanf(%c,&ch);getchar();printf(输入的是:
输入的是:
%c,ch);.当输入一个字符当输入一个字符,打一个回车后打一个回车后,输输入结束入结束.但在输入缓冲区中存在二个字符但在输入缓冲区中存在二个字符:
输输入的字符入的字符,还有一个是还有一个是n.当打了一个回车后当打了一个回车后(其实是二个动作其实是二个动作:
回车回车,换行换行.c语言会把回车语言会把回车,换行自动转换为换行自动转换为n.反之亦然反之亦然.*switch(ch)case0:
case1:
case2:
case3:
case4:
case5:
case6:
case7:
case8:
case9:
printf(十进制数十进制数:
%dn,ch-0);break;caseA:
caseB:
caseC:
caseD:
caseE:
caseF:
printf(十进制数十进制数:
%dn,ch-55);break;Ch7_7_6.cASCII值值:
048A65a”97*casea:
caseb:
casec:
cased:
casee:
casef:
printf(十进制数十进制数:
%dn,ch-87);break;caseQ:
caseq:
printf(退出程序退出程序n);exit(0);default:
printf(输入有误输入有误!
);return0;ASCII值值:
048A65a”97*示例示例:
输入输入1010个字符,分别统计出其中空格或回车、数字和其他字符的个数。
个字符,分别统计出其中空格或回车、数字和其他字符的个数。
*voidmain()intblank,digit,i,other;charch;blank=digit=other=0;printf(input10characters:
);.for(i=1;i=10;i+)ch=getchar();switch(ch)case:
casen:
blank+;break;case0:
case1:
case2:
case3:
case4:
case5:
case6:
case7:
case8:
case9:
digit+;break;default:
other+;break;printf(“blank=%d,digit=%d,other=%dn”,blank,digit,other);*input10characters:
Reold123?
blank=1,digit=3,other=6例例例例:
#includevoidmain()inti;for(i=0;i3;i+)switch(i)case1:
printf(%d,i);case2:
printf(%d,i);default:
printf(%d,i);以下程序的输出结果是:
A.011122B.012C.012020D.120注意所属关系*例例7.7编写一