#include <stdio.h>
#include <math.h>
main()
{
float b,a,c,disc,x1,x2,p,q;
scanf("%f%f%f",&a,&b,&c);
disc =b*b-4*a*c;
if(fabs(a)<=1e-6)
printf("不是二次方程");
else
if(disc>1e-6)
{
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("%8.4fand%8.4f",x1,x2);
}
else
if(fabs(disc)<=1e-6)
printf("有两个相等的实根%8.4f",-b/(2*a));
else
{p=-b/(2*a);
q=sqrt(-disc)/(2*a);
printf("%8.4f+%8.4fi/n",p,q);
printf("%8.4f-%8.4fi/n",p,q);
}
}
1。disc是=赋值,不是=,搞这个东西搞了两个小时
2.有就是fabs是不是小于一个很小的数(例如1e-6) 1e的1不要忘记
3.数在计算和存储时会有一些微小的误差,因此不能直接判断
因为这样可能会出现本来是零的值不等于0
4。学东西不能模棱两可,就一个fabs搞得我又用了半小时还是问别人问来的