关于#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 
#include 
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")

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