你没判断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;
}
看下这篇博客,也许你就懂了,链接:求一元二次方程的根