switch 语句
用switch语句编写程序:y=x-sin(x)x<-3;
y=pow(2,x)+x-3<=x<=3
y=sqrt(x*x+2*x+3)x>3
问题出在哪里呢?
#include <stdio.h>
#include <math.h>
int main()
{
double x,y;
int c;
printf("请输入实数x:\n");
scanf("%lf",&x);
if(x<-3)
c=1;
else if(x>4)
c=3;
else
c=(int)x;
switch(c)
{
case 1: y=x-sin(x);break;
case 2: y=pow(2,x)+x;break;
case 3: y=sqrt(x*x+2*x+3);break;
}
printf("y=%.2f\n",y);
return 0;
}
不需要强转
c=(int)x; 改成 c=x; else 不应该 c=2 吗? 本帖最后由 Jack2002 于 2021-9-26 20:47 编辑
典型的逻辑不清晰,提问贴把疑问写清楚!
#include <stdio.h>
#include <math.h>
int main()
{
double x,y;
int c;
printf("请输入实数x:\n");
//scanf("%lf",&x);
x = 3.0;
if(x<-3)
{
c=1;
}
else if(x>4)// 当x等于4.0时,会导致没有进入任何计算分支,加个default分支你就看到了
{
c=3;
}
else
{
//当x小于4.0或大于等于3.0时,c会被赋值为3,即不满足第一个if,也不满足else if,但是还是会进入case 3的原因
c=(int)x;
}
switch(c)
{
case 1:
{
y=x-sin(x);
printf("case1 y=%.2f\n",y);
break;
}
case 2:
{
y=pow(2,x)+x;
printf("case2 y=%.2f\n",y);
break;
}
case 3:
{
y=sqrt(x*x+2*x+3);
printf("case3 y=%.2f\n",y);
break;
}
default:
printf("输入错误");
break;
}
//printf("y=%.2f\n",y);
return 0;
} Jack2002 发表于 2021-9-26 20:40
典型的逻辑不清晰,提问贴把疑问写清楚!
#include
#include
非常感谢!可是,输入-1时,提示错误?不能得出正确的y值呢!{:1_893:} 兄弟我岁数大,脑袋不太够用,属于自觉C语言。感谢大神们的指点! 18131431963 发表于 2021-9-26 21:01
非常感谢!可是,输入-1时,提示错误?不能得出正确的y值呢!
-1 小于 -3吗? 大于 4吗? 强转成 int 也不等于 2,不提示输入错误就是见了鬼了! Jack2002 发表于 2021-9-26 23:32
-1 小于 -3吗? 大于 4吗? 强转成 int 也不等于 2,不提示输入错误就是见了鬼了!
{:1_923:}真的不明白!!! 感觉c直接赋值为2吧, #include <stdio.h>
#include <math.h>
int main()
{
double x,y;
int c;
printf("请输入实数x:\n");
scanf("%lf",&x);
if(x<-3)
{
c=1;
}
else if(x<=3&&x>=-3)
c=2;
else if(x>3)
{
c=3;
}
else
{
c=(int)x;
}
switch(c)
{
case 1:
{
y=x-sin(x);
break;
}
case 2:
{
y=pow(2,x)+x;
break;
}
case 3:
{
y=sqrt(x*x+2*x+3);
break;
}
default:
printf("输入错误");
break;
}
printf("y=%.2f\n",y);
return 0;
}
页:
[1]
2