问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

关于c语言switch语句的用法7

提问网友 发布时间:2024-03-06 20:09
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
5个回答
热心网友 回答时间:2024-03-30 11:40
凡是使用过的人都会有同样的感觉——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 语句与其它语言中相应语句的区别。 尽管在学习和教计算机语言的过程中, 我们始终认为语言是相通的, 这样便于学习一门新的语言。 但是真正要把某一门计算机语言学好, 非得掌握它的特点。 ---- 这里仅仅是自己在编程实践过程中的一点体会, 有错误的地方恳请批评指正。 希望对你有帮助!
热心网友 回答时间:2024-03-30 11:40

你忘了在每个 case 块之后加上 break... 如

#include <stdio.h>
int main()
{
        int k;
        scanf("%d",&k);
        switch(k)
 {
    case 1:
        printf("%d\n",k++);
        break;
    case 2:
        printf("%d\n",k++);
        break;
    case 3:
        printf("%d\n",k++);
        break;
    case 4:
        printf("%d\n",k++);
        break;
    default:
        printf("FULL!\n");
 }
}
热心网友 回答时间:2024-03-30 11:45

因为你没加break

#include <stdio.h>
int main()
{
    int k;
    scanf("%d",&k);
    switch(k)
 {
    case 1:
        printf("%d\n",k++);
break;
    case 2:
        printf("%d\n",k++);
break;
    case 3:
        printf("%d\n",k++);
break;
    case 4:
        printf("%d\n",k++);
break;
    default:
        printf("FULL!\n");
break;
 }

return 0;
}
热心网友 回答时间:2024-03-30 11:44
在每个case语句后加上break语句(即在每个printf语句后加上一句break;),执行break后直接跳出switch。这样就只输出一个了
热心网友 回答时间:2024-03-30 11:45
在每个printf();语句后面加break;

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

C语言里的switch语句怎么用,最好有例子哈1 C语言中,如何在switch case后面调用函数,一共5个...19 c语言中的switch语句,使用时应注意哪些?11 c语言中switch怎么用?93 ...但是还有比较湿,想问一下,怎么样能保存2个月? 鼻骨整形手术有没有副作用? 鼻骨矫正的危害? 造梦西游ol里的混沌之戒有啥用5 造梦西游ol玲珑玉和山河图+4对比5 梦幻西游186符是什么意思? 本人想制作一个跑跑卡丁车视屏,有哪位大哥知道制作视屏需要什么软件以及... 造梦西游ol悟空业力哪个好5 造梦西游悟空饰品、衣服中哪个最好?12 造梦西游ol悟空饰品1 地暖分水器进出水总开关怎么打不开4 长春市内有中国民生银行吗? 苏州火车站前是什么河?1 苏州火车站的那个桥叫什么名字3 苏州汽车北站南边的河叫什么 苏州火车站北南广场对面是什么河 您好。。请问C语言中。switch怎么使用char 比较7 隐形防盗网验收标准?4 隐形防盗网安全吗?6 篮球框怎么安装? 篮球的篮板,篮圈离地面有多高? 我1.75怎么练才能摸到篮圈? 篮圈到地面的高度? 前面画篮圈的求解答 银杏什么时间成熟?怎么食用?13 白果什么时候吃比较好9 白果什么时候吃正好?8 银杏果怎么吃好13 银杏果怎么吃最好1 银杏果长期吃有好处吗607 白果一天中什么时间吃最宜人11 股票账户余额多时会影响打新股吗 时间是检验真理的唯一标准是病句吗 ...原来有一个,但我又用这个手机号注册了一个,现在以前的... 同一个手机号又注册了一个新微信,怎么用回原来的? 一个手机号在注册了一个微信后又注册了新的,旧的怎么找回?
Top