c语言中switch的问题,我是菜鸟,勿笑

#include<stdio.h>#include<math.h>voidmain(){doublex,y;printf("inputx\n");scanf("%lf",... #include <stdio.h>
#include <math.h>
void main()
{
double x,y;
printf("input x\n");
scanf("%lf",&x);
switch(x)
{
case x>=0&&x<10:y=sin(x);break;
case x>=10&&x<20:y=cos(x);break;
case x>=20&&x<30):y=exp(x)-1;break;
case x>=30&&x<40:y=log(x+1);break;
default:y=NULL;break;//其余值无定义
}
}
展开
 我来答
笨a小孩
2011-04-05 · TA获得超过2737个赞
知道小有建树答主
回答量:582
采纳率:0%
帮助的人:341万
展开全部

你这个程序的问题关键,不是在于case那多不多一个括号的问题

而是,switch...case语句这样用就是错误的!

switch...case语句中的switch()这个括号里面必须是一个整型变量或表达式,也可以是字符型和枚举类型,并且只能是这三种中的一种; 你这里的double是完全错误的!

case语句中的每个也必须是整型的常量才可以,你这里用的是表达式,而且不是常量,也是错误的

像你这个程序应该用if...else if .... else来写才对 

同时 写代码要注意缩进格式

参考代码:

意法半导体(中国)投资有限公司
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
tanzhangwen
2011-04-05 · TA获得超过1136个赞
知道小有建树答主
回答量:499
采纳率:0%
帮助的人:907万
展开全部
#include <stdio.h>
#include <math.h>
void main()
{
double x,y;
printf("input x\n");
scanf("%lf",&x);
if(x>=0&&x<10)y=sin(x);
else if(x>=10&&x<20)y=cos(x);
else if(x>=20&&x<30):y=exp(x)-1;
else if(x>=30&&x<40)y=log(x+1);
else y=NULL;//其余值无定义
}
}

原因:switch-case语句只针对其固定值的量,如case 0/case 'c'等,不能处理范围
对于这种判别范围的要用if-else语句
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangbwell
2011-04-05 · TA获得超过1238个赞
知道小有建树答主
回答量:490
采纳率:0%
帮助的人:782万
展开全部
错误多处:
1、switch(x)中x只能是整数。比如:int / char / unsigned int等类型
2、case 中的表达式必须是常量表达式 就是不能有变量
3、浮点比较的问题(那是一个另外完整话题,下面将不做修改,应采用精度比较)

你的程序用if-else if -else比较适合
#include <stdio.h>
#include <math.h>
void main()
{
double x,y;
printf("input x\n");
scanf("%lf",&x);
if(x>=0&&x<10) y=sin(x);
else if(x>=10&&x<20) y=cos(x);
else if(x>=20&&x<30) y=exp(x)-1;
else if(x>=30&&x<40) y=log(x+1);
else y=NULL;
}

/////////////////////////////////////////////////
如果你非用switch()就这样:
///////////////////////////////////////////////////////
#include <stdio.h>
#include <math.h>
void main()
{
double x,y;
int caseX;
printf("input x\n");
scanf("%lf",&x);
if(x>=0&&x<10) caseX=1;
else if(x>=10&&x<20) caseX=2;
else if(x>=20&&x<30) caseX=3;
else if(x>=30&&x<40) caseX=4;
else caseX=5;

switch(caseX)
{
case 1:y=sin(x);break;
case 2:y=cos(x);break;
case 3:y=exp(x)-1;break;
case 4:y=log(x+1);break;
default:y=NULL;break;//其余值无定义
}
}
追问
1、switch(x/10)x为double不行吗?
2、原题是x为其余值时y无定义,这样写对吗?y没说赋值给0啊,default:y=NULL;break;//其余值无定义
追答
1、switch(x/10)x为double不行吗?
(int)(x/10) 这样就行!否则可能编译通不过(或者警告),因为x/10的结果还是double的。 case中必须是常量表达式
2、原题是x为其余值时y无定义,这样写对吗
那就输出无定义,
default: printf("x>40或x<0无定义");
而不是让它为0。要不别人一看还以为其它情况为0呢
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b79519e
2011-04-05 · TA获得超过3400个赞
知道大有可为答主
回答量:1417
采纳率:100%
帮助的人:1449万
展开全部
改成这样的就好了:
#include <stdio.h>
#include <math.h>
void main()
{
double y;
int x;
printf("input x\n");
scanf("%d",&x);
switch(x/10)
{
case 0:y=sin(x);printf("%lf\n",y);break;
case 1:y=cos(x);printf("%lf\n",y);break;
case 2:y=exp(x)-1;printf("%lf\n",y);break;
case 3:y=log(x+1);printf("%lf\n",y);break;
default :y=0;printf("%lf\n",y);break;//其余值无定义
}
}

case x>=0&&x<10 是不合语法的,case 后面必须是一个整型的数如:0 1 23 ....
不能像if()一样,写关系表达式.....
但是switch(x>=0&&x<10)是合法的,如果x在0到10之间的话,条件为真,其值为1,那么就执行case 1后面的语句,如果不在0和10之间,那么条件为假,值为0,执行case 0后面的语句,如果没有就执行default 后面的语句

switch(x) 就是x为几,就执行case 几,如x为3,就执行case 3后面的语句...,遇到break;跳出switch
switch(x/10) x 为整型,x在10和20之间的话,x/10=1,那么就执行case 1后面的语句...
追问
1、switch(x/10)x为double不行吗?
2、原题是x为其余值时y无定义,这样写对吗?y没说赋值给0啊,default:y=NULL;break;//其余值无定义
追答
1、switch(x/10)x为double不行吗?
不行,如果x为double,那么x/10也为double,case 后的数字只能为整型,如0 1 2 3
2、原题是x为其余值时y无定义,这样写对吗?y没说赋值给0啊,default:y=NULL;break;//其余值无定义
default:y=NULL;break;我认为这个并不是错误,但是我的系统执行y=NULL时会报错,所以我把它改成了y=0,如果你的系统能够顺利执行的话,可以不改..
原题是x为其余值时y无定义,我认为这样写比较好:default:break;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
stevenlcj123
2011-04-05
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
学到东西了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式