解一元二次方程(第九个用例为什么过不了)



```c


请编写程序,解一元一次方程 ax 
2
 +bx+c=0 。

一元二次方程的求根公式为:

题图.jpg

要求:

若 a=0,则为一元一次方程。
若 b

=0,则方程有唯一解,输出这个解;
若 b=0,c

=0,则方程无解,输出“无解”;
若 b=0,c=0,则方程有无穷多解,输出“无穷多解”。
若 a

=0,则为一元二次方程。
若 Δ>0,则方程有两个不等的实根,输出这两个根;
若 Δ=0,则方程有两个相等的实根,输出这两个根;
若 Δ<0,则方程有两个共轭的虚根,输出这两个根。
输入格式
a,b,c

输出格式
x 或 x 
1
​
 ,x 
2
​
 

注:所有实数均输出6位有效数字,且不输出末尾无意义的0和小数点。

输入样例1
0 4.5 -3.6
结尾无空行
输出样例1
x = 0.8
结尾无空行
输入样例2
0 2.8 0
结尾无空行
输出样例2
x = 0
结尾无空行
输入样例3
0 0 3.6
结尾无空行
输出样例3
无解
结尾无空行
输入样例4
0 0 0
结尾无空行
输出样例4
无穷多解
结尾无空行
输入样例5
-2 0.8 -0.06
结尾无空行
输出样例5
x1 = 0.1, x2 = 0.3
结尾无空行
输入样例6
-1 0.2 0
结尾无空行
输出样例6
x1 = 0, x2 = 0.2
结尾无空行
输入样例7
1 -0.4 0.04
结尾无空行
输出样例7
x1 = x2 = 0.2
结尾无空行
输入样例8
0.3 0 0
结尾无空行
输出样例8
x1 = x2 = 0
结尾无空行
输入样例9
-0.2 0.04 -0.01
结尾无空行
输出样例9
x1 = 0.1-0.2i, x2 = 0.1+0.2i
结尾无空行
输入样例10
3 0 0.27
结尾无空行
输出样例10
x1 = 0+0.3i, x2 = 0-0.3i
结尾无空行


```c
#include <stdio.h>
#include <math.h>
int main()
{
    double a,b,c,s,x1,x2,m,p,q;
    scanf("%lf %lf %lf",&a,&b,&c);
     s=b*b-4*a*c;
     m=(-c)/b;
     x1=(-b+sqrt(s))/(2*a);
     x2=(-b-sqrt(s))/(2*a);
     p=-b/(2*a);
     q=sqrt(fabs(s))/(2*a);
    if(a == 0)
    {
        if(b!=0) 
        {
            printf("x = %.6g",fabs(m));
        }
        if(b==0&&c!=0)
        {
            printf("无解");
        }
        if(b==0&&c==0)
        {
            printf("无穷多解");
        }
    }
   if(a!=0)
    {
        if(s>0.000001)
        {
            printf("x1 = %.6g, x2 = %.6g",fabs(p+q),fabs(p-q));
        }
         if(s<0.000001&&s>-0.000001)
         {
             printf("x1 = x2 = %.6g",fabs(p));
         }
        if(s<0)
        {
            printf("x1 = %.6g+%.6gi, ",fabs(p),q);
            printf("x2 = %.6g-%.6gi",fabs(p),q);
        }
    }
    return 0;
}

复数解要考虑q的正负值问题

#include <stdio.h>
#include <math.h>
int main()
{
    double a,b,c,s,x1,x2,m,p,q;
    scanf("%lf %lf %lf",&a,&b,&c);
     s=b*b-4*a*c;
     m=(-c)/b;
     x1=(-b+sqrt(s))/(2*a);
     x2=(-b-sqrt(s))/(2*a);
     p=-b/(2*a);
     q=sqrt(fabs(s))/(2*a);
    if(a == 0)
    {
        if(b!=0) 
        {
            printf("x = %.6g",fabs(m));
        }
        if(b==0&&c!=0)
        {
            printf("无解");
        }
        if(b==0&&c==0)
        {
            printf("无穷多解");
        }
    }
   if(a!=0)
    {
        if(s>0.000001)
        {
            printf("x1 = %.6g, x2 = %.6g",fabs(p+q),fabs(p-q));
        }
         if(s<0.000001&&s>-0.000001)
         {
             printf("x1 = x2 = %.6g",fabs(p));
         }
        if(s<0)
        {
            if(p == 0)
            {
                printf("x1 = x2 = %.6gi",q);
            }
            else if(q>0)
            {
                printf("x1 = %.6g-%.6gi, ",fabs(p),q);
                printf("x2 = %.6g+%.6gi",fabs(p),q);
            }
            else if(q< 0)
            {
                printf("x1 = %.6g-%.6gi, ",fabs(p),q*-1);
                printf("x2 = %.6g+%.6gi",fabs(p),q*-1);
            }
            else
            {
                printf("x1 = x2 = %.6g",fabs(p));
            }
           
        }
    }
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^