问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于c语言switch语句的用法

发布网友 发布时间:2022-04-19 10:54

我来回答

5个回答

热心网友 时间:2023-06-25 03:18

凡是使用过的人都会有同样的感觉——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 语句与其它语言中相应语句的区别。 尽管在学习和教计算机语言的过程中, 我们始终认为语言是相通的, 这样便于学习一门新的语言。 但是真正要把某一门计算机语言学好, 非得掌握它的特点。 ---- 这里仅仅是自己在编程实践过程中的一点体会, 有错误的地方恳请批评指正。 希望对你有帮助!

热心网友 时间:2023-06-25 03:19

因为你没加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;
}

热心网友 时间:2023-06-25 03:19

你忘了在每个 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");
 }
}

热心网友 时间:2023-06-25 03:20

在每个case语句后加上break语句(即在每个printf语句后加上一句break;),执行break后直接跳出switch。这样就只输出一个了

热心网友 时间:2023-06-25 03:20

在每个printf();语句后面加break;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 404 Not Found c语言switch case语句例子是什么? C语言中成绩分级(用switch语句)的问题 C语言用switch函数输出成绩等级,怎么无法输出 C语言中switch case 评估成绩的问题 、从键盘上输入一个学生的成绩,用switch结构编程输出该同学成绩的档次 求用C语言中switch语句编写学生成绩问题 C语言中的Switch-case语句 404 Not Found 404 Not Found C语言用switch语句进行成绩等级判断 C语言编程:采用switch语句编写成绩等级:100-90分为A,75-89为B,65-74为C,60-64为D,小于60为E 编一个程序,输入0—100之间的一个学生成绩分数,用switch语句输出成绩 C语言编程:采用switch语句编写成绩等级:100-90分为A,75-89为B,65-74为C,60-64为D,小于60为E 如何用C语言中switch语句编写学生成绩问题? 输入一个百分制成绩,利用switch语句编写程序,要求输出成绩等级A B C D,E。90以上为A 三星手机怎么查看保修期? 怎么在百度上发布个人信息??? 怎么在百度上发布个人信息 怎么在百度里发布个人信息 C语言中switch结构的使用 三星手机怎么查保修时间 畅捷通怎么登录网页版 畅捷通网页版无法显示网页 畅捷通网页版文件会丢失吗 你好,咨询一个问题,我用的是用友畅捷通T+网页版的,网络正常,但是软件打不开,我们是电信专线 畅捷通网页版的固定资产可以设置三级吗 404 Not Found 畅捷通t网页标准版财务软件怎么导出明细分类账 财务软件网页版和单机版哪个好用 用友网页版登陆网址是什么 好会计财务记账软件是在线网页版的?功能好不好用? 怎样做彩色饺子才能不变色? 据说畅捷通的好会计软件走到哪都能做账,是吗? 彩色饺子皮怎么做不变色窍门 畅捷通T+可以用网络服务器吗 火龙果饺子怎么不变色? 有没有操作简单点的财务软件,比较好上手的那种? 菠菜汁和面包饺子怎么不变色 登陆用友畅捷通T+ IE浏览器打不开也进不上了 求救!