求一元二次方程的根问题

img

img


现在的情况是十个样例,输入输出对了八个,还有两个不知道哪里错了,帮忙看一下

img


这是改进之后的,但还是有错误答案

你没判断x本身是正数还是负数啊
如果x是正数
那么两个虚根x+i,x-i,没问题
如果x本身是负数,比如是-2吧,那你输出的东西变成了-2+-2i,-2--2i
要么事先判断x的正负,要么虚部取绝对值

double x1计算之前,你要先判断a是否为0.如果a为0,就出现除零错误啦
同样,你还要判断b * b - 4 * a * c是否小于0,如果下于0,那么开根号也会报错的
你在double x1和x2计算之后才判断b * b - 4 * a * c的值范围,那已经晚了啊

复数范围内的求根:

#include <stdio.h>
#include <math.h>

int main(){
    float a , b , c, delta, real, imag, x1, x2;
    printf("请依次输入三个系数: ");
    scanf("%f,%f,%f", &a, &b, &c);
    if(a != 0){
        delta = 1.0 * b * b - 4.0 * a * c;
        if(delta >= 0){
            x1 = (-b + sqrt(delta)) / (2.0 * a);
            x2 = (-b - sqrt(delta)) / (2.0 * a);
            printf("Tow real roots:%.2f and %.2f", x1, x2);
        }
        else
        {
            real = -b / (2.0*a);
            imag = sqrt(-delta) / (2.0 * a);
            printf("Tow complex roos:%.2f+%.2fj and %.2f-%.2fj",real,imag,real,imag);
        }
    }
    else
    {
        printf("a can not be 0!");
    }
    return 0;
}
看下这篇博客,也许你就懂了,链接:求一元二次方程的根