永发信息网

C语言里的switch语句怎么用,最好有例子哈~!

答案:1  悬赏:0  手机版
解决时间 2021-03-01 16:17
C语言里的switch语句怎么用,最好有例子哈~!
最佳答案
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 语句与其它语言中相应语句的区别。 尽管在学习和教计算机语言的过程中, 我们始终认为语言是相通的, 这样便于学习一门新的语言。 但是真正要把某一门计算机语言学好, 非得掌握它的特点。 ---- 这里仅仅是自己在编程实践过程中的一点体会, 有错误的地方恳请批评指正。 希望对你有帮助!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
安邦咨询的销售怎么样
庄河市民营企业服务中心我想知道这个在什么地
美文摘抄 字数少一点 要有作者和出处
我想开一家盲人按摩店,都需要办什么手续?
金边兰花价格是多少
常州市远大纸箱厂在什么地方啊,我要过去处理
dnf斯洛特三图boss后面那团火的代码
魔兽单机真三国无双3.9dal魔剑阿尔哈萨特合成
2015款全新别克英朗1点5排量发动机好吗
兴达粮油日用百货超市我想知道这个在什么地方
三个互不相等的实数成等差数列,如果适当排列
忠环河鱼馆地址在什么地方,想过去办事
无可比拟 近义词
投影机的屏幕离地面的高度有多高?
新付屋在哪里啊,我有事要去这个地方
推荐资讯
洋高考的主要启示
以春秋战国为题材的游戏,或汉宋,明末,抗日
日语 法人组织の场合、 届出者の栏は、届出事
描写大海的作文不少于400字
明超家纺广场(滨河南路店)在什么地方啊,我要
360借条安全吗
重小养大的魔王松鼠.会跑吗..
考东北师范大学的城市规划与设计的研究生要靠
民乐县六坝镇四坝村卫生室地址在什么地方,想
psp模拟器为什么模拟不了ps1游戏
中国加入世界贸易组织对本国带来的压力和挑战
用photoshop cs3,图中的投影怎么弄?谢谢了
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?