我真不是红中 2022-11-25 22:12 采纳率: 0%
浏览 8

关于#c#的问题,如何解决?

学校的一道练习题(oj平台上的题,卡住我们整个22级)表面上挺简单的

求方程ax2+bx+c=0的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。
样例输入
4 1 1
1 2 1
样例输出
x1=-0.125+0.484i x2=-0.125-0.484i
x1=x2=-1

我试过



```c
#include <stdio.h>
#include <math.h>
void fun2(float dis,float a,float b)
{
    float x1=(-b+sqrt(dis))/(2*a);
    float x2=(-b-sqrt(dis))/(2*a);
    printf("x1=%.f x2=%.f",x1,x2);
}
void fun1(float dis,float a,float b)
{
    float x = (-b+sqrt(dis))/(2*a);
    printf("x1=x2=%.f",x);
}
void fun0(float dis,float a,float b)
{
    float r =-b/(2*a);
    float i =sqrt(-dis)/(2*a);
    printf("x1=%.3f+%.3fi x2=%.3f-%.3fi",r,i,r,i);
}
int main()
{
    float a,b,c,dis;
    
    scanf("%f %f %f",&a,&b,&c);
    dis=b*b-4*a*c;
    if(dis<0)
    {
        fun0(dis,a,b);
    }
    else if(dis==0)
    {
        fun1(dis,a,b);
    }
    else 
    {
        fun2(dis,a,b);
    }
    return 0;
}


感觉是为了输出复数,必须拿float/double搞,但是当b^2-4ac>0时,输出的数又不知道该咋搞
符合给的输出,但是就是不给过

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/453454583966121.png "#left")
  • 写回答

1条回答 默认 最新

  • 滴水不穿石 2022-11-26 20:04
    关注

    img

    img

    img

    
    
    #include<stdio.h>
    #include<complex.h>
    
    
    //>0
    void fun2(double dis,double a,double b)
    {
        double x1=(-b+sqrt(dis))/(2*a);
        double x2=(-b-sqrt(dis))/(2*a);
        printf("x1=%.2lf x2=%.2lf",x1,x2);
    }
    
    //=0
    void fun1(double dis,double a,double b)
    {
        double x = (-b+sqrt(dis))/(2*a);
        printf("x1=x2=%.lf",x);
    }
    
    //<0
    void fun0(float dis,float a,float b)
    {
       complex  double  x1=(-b+sqrt(-dis)* _Complex_I)/(2*a);
        complex  double x2=(-b-sqrt(-dis)* _Complex_I)/(2*a);
        
        printf("x1=%.3lf+%.3lfi x2=%.3lf%.3lfi",creal(x1),cimag(x1),creal(x2),cimag(x2));
    }
    int main()
    {
        double a,b,c,dis;
        scanf("%lf %lf %lf",&a,&b,&c);
        dis=b*b-4*a*c;
        if(dis<0)
        {
            fun0(dis,a,b);
        }
        else if(dis==0)
        {
            fun1(dis,a,b);
        }
        else 
        {
            fun2(dis,a,b);
        }
        return 0;
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 11月25日