Switch_语句 使用方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C 语言“switch 语句” 的使用技巧---- C 语言作为国际上流行的计

算机语言已经和正在被广大的计算机用户使用。凡是使用过的人都会有同样的感觉——C 语言的使用灵活这个特点既是优点又是缺点,因为对精通C 语言的用户来讲,灵活就意味着编程可以无拘无束,甚至随心所欲;但对初学者或者是尚未摸着规律的用户来说,有时候就会觉得C 程序设计有点象雾里看花,摸不着头脑。因为灵活就意味着没有一个标准。而实际上,C 语言和其它计算机语言一样,只要你真正掌握了该语言的每一个语句的特点,理解、运用就不难掌握了。下面就C 语言中switch 语句的使用特点谈谈自己的体会。

---- switch 语句的格式如下: switch(表达式) {case 常量表达式1: 语句1 case 常量表达式2: 语句2 case 常量表达式3: 语句3 case 常量表达式n: 语句n default : 语句n+1 }

---- 从表面上看来,switch 语句与PASCAL 语言中的case 语句以及FOXBASE 中的do case 语句非常类似,只是关键字有所不同:一个是switch;而另一个是case 或do case。但如果仔细阅读过教材或有关参考书的话,就绝不会有此想法。从语句的功能上来看,PASCAL 和case 语句或FOXBASE 的do case 语句中的常量表达式是用来与case 后

面的表达式比较以确定执行哪一个语句,一旦执行了某一语句,则会自动地结束这一case 后的语句;而C 的switch 语句则不然。首先,switch 语句中的常量表达式只是起到一个入口作用,一旦执行了相应的语句后,只要没有强迫中断语句(break),它就会一直按顺序继续执行下去,也就是会执行其它case 后面的语句,直到遇到“}” 符号才停止。乍看觉得有点不可事议,但若仔细回味且切身编程体会,那么就会感司到C 的switch 语句的独到之处。接下来就几个具体例子来剖析:switch 语句的特点以及区别于其它语言中的相应语句的妙处。

---- 第一个例子:根据输入的百分制成绩,然后给出‘A’ ~‘E’ 相应的等级符(90-100 为‘A’、80-89 为‘B’、70-79 为‘B’、60-69 为‘C’、0-59 为‘E’)。主要的处理程序段如下:(temp、score、grade 皆为整型变量) temp=score/10; switch(temp) {case 9:grade=‘A’; case 8:grade=‘B’;case 7:grade=‘C’; case 6:grade=‘D’; case 5:grade=‘E’; } printf(“the grade is %c”,grade);

---- 仔细阅读这段程序(根据C 语言的特点),就会发现有很多错误。首先,对100 分和低于50 分的情况没有考虑;其次,C 语言的switch 特点是顺序执行,那么这段程序不输入的分数如何,最后的输出都将是‘E’。因此,修改这段程序,可以得到一个正确答案是:temp=score/10; switch(temp) {case 10: case 9:grade=‘A’;break; case 8:grade=‘B’;break; case 7:grade=‘C’;break; case 6:grade=‘D’;break; case 5: case 4: case 3: case 2: case 1: case 0:grade=‘E’; } printf(“the grade is %c,grade”);

---- 但这么一个结果还不算是一个好的C 程序,因为它只是能得到正确的解,没有真正用到C 的特点。如果将C 的特点运用到这段程序中,则程序将优化成如下:grade=‘A’; temp=score/10; switch(temp){case 0: case 1: case 2: case 3: case 4: case 5:grade++; case 6:grade++;case 7:grade++; case 8:grade++; case 9: case 10: } printf(“the grade

is %c,grade”);

---- 从这段程序中,我们可以体会到前面所说的该语句的特点。

---- 第二个例子:运输公司对用户计算运费。距离(s)越远,每公里运费越低。具体标准如下: s < 250 (km)没有折扣 250 < =s < 500 (km)2% 折扣 500 < =s < 1000 (km) 5% 折扣 1000 < =s < 2000(km) 8% 折扣 2000 < =s < 3000(km) 10% 折扣 3000 < =s (km) 15% 折扣

---- 设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费计算公式为:

---- f=p*w*s*(1-d)

---- 分析此问题,折扣的变化是有规律的:折扣的“ 变化点” 都是250 的倍数(250,500,1000,2000,3000)。利用这一特点,可以再设一变量c,它代表250 的倍数。当c<1 时,无折扣;1<=c<2 时,折扣为d=2%;2<=c<4 时,d=5%;4<=c<8 时,d=8%;8<=c<12 时,d=10%; c>=12 时,d=15%。所以可以有如下没有错误的程序段: scanf(“%f,%f,%d”,&p,&w,&s); if(s>=3000)c=12 else c=s/250 switch(c) {case 0:d=0;break; case 1:d=2;break; case 2:case 3:d=5;break; case 4: case 5: case 6: case 7:d=8;break; case 8: case 9: case 10: case 11:d=10;break; case 12:d=15; } f=p*w*s*(1-d/100.0); printf (“freight%15.f”,f);

---- 如同前一个题目,这个程序段也完全可以利用switch 特点,改进优化得到如下程序段: d=0 scanf(“%f,%f,%k”,&p,&w,&s); if(s>=3000)c=12 else c=s/250 switch(c) {case 12:d+=5; case11: case 10: case 9: case 8:d+=2; case 7: case 6: case 5: case 4:d+=3; case 3: case 2:d+=3; case 1:d+=2; case 0: } f=p*w*s*(1-d/100.0); printf(“freight%15.4f”,f);

---- 从上面两个例子分析,使我们可以比较清楚地看见C 语言中switch 语句与其它语言中相应语句的区别。尽管在学习和教计

算机语言的过程中,我们始终认为语言是相通的,这样便于学习一门新的语言。但是真正要把某一门计算机语言学好,非得掌握它的特点。

---- 这里仅仅是自己在编程实践过程中的一点体会,有错误的地方恳请批评指正。

希望对你有帮助!

相关文档
最新文档