问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

C语言中的switch语句,case后面可不可以跟一表达式,例如“100>x>50...

发布网友 发布时间:2022-04-23 03:23

我来回答

7个回答

热心网友 时间:2022-04-11 17:41

不可以,C语言中的switch case中的case后面仅可以跟整形常量或常量表达式

原因:如果case后面跟 100>x>50是会出现逻辑错误的。

首先C语言中像100>x>50这种表达式的意义并不和数学里的一样表示x落在(50,100)这个区间。这个在C语言中100>x会先被计算得到真或假。直接用关系运算得到的真和假在C语言中就是1或0。而1或0是始终小于50的。这就导致这个表达式的值永远为零。

常量表达式:在计算机编程语言中,若一个表达式的值不能发生改变,则称之为常量表达式,如C++中有整型常量,字符常量,逻辑常量,实型常量,地址常量,符号常量,这些常量组成的表达式即为常数表达式。其中含有字符常量的常量表达式可称为字符常量表达式。

整型常量:整型常量就是通常的整数,包括正整数、负整数和0,其数据类型显然是整型。除此之外,整型常量包括短整型、长整型和无符号型等不同类型。

扩展资料

switch语句的用法和特点:

switch的用法是判断case后面的表达式和switch后面的表达式是否相匹配,一旦case匹配,就会顺序执行后面的程序代码,而不管后面的case是否匹配,直到遇见break。

Switch case 语句表达式为:

switch{case 常量1: 语句体1;case 常量2: 语句体2;case 常量3: 语句体3;case 常量4: 语句体4;....default : 语句体;}

当常量表达式所表达的量与其中一个case语句中的常量相符时,就执行此case语句后面的语句,并依次下去执行后面所有case语句中的语句,除非遇到break;语句跳出switch语句为止。如果常量表达式的量与所有case语句的常量都不相符,就执行default语句中的语句并跳出switch语句。

switch ...  case语句的特点:

1、把要讨论的表达式与case后面的常量进行比较,发现匹配项之后,从该位置入口,做它下面的所有语句。

2、case 后面的常量不能重复

3、可以在每一个case语句的后面加上break语句,这样就能保证只做与之相匹配的那一项。

4、break实质:在switch ...case语句里面最先遇到那一个break就从该位置结束该语句

5、可以在最后一个case的下面加上default语句表示如果找不到匹配项时,就做default对应的项。

6、default并不是一定要有,如果前面遇到break,default就不执行。如果没有遇到break,就一定会执行。

7、case后面的语句可以不执行,表示与下一个case是或的关系。

参考资料:百度百科-switch

热心网友 时间:2022-04-11 18:59

不可以,C语言中的switch case中的case后面仅可以跟整数常量或常量表达式。

在C语言创始人K&R 《The Programming C》第二版一书中的72页指出:Each case is labeled by one or more integer-valued constants or constant expressions. 即:每个case被一个或多个整数型常量或常量表达式标注。

如果case后面跟 100>x>50是会出现逻辑错误的。首先C语言中像100>x>50这种表达式的意义并不和数学里的一样表示x落在(50,100)这个区间。这个在C语言中100>x会先被计算(C语言运算符中的结合性)得到真或假。直接用关系运算得到的真和假在C语言中就是1或0。而1或0是始终小于50的。这就导致这个表达式的值永远为零。

这样就会产生一个问题。之前说case后面只能跟常量。所以编译时编译器会检查case后面是不是常量。如果case后面跟一个100>x>50,这个表达式始终为零。在编译阶段就会被优化成0。这就是一个常量,所以编译不会报错。但代码就会变成匹配switch后面的表达式等于0时的情况。

但如果表达式改为100>x>0就会报:case label does not rece to an integer constant。标签无法化简为整数,也就是case后面不是常量了。因为100>x是0或1,0或1大不大于0是不确定的,是一个变量!所以报错。无论编译通过与否,case后面跟一个像100>x>50这样的表达式都与原来要达到的目的相去甚远。

所以说在C语言中如果你要使用case作范围判断就比较麻烦,比如要判断90>x>100就要先把x整除10,然后case再匹配9就可以曲线救国。但是这样太麻烦,代码也不易读。建议使用if-else语句来代替。switch-case用来匹配常量就好了。

扩展资料:

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

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

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

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

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

参考资料来源:百度百科-switch关键字

参考资料来源:百度百科-C语言运算符

热心网友 时间:2022-04-11 20:34

不能,case后面是常量表达式。

要注意 CASE 表达式里各个分支返回的数据类型是否一致。某个分支返回字符型,而其他分支返回数值型的写法是不正确的。

使用 CASE 表达式的时候,最容易出现的语法错误是忘记写 END 。虽然忘记写时程序会返回比较容易理解的错误消息,不算多么致命的错误。而执行时却出错的情况大多是由这个原因引起的。

CASE表达式的执行结果是 NULL 。但是不写可能会造成"语法没有错误,结果却不对"这种不易追查原因的麻烦,所以写上 ELSE 子句(即便是在结果可以为 NULL 的情况下)。

扩展资料

1、CASE表达式的真假值判断就会中止,而剩余的 WHEN子句会被忽略。为了避免引起不必要的混乱,使用 WHEN子句时要注意条件的排他性。

2、当case后的表达式的值与switch表达式的值相等时, 即执行对应case后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

热心网友 时间:2022-04-11 22:25

不可以,case后面需要跟一个常量。如果你想要实现以范围区分,可以使用多个if语句来实现。

热心网友 时间:2022-04-12 00:33

switch语句非常有用,但在使用时必须谨慎。所写的任何switch语句都必须遵循以下规则:   只能针对基本数据类型使用switch,这些类型包括int、char等。对于其他类型,则必须使用if语句。   case标签必须是常量表达式(constantExpression),如42或者"42"。如果需要在运行时计算case标签的值,必须使用if语句。   case标签必须是惟一性的表达式;也就是说,不允许两个case具有相同的值。   C语言switch应用例子:   例一:   #include<stdio.h>   int main()   {   double score;   printf("请输入分数:\n");   scanf("%lf",&score);   switch((int)(score/10))//switch((int)score/10)出现严重错误   {   case 10:   case 9:printf("A(最好)\n");break;   case 8:printf("B(优秀)\n");break;   case 7:printf("C(良好)\n");break;   case 6:printf("D(及格)\n");break;   case 5:   case 4:   case 3:   case 2:   case 1:   case 0:printf("E(不及格)\n");break;   default:printf("Error!\n");   }   } 像你的50<x<100 非要用case可以定义一个就是a,a=x/50 整除。然后在case里面列举。

热心网友 时间:2022-04-12 02:58

100>X&&X>50

热心网友 时间:2022-04-12 05:39

比知道hiai
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
打开手机淘宝自动弹出陌生淘口令,有什么解决办法么?恢复出厂设置、卸载... 新生儿惊厥有哪些西医治疗的方法? 利用SOLIDWORKS 生成高清二维/三维图片 | 操作视频 SOLIDWORKS工程图导出高清图片,轻松几步搞定! 单眼皮变三眼皮了该如何解决? ...哭肿了,本来双眼皮的 一个变成三眼皮 一个单眼皮 怎么办???怎么消肿... 有关于数控专业的本科大学吗 学数控编程的正规学校 全国开设数控技术专业有哪些院校 学数控哪些学校比较好 c语言中switch和case和default什么意思啊 c语言 switch case 在c语言中开关语句switch中case是什么意思?? c语言switch case语句是什么? c语言switch case用法有哪些? 担保品怎么划拨 融资融券,担保品划入的股票为什么变成现价了,以前的盈利和亏损去哪里了? 担保品划转委托价格是什么时候意思 担保品划转后担保证券的成本价会产生变化吗 担保品划转有手续费吗 担保品划转是卖出股票的意思吗 macbook更新系统卡了一晚上 mac更新系统卡住了怎么办 mac升级Monterey,系统内存不够卡在进度条位置怎么办 苹果电脑macbook air更新系统后,进度条一直不动,应该怎么解决? 苹果笔记本升级系统失败,开不开机了,一只卡在进度条和苹果标 苹果更新系统到最后卡住了怎么办? 苹果更新系统到最后卡住了然后重启还是需要更新怎么办? hp omen control center是什么 干什么用的? Win10如何在文件夹窗口上打开控制面板 C语言编程switch语句中case后面如果是数字是不是写空格?如果是字符是不是需要用单引号? c语言中switch-case的问题 c语言switch case中的case1,case2,其中的1`2这些数学意思是? C语言中,如何在switch case后面调用函数,一共5个case,都要用函数的调用 c语言中switch case怎么表示一个范围 C语言中switch case的问题 c语言在switch中case2如何引用case1中输出的数。 c语言中case 1: switch 的意思是什么? 海油发展为什么不涨 汽车上的灰尘应该如何处理? 什么保单可以贷款 业绩那么好为什么不涨 新车上面的灰尘洗不掉怎么处理 轿车打完蜡后粘灰怎么办? 中国船舶业绩好为什么不涨 中国船舶为什么业绩好就是不涨 新车4天车玻璃和车身落了很多灰尘,怎么处 山东海化是否持有?为何山东海化业绩好还是不涨?山东海化此次大跌是机会还是风险? 汽车表面经常有灰尘,怎么办? 请问各位中海油(有限公司)天津分公司和中海油(海油发展)天津分公司哪个较好些?
  • 焦点

最新推荐

猜你喜欢

热门推荐