应该是这样吧。
#include<stdio.h>
#include<math.h>
int main()
{
float a, b, c, tmp, x1, x2, real, imag;
scanf("%f %f %f", &a, &b, &c);
if(fabs(a) <= 0.000001) //判断a的绝对值是否为零,如果fabs(a)小于0.000001,就认为a等于零。
printf("不是二次方程\n"); //因为实数在计算和存储时会有一些微小的误差所以不能直接用if(a == 0)判断。
else
{
tmp = b * b - 4 * a * c;
if(fabs(tmp) <= 0.000001)
printf("有两个相等的根:%8.4f\n", -b / (2* a));
else
if(tmp > 0.000001)
{
x1 = (-b + sqrt(tmp)) / (2 * a);
x2 = (-b - sqrt(tmp)) / (2 * a);
printf("有两个补相等的根:%8.4f and %8.4f\n", x1, x2);
}
else //有两个复数根。
{
real = -b / (2 *a);//实部。
imag = sqrt(-tmp) / (2 * a);//虚部。
printf("%8.4f + %8.4fi\n", real, imag);
printf("%8.4f - %8.4fi\n", real, imag);
}
}
return 0;
}