switch语句

switch只能测试是否相等,不能测试关系或逻辑表达式。怎么理解?
下面的程序
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a,b,c;
a=2;b=7;c=5;
switch(a>0)
{
case 1:switch(b<10)
{
case 1:printf("@"); break;
case 0:printf("!"); break;
}
case 0:switch(c==5)
{
case 0:printf("*"); break;
case 1:printf("#"); break;
default:printf("%"); break;
}
default:printf("&");
}
printf("\n");

system("PAUSE");
return 0;
}

其中a>0,b<0不就是测试关系吗?
case 1,case0是否表示逻辑判断?如果是,那switch不就是能够测试逻辑表达式么?
switch只能测试是否相等,不能测试关系或逻辑表达式。应该怎么理解?
其中a>0,b<10不就是测试关系吗?之前打错了

执行过程:

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

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

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

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-10-07

在C语言中,switch语句是开关语句,一般与case、break、default配合使用,对流程进行控制。

switch ( 变量表达式 ),C规定:如果case或default语句结束后没有break,则继续执行下面的语句,直到遇到break语句才跳出switch。

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

遵守switch语句规则

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

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

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

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

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

本回答被网友采纳
第2个回答  2021-09-22

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

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

直线翻译:switch语句,即“切换”语句;case即“情况”。

switch语句的语法如下(switch,case,break和default是关键字):

switch ( 变量表达式 )

{

    case 常量1 :语句;break;

    case 常量2 :语句;break;

    case 常量3 :语句;break;

    ...

    case 常量n:语句;break;

    default :语句;break;

}

switch语句注意事项:

switch语句执行时会从上到下根据括号中表达式的值作比较,当某个case语句中的表达式与此值相同时,就执行这个case语句或语句序列,直到遇到break为止。

break语句是必须有的,它用来结束switch语句的执行。如果所有case语句后面的表达式都不等于switch语句的表达式expr1的值川0执行default后面的默认语句序列。不过,default部分是可选的。如果没有这一部分,并遇到所有case语句都不匹配,那么,就不作任何处理而进入后续程序段的执行。

可见,一个switch语句可以代替多个if-else语句组成的分支结构,而switch语句从思路上显得更清晰。

使用switch语句时,要注意expr1必须是符合byte,char,short,int类型的常量表达式,而不能用浮点类型或long类型,//(也不能为一个字符串)。 (jdk7后,允许String)

本回答被网友采纳
第3个回答  2010-03-25
这个想法很巧妙,呵呵。
不能测试关系和逻辑表达式的意思是你不能这么写
switch()
{
case <10:printf("@"); break;
case >=10:printf("!"); break;
}
因为case必须接常量表达式。
不过你这个程序巧妙地把判断做成了一个布尔逻辑式放到了switch里。我遇到这样肯定if去了,想不到这么高明的写法的。本回答被提问者采纳
第4个回答  2010-03-25
Switch(A)
case a:
case b:
....

Switch 判断A这个表达式的值与下列a,b,...是否相等。相等则执行。
a>0,b<10是表达式 。成立则这个表达式的值也就是A为1,否则为0.
与a,b等比较是否相等。
相似回答