c语言 switch的用法 c语言中“switch ”语句的用法有哪些?

C\u8bed\u8a00\u4e2d\u7684SWITCH\u662f\u4ec0\u4e48\u610f\u601d\uff1f

switch\u7684\u610f\u601d\u662f\u8f6c\u6362\u3002Switch\u7528\u5728\u7f16\u7a0b\u4e2d\uff0c\u5982C\u8bed\u8a00\u4e2d\u5b83\u7ecf\u5e38\u8ddfCase\u4e00\u8d77\u4f7f\u7528\uff0c\u662f\u4e00\u4e2a\u5224\u65ad\u9009\u62e9\u4ee3\u7801\u3002\u6c49\u8bed\u7ffb\u8bd1\uff1an. \u5f00\u5173\uff0c \u7535\u95f8\uff0c \u8f6c\u6362\uff0c \u8f6f\u679d\uff0c \u97ad\u5b50\uff0c \u9053\u5c94vt. \u8f6c\u53d8\uff0c \u5207\u6362\uff0c \u6446\u52a8\uff0c \u8f6c\u6362\uff0c \u4f7f\u8f6c\u8f68vi. \u8f6c\u6362\uff0c \u53d8\u6362\uff0c \u6446\u52a8\u76f8\u5173\u8bcd\u7ec4\uff1aswitch sb onswitch sb offswitch sth out of sb's handasleep at the switch\u540d\u8bcd\uff1aswitcher \u52a8\u8bcd\u8fc7\u53bb\u5f0f\uff1aswitched \u8fc7\u53bb\u5206\u8bcd\uff1aswitched \u73b0\u5728\u5206\u8bcd\uff1aswitching \u7b2c\u4e09\u4eba\u79f0\u5355\u6570\uff1aswitches \u5f62\u5bb9\u8bcd\uff1aswitchable

C\u8bed\u8a00\u7a0b\u5e8f\u8bed\u53e5switch\uff1a
\u3000\u3000switch\u7528\u5728\u7f16\u7a0b\u4e2d\uff0c\u5982C\u8bed\u8a00\u4e2d\u5b83\u7ecf\u5e38\u8ddfcase\u4e00\u8d77\u4f7f\u7528\uff0c\u662f\u4e00\u4e2a\u5224\u65ad\u9009\u62e9\u4ee3\u7801\u3002\u5176\u529f\u80fd\u5c31\u662f\u63a7\u5236\u4e1a\u52a1\u6d41\u7a0b\u6d41\u8f6c\u7684\u3002
\u3000\u3000switch\u8bed\u53e5\u7684\u8bed\u6cd5\u5982\u4e0b(switch\uff0ccase\u548cdefault\u662f\u5173\u952e\u5b57)\uff1a
\u3000\u3000switch ( controllingExpression )
\u3000\u3000{
\u3000\u3000case constantExpression1 :
\u3000\u3000case constantExpression2 :
\u3000\u3000case constantExpression3 :
\u3000\u3000statements; //\u5f53\u6ee1\u8db3constantExpression1\u3001constantExpression2\u3001constantExpression3\u4efb\u4f55\u4e00\u4e2a\u90fd\u6267\u884cstatements
\u3000\u3000break;
\u3000\u3000case constantExpression :
\u3000\u3000statements ;
\u3000\u3000break;
\u3000\u3000...
\u3000\u3000default :
\u3000\u3000statements ;
\u3000\u3000break;
\u3000\u3000}
\u3000\u3000\u9075\u5b88switch\u8bed\u53e5\u89c4\u5219
\u3000\u3000switch\u8bed\u53e5\u975e\u5e38\u6709\u7528\uff0c\u4f46\u5728\u4f7f\u7528\u65f6\u5fc5\u987b\u8c28\u614e\u3002\u6240\u5199\u7684\u4efb\u4f55switch\u8bed\u53e5\u90fd\u5fc5\u987b\u9075\u5faa\u4ee5\u4e0b\u89c4\u5219\uff1a
\u3000\u3000\u53ea\u80fd\u9488\u5bf9\u57fa\u672c\u6570\u636e\u7c7b\u578b\u4f7f\u7528switch\uff0c\u8fd9\u4e9b\u7c7b\u578b\u5305\u62ecint\u3001char\u7b49\u3002\u5bf9\u4e8e\u5176\u4ed6\u7c7b\u578b\uff0c\u5219\u5fc5\u987b\u4f7f\u7528if\u8bed\u53e5\u3002
\u3000\u3000case\u6807\u7b7e\u5fc5\u987b\u662f\u5e38\u91cf\u8868\u8fbe\u5f0f(constantExpression)\uff0c\u598242\u6216\u8005"42"\u3002\u5982\u679c\u9700\u8981\u5728\u8fd0\u884c\u65f6\u8ba1\u7b97case\u6807\u7b7e\u7684\u503c\uff0c\u5fc5\u987b\u4f7f\u7528if\u8bed\u53e5\u3002
\u3000\u3000case\u6807\u7b7e\u5fc5\u987b\u662f\u60df\u4e00\u6027\u7684\u8868\u8fbe\u5f0f\uff1b\u4e5f\u5c31\u662f\u8bf4\uff0c\u4e0d\u5141\u8bb8\u4e24\u4e2acase\u5177\u6709\u76f8\u540c\u7684\u503c\u3002
\u3000\u3000C\u8bed\u8a00switch\u5e94\u7528\u4f8b\u5b50\uff1a
\u3000\u3000\u4f8b\u4e00\uff1a
\u3000\u3000#include
\u3000\u3000int main()
\u3000\u3000{
\u3000\u3000double score;
\u3000\u3000printf("\u8bf7\u8f93\u5165\u5206\u6570\uff1a\n");
\u3000\u3000scanf("%lf",&score);
\u3000\u3000switch((int)(score/10)) //\u5982\u679c\u5199\u6210witch((int)score/10)\u4f1a\u51fa\u73b0\u4e25\u91cd\u9519\u8bef
\u3000\u3000{
\u3000\u3000case 10:
\u3000\u3000case 9:printf("A(\u6700\u597d)\n");break;
\u3000\u3000case 8:printf("B(\u4f18\u79c0)\n");break;
\u3000\u3000case 7:printf("C(\u826f\u597d)\n");break;
\u3000\u3000case 6:printf("D(\u53ca\u683c)\n");break;
\u3000\u3000case 5:
\u3000\u3000case 4:
\u3000\u3000case 3:
\u3000\u3000case 2:
\u3000\u3000case 1:
\u3000\u3000case 0:printf("E(\u4e0d\u53ca\u683c)\n");break;
\u3000\u3000default:printf("Error!\n");
\u3000\u3000}
\u3000\u3000}
\u3000\u3000\u4f8b\u4e8c\uff1a
\u3000\u3000#include
\u3000\u3000int main()
\u3000\u3000{
\u3000\u3000char rank;
\u3000\u3000printf("\u8bf7\u8f93\u5165\u5206\u6570\u7b49\u7ea7\uff1a(A\u3001B\u3001C\u3001D\u3001E)\n");
\u3000\u3000scanf("%c",&rank);
\u3000\u3000switch(rank)//switch((int)score/10)\u51fa\u73b0\u4e25\u91cd\u9519\u8bef\uff0cswitch(((int)score)/10)\u51fa\u73b0\u4e25\u91cd\u9519\u8bef\uff0c
\u3000\u3000{
\u3000\u3000case 'A':printf("A(90~100)\n");break;
\u3000\u3000case 'B':printf("B(80~89)\n");break;
\u3000\u3000case 'C':printf("C(70~79)\n");break;
\u3000\u3000case 'D':printf("D(60~69)\n");break;
\u3000\u3000case 'E':printf("E(0~59)\n");break;
\u3000\u3000default:printf("error!\n");break;
\u3000\u3000}
\u3000\u3000}
\u3000\u3000\u4f8b\u4e09\uff1a
\u3000\u3000\u8f93\u5165\u5e74\u6708\u65e5\uff0c\u5224\u65ad\u8fd9\u4e00\u5929\u662f\u8fd9\u4e00\u5e74\u7684\u7b2c\u51e0\u5929\u3002
\u3000\u3000#include
\u3000\u3000int main()
\u3000\u3000{
\u3000\u3000int year,month,date,leap,days=0;
\u3000\u3000scanf("%4d%2d%2d",&year,&month,&date);
\u3000\u3000leap=(year%4==0&&year%100!=0||year%400==0);
\u3000\u3000switch(month)
\u3000\u3000{
\u3000\u3000case 12:days+=30;
\u3000\u3000case 11:days+=31;
\u3000\u3000case 10:days+=30;
\u3000\u3000case 9:days+=31;
\u3000\u3000case 8:days+=31;
\u3000\u3000case 7:days+=30;
\u3000\u3000case 6:days+=31;
\u3000\u3000case 5:days+=30;
\u3000\u3000case 4:days+=31;
\u3000\u3000case 3:days+=28+leap;
\u3000\u3000case 2:days+=31;
\u3000\u3000case 1:days+=date;break;
\u3000\u3000}
\u3000\u3000printf("%4d\u5e74%2d\u6708%2d\u65e5\u662f\u8fd9\u4e00\u5e74\u7684\u7b2c%d\u5929\u3002\n",year,month,date,days);
\u3000\u3000}

执行过程:

  1. 先计算并获得switch后面小括号里的表达式或变量值,然后将计算结果顺序与每个case后的常量比较。

  2. 当二者相等时,执行个case块中的代码,当遇到break时,就跳出switch选择结构,执行switch选择结构之后的代码。

  3. 如果任何一个case之后的常量与switch后的小括号中的值相等,则执行switch尾部的default块中代码。



switch用在编程中,如C语言中它经常跟case一起使用,是一个判断选择代码。其功能就是控制业务流程流转的。

C语言程序语句switch语句的语法如下(switch,case和default是关键字):

switch ( controllingExpression )

{

case constantExpression1 :

case constantExpression2 :

case constantExpression3 :

statements; 

//当满足constantExpression1、constantExpression2、constantExpression3任何一个都执行statements

break;

case constantExpression :

statements ;

break;

...

default :

statements ;

break;

}

扩展资料:

Switch在一些计算机语言中是保留字,其作用大多情况下是进行判断选择。以C语言来说,switch(开关语句)常和case break default一起使用。

遵守switch语句规则

switch语句非常有用,但在使用时必须谨慎。所写的任何switch语句都必须遵循以下规则:

只能针对基本数据类型中的整型类型使用switch,这些类型包括int、char等。对于其他类型,则必须使用if语句。

switch()的参数类型不能为实型 。

case标签必须是常量表达式(constantExpression),如42或者'4'。

case标签必须是惟一性的表达式;也就是说,不允许两个case具有相同的值。

参考资料来源:百度百科-switch (计算机语言关键字)



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

case (c>=90 && c<=100):
case后面的必须是一个常量。
你这个可以先将成绩除以10,再用switch
#include "stdio.h"
void main()
{
char c; /*这里别用char,改成:int c,d;*/
scanf("%c",&c); /*这一句也改成scanf("%d",&c);最好前面再加一句,printf("请输入成绩:"); 在这句后面加一句d=c/10;*/
switch(c) /*然后switch里面用d来判断,switch(d)*/
{
case (c>=90 && c<=100):printf("成绩的等级为:A.\n");
break; /*改成: case (10):
case (9):printf("成绩的等级为:A.\n");break;
case (c>=80 && c<=89):printf("成绩的等级为:B.\n");
break; /*改成:case (8):printf("成绩的等级为:B.\n"); break;
}

}
因为90到100之间的数经过除以10再取整以后就变成了9;100/10等于10,又因为case调用同一个语句的时候允许就在最后一个语句写上那个语句,而将前面的那几个省略掉,所以case (10):后面的就省掉了,当然写上也不会错。
你的补充的那个,你可以把它分开表示,就像我给你弄的那个case (c>=90 && c<=100):printf("成绩的等级为:A.\n");
break; /*改成: case (10):
case (9):printf("成绩的等级为:A.\n");break;
虽然有点纠缠不清的感觉,但是希望对解决你的疑问有一定的帮助,呵呵。。。

执行case 2是因为在switch (x) 中x=1,所以执行case 1,然而case 1 这条语句没有break,所以switch (x)在执行了case 1之后将继续往下依次执行case语句,直到碰到break就跳出switch 循环。

对于“a的自加是先执行后在自加,当此程序a自加的时候没有执行其他语句啊?????? ” 则是你没看到程序中的语句a++,b++它自加完了以后把值任然是赋值给a,b本身的,而不是赋值给其他变量例如c=a++;z=b++。如果是这样赋值给别的变量的话那么就很明确了c,z的值将和课本上说得一样都是自加以前的值 。也就是说这个程序当中最后printf输出的是a,b的值,但是a,b在自加过程中值都变化了,就是说相当于语句a=a++,b=b++.
我将你的程序进行了更改,你将两个程序都运行下然后再对照着看一下就明白为什么a,b的值最后是2和1了,程序如下
#include <stdio.h>
main()
{
int x=1,y=0,a=0,b=0,c=0,z=0;
switch (x)
{case 1:
switch(y)
{
case 0:c=a++;break;
case 1:b++;break;
}
case 2: c=a++,z=b++;break;
case 3:a++,b++;
}
printf("c=%d,z=%d\n",c,z) ;
}

对于 ++i 和i++ 有什么区别?
简单而言: ++i在i 存储的值上增加一并向使用它的表达式“返回” 新的, 增加后的值; 而i++ 对i增加一, 但返回原来的是未增加的值。

扩展阅读:字母switch圈内意思 ... switch c语言怎么用 ... c语言switch用法举例 ... 圈子里switch什么意思 ... switch case用法举例 ... c++中switch的用法 ... switch任天堂 ... 买switch为什么后悔 ... switch语句怎么使用 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网