C语言问题,高手请教~~谢谢了;阿

来源:百度知道 编辑:UC知道 时间:2024/06/14 10:17:03
若有以下变量定义:float x;int a,b;
则正确的switch语句是_________
A.switch(x)
{case1.0:printf(“*\n”);
case2.0:printf(“**\n”); }

B.switch(x)
{case1,2:printf(“*\n”);
case.3:printf(“**\n”); }

C.switch(a+b)
{case1:printf(“*\n”);
case2*a:printf(“**\n”); }

D.switch(a+b)
{case1:printf(“*\n”);
case1+2:printf(“**\n”); }

答案是D 大家帮忙看看其他几项错在哪里啊?
还有就是顺便问下D为什么是对的呀 1 和a+b 能对应?

你好,
关于switch - case 语句的使用有以下几点是需要注意的:
(1)switch后面的括号里的式子成为“控制表达式”,可以是一个变量名(如:a),也可以是一个表达式,就像你题中的a+b那样。
(2)case后面所跟的一定要是一个确切的值,不能是变量名。而且,这个确切的值只支持两种类型,整形和字符型。比如说:1,2,300,这样的都是整形,'a','b' '\n', 这样的在单引号里面的成为字符型。case后面只支持这两种类型,其他的不支持,比如说浮点型数(像1.0这样的)。

所以你的题目中D是正确的,switch后面可以是一个表达式a+b的,其中的第二个case后面是1+2,看似是一个式子,其实是一个很确切的数值3,所以也是正确的。

A的错误原因:case后面跟了浮点型1.0和2.0;

B的错误原因:case后面只能跟一个数值,case1,2这样的形式是不正确的,如果真想表达这个意思的话,可以这样:
B.switch(x)
{case 1:case 2:printf(“*\n”);
case.3:printf(“**\n”); }
就是说把逗号改成冒号就可以了,这样不管检测到1还是2都执行同一个语句printf(“*\n”);

C的错误原因:2*a不是一个确切的数值,所以不正确。但是如果是case 2*3,这样就是正确的,因为编译器在读到语句2*3的时候,相当于读到的是case 6,这符合case的用法。

呵呵,大概就是这样了,不懂的话再留言,我会一直关注你这个问题的,
有问必答的哦~
祝你早日解决问题,成为一个编程高手!

switch expression of type 'float' is illegal

可能是SWITCH不能用于浮点吧,
另CASE 跟着常量吧

switch(c);这里的c只能用整形
case c:这里的c也只能用整形 A,B错误
上行中的c应