发布网友 发布时间: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