求助:c语言练习题的解答

来源:百度知道 编辑:UC知道 时间:2024/05/21 13:15:39
若a和b均为正整形变量,正确的switch语句是

A.switch(pow(a,2)+pow(b,2))
{ case 1:case 3:y=a+b;break;
case 5:case 0:y=a-b;break;
}

B.switch(a*a+b*b)
{ case 3:
case 1:y=a+b;break;
case 0:y=a-b;break;
}

为什么答案是A,而不是B

double pow( double base, double exp );返回的是一个double型。
我觉的答案应该是B,不应该是A;

你可以尝试编译下下面的这个程序,应该是编译不过的,我用的是dev c++编译器会停在switch这句上,提示你,switch括号内不是一个整形,如果括号内是一个浮点型的话,则判断需要用if,else,而且判断方式也不是单纯的==判断了。。

#include<iostream>
#include<math.h>
int main()
{
int a=0,b=1,y;
switch(pow(a,2)+pow(b,2))
{ case 1:case 3:y=a+b;break;
case 5:case 0:y=a-b;break;
}
system("PAUSE");

}
具体看以看看下面:
switch语句非常有用,但在使用时必须谨慎。所写的任何switch语句都必须遵循以下规则:
只能针对基本数据类型使用switch,这些类型包括int和string等待。对于其他类型,则必须使用if语句。
case标签必须是常量表达式(constantExpression),如42或者"42"。如果需要在运行时计算case标签的值,必须使用if语句。
case标签必须是惟一性的表达式;也就是说,不允许两个case具有相同的值。

我能想到的只有如果a和b都是正整数a*a+b*b不可能等于0...

这种东西条件允许直接质问出题人吧

呃... 应该是B, 刚才查pow看差了,没有整形的

答案是B不是A