注意:题解最后答案是正确答案,最新更新是7.15日

题目更新,感谢有小伙伴提醒,以下为原答案:

注意一个点,4 0 0 测试用例,最后得到-0的原因是t==0的时候直接使用了-b,所以得到-0,正确写法应该还是规规矩矩的让他加0。-0+0 = 0

#include<math.h>
int main(){
    float a = 0;
    float b = 0;
    float c = 0;
    while(scanf("%f %f %f",&a, &b, &c)!=EOF){
        if(a == 0){
            printf("Not quadratic equation\n");
        }else{
            float t = b*b - 4*a*c;
            if(t==0){
                printf("x1=x2=%.2f\n",(-b+sqrt(t))/2.0/a);
            }else if(t > 0){
                printf("x1=%.2f;x2=%.2f\n",(-b-sqrt(t))/2.0/a,(-b+sqrt(t))/2.0/a);
            }else{
                printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n",-b/2/a,sqrt(-t)/2/a,-b/2/a,sqrt(-t)/2/a);
            }
        }
    }
    
    
    
    return 0;
}

2.12更新,题目增加了测试用例,以前的有一个过不了

暴力添加判断,讨论+0和-0情况 alt

#include<stdio.h>
#include<math.h>
int main(){
    float a = 0;
    float b = 0;
    float c = 0;
    while(scanf("%f %f %f",&a, &b, &c)!= EOF ){
        if(a == 0){
            printf("Not quadratic equation\n");
        }else{
            float t = b*b - 4*a*c;            
            if(t==0){
                float mp = -b + sqrt(t);
                if(mp == 0){
                    printf("x1=x2=%.2f\n",mp);
                }else{
                    printf("x1=x2=%.2f\n",(-b+sqrt(t))/2.0/a);
                }
            }else if(t > 0){
                printf("x1=%.2f;x2=%.2f\n",(-b-sqrt(t))/2.0/a,(-b+sqrt(t))/2.0/a);
            }else{
                printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n",-b/2/a,sqrt(-t)/2/a,-b/2/a,sqrt(-t)/2/a);
            }
        }
    }
    return 0;
}

7.15更新 题目添加测试用例-1 5 -10,感谢小伙伴提醒

增加部分代码 alt

#include<stdio.h>
#include<math.h>
int main(){
    float a = 0;
    float b = 0;
    float c = 0;
    while(scanf("%f %f %f",&a, &b, &c)!= EOF ){
        if(a == 0){
            printf("Not quadratic equation\n");
        }else{
            float t = b*b - 4*a*c;            
            if(t==0){
                //两个实根相等
                float mp = -b + sqrt(t);
                if(mp == 0){
                    printf("x1=x2=%.2f\n",mp);
                }else{
                    printf("x1=x2=%.2f\n",(-b+sqrt(t))/2.0/a);
                }
            }else if(t > 0){
                //两个实根不等
                printf("x1=%.2f;x2=%.2f\n",(-b-sqrt(t))/2.0/a,(-b+sqrt(t))/2.0/a);
            }else{
                //虚根
                float xu = sqrt(-t)/2.0/a;
                if(xu < 0) {
                    //如果是负数,取反作为绝对值,abs取绝对值会丢失精度
                    xu = -xu;
                }
                printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n",-b/2/a,xu,-b/2/a,xu);
            }
        }
    }
    return 0;
}