18131431963 发表于 2021-9-26 17:01

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;
               
}

limlibgiag 发表于 2021-9-26 18:03

不需要强转
c=(int)x; 改成 c=x;

qjyjjmh 发表于 2021-9-26 19:25

else 不应该 c=2 吗?

Jack2002 发表于 2021-9-26 20:40

本帖最后由 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;
}

18131431963 发表于 2021-9-26 21:01

Jack2002 发表于 2021-9-26 20:40
典型的逻辑不清晰,提问贴把疑问写清楚!
#include
#include


非常感谢!可是,输入-1时,提示错误?不能得出正确的y值呢!{:1_893:}

18131431963 发表于 2021-9-26 21:04

兄弟我岁数大,脑袋不太够用,属于自觉C语言。感谢大神们的指点!

Jack2002 发表于 2021-9-26 23:32

18131431963 发表于 2021-9-26 21:01
非常感谢!可是,输入-1时,提示错误?不能得出正确的y值呢!

-1 小于 -3吗? 大于 4吗? 强转成 int 也不等于 2,不提示输入错误就是见了鬼了!

18131431963 发表于 2021-9-27 12:39

Jack2002 发表于 2021-9-26 23:32
-1 小于 -3吗? 大于 4吗? 强转成 int 也不等于 2,不提示输入错误就是见了鬼了!

{:1_923:}真的不明白!!!

wanshiz 发表于 2021-9-28 08:35

感觉c直接赋值为2吧,

18131431963 发表于 2021-9-28 19:37

#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
查看完整版本: switch 语句