您好,欢迎访问三七文档
C语言程序设计第九课switch-case多分支开路语句§9.1switch-case语句在编写应用程序时,在必须从很多可以的选项中选择一组指令的地方,可以使用if-else链。在将一个整数表达式的值与特定的值进行比较时,可以使用switch-case语句来替代if-else链。switch-case语句的常规格式如下:switch(整型表达式){case常量1:语句系列1;[break;]case常量2:语句系列2;[break;]..case常量n:语句系列n;[break;][default:][语句n+1;]}§9.2switch-case常规书写格式switch(整型表达式){case常量1:语句系列1;[break;]case常量2:语句系列2;[break;]..case常量n:语句系列n;[break;][default:][语句n+1;]}复合语句开始switch和复合语句结束以冒号结束以冒号结束以冒号结束以冒号结束缩进再次缩进缩进计算表达式的值常量表达式1常量表达式2常量表达式3常量表达式ndefault语句系列1语句系列2语句系列3语句系列n语句系列breakbreakbreakbreakbreak§9.3switch-case执行流程图在switch-case语句中有4个新的关键字:switch、case、default和break,下面分别给予介绍。关键字switch标识swithc-case语句的开始。该关键字后的圆括号内的整型表达式将得到赋值,然后将该表达式的结果与复合语句内包含的各种可以的值依次进行比较。swith语句中的表达式必须被指定为整数结果值,否则将会出现编译错误。在switch-case语句内,关键字case被用来标识或标记与switch表达式的值进行比较的每个值。switch表达式的值与这些case值依次进行比较,直到找到匹配的值。当找到匹配值时,执行将从紧跟着该匹配值的语句开始,因此,如下所示,表达式的值决定了在switch语句中执行实际开始的位置:§9.4switch和case关键字在一个switch语句中可以采用任意顺序来包含任意数目的case标签。但是,如果表达式的值与所有case值都不匹配,那么将不执行任何语句,除非遇到关键字default。关键字default是可选的,并且它与if-else链中的最后一个else的作用相同。§9.5default关键字switch(整型表达式){case常量1:..[break;]case常量2:..[break;]..case常量n:.[break;][default:].}//switch语句结束若表达式等于常量1,则从这里开始若表达式等于常量2,则从这里开始若表达式等于常量n,则从这里开始若所有常量都不匹配,则从这里开始//模拟ATM机菜单系统程序片段(完整程序请参考ex09_01.c)//执行各个分支switch(key){case1:printf(您执行的是修改密码操作!\n);case2:printf(您执行的是转帐操作!\n);case3:printf(您执行的是存款操作!\n);case4:printf(您执行的是取款操作!\n);case5:printf(您执行的查询余额操作!\n);case6:printf(系统退出!\n);default:printf(您选择了一个错误的操作!\n);}一旦通过switch语句确定了入口点,所有进一步的case赋值都会被忽略,并且,除非遇到关键字break,否则执行将一直持续到复合语句结束,这就是采用break语句的原因,它将标识特定case的结束,并使得立即退出switch语句,因此,就像关键字case标识复合语句中可以存在的起始点一样,break语句将确定终止点。如果省略了break语句,那么匹配的case值后的所有情况(包括default情况)都会被执行。§10.6break关键字switch(整型表达式){case常量表达式1:..[break;]case常量表达式2:..[break;]..case常量表达式n:.[break;][default:].}//switch语句结束若表达式等于常量1,则从这里开始若表达式等于常量2,则从这里开始若表达式等于常量n,则从这里开始若所有常量都不匹配,则从这里开始跳出跳出跳出开始输出菜单提示用户输入选择接收用户的输入(key)1、修改密码2、转帐3、存款4、取款5、查询余额6、退出key修改密码转帐存款取款退出查询余额输出出错123456其他输出“谢谢您使用本银行的服务!”结束//模拟ATM机菜单系统程序片段(完整程序请参考ex09_02.c)//执行各个分支switch(key){case1:printf(您执行的是修改密码操作!\n);break;//跳出switch语句case2:printf(您执行的是转帐操作!\n);break;//跳出switch语句case3:printf(您执行的是存款操作!\n);break;//跳出switch语句case4:printf(您执行的是取款操作!\n);break;//跳出switch语句case5:printf(您执行的查询余额操作!\n);break;//跳出switch语句case6:printf(系统退出!\n);break;//跳出switch语句default:printf(您选择了一个错误的操作!\n);}/*执行下列程序(ts09_01.c,输入为1时运行结果是_____,输入为2时运行结果是_____。*/#includestdio.hvoidmain(){intk;scanf(%d,&k);switch(k){case1:printf(%d,k++);break;case2:printf(%d,k++);case3:printf(%d,k++);break;case4:printf(%d,k++);default:printf(Full!\n);}}在编写switch语句时,可以使用多个case值来引用同一组语句;default标签是可选的。§9.7多个case值引用同一组语句//程序片段:输入月份,输出相应的天数(if-else链)//完整程序请参考ex09_03.c//求相应月份的天数if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)days=31;elseif(month==2)days=28;elseif(month==4||month==6||month==9||month==11)days=30;elsedays=0;//程序片段:输入月份,输出相应的天数(switch结构)//完整程序请参考ex09_04.c//求相应月份的天数switch(month){case1:case3:case5:case7:case8:case10:case12:days=31;break;case2:days=28;break;case4:case6:case9:case11:days=31;break;default:days=0;}例子:如表所示是学生的等级成绩情况。表学生的等级成绩编写一个C程序,接受学生的分数,将分数成绩转换成相应的等级成绩,并显示等级成绩。§9.8switch的应用分数成绩等级成绩大于或等于90A小于90但大于或等于80B小于80但大于或等于70C小于70但大于或等于60D小于60E/*程序片段:将学生分数成绩转换成相应的等级成绩完全程序请参考:ex09_05.c*/switch(score/10)//score/10对百分制成绩进行折算{case10:case9:printf(A等\n);break;case8:printf(B等\n);break;case7:printf(C等\n);break;case6:printf(D等\n);break;default:printf(“E等\n);}/*程序片段:将学生分数成绩转换成相应的等级成绩完全程序请参考:ex09_06.c*/if(score100||score0)printf(输入成绩错误!\n);elseswitch(score/10)//score/10对百分制成绩进行折算{case10:case9:printf(A等\n);break;case8:printf(B等\n);break;case7:printf(C等\n);break;case6:printf(D等\n);break;default:printf(A等\n);}例子:根据下表计算一下销售人员的月收入表销售人员的月收入编写一个C程序,接受销售人员的月销售额,计算其月收入§作业月销售额收入大于或等于50,000美元375美元,加上销售额的16%小于50,000美元,但大于或等于40,000美元350美元,加上销售额的14%小于40,000美元,但大于或等于30,000美元325美元,加上销售额的12%小于30,000美元,但大于或等于20,000美元300美元,加上销售额的9%小于20,000美元,但大于或等于10,000美元250美元,加上销售额的5%小于10,000美元200美元,加上销售额的3%
本文标题:C语言switch
链接地址:https://www.777doc.com/doc-1514141 .html