#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,d,e,f,m,n;
int N;
scanf("%d",&N);
while(N--)
{
scanf("%lf %lf %lf",&a,&b,&c);
d=b*b-4*a*c;
if(d=0)
{e=(-b+sqrt(d))/(2*a);
printf("%.3lf",e);
}
if(d>0)
{e=(-b+sqrt(d))/(2*a);
f=(-b+sqrt(d))/(2*a);
printf("%.3lf %.3lf",e,f);
}
if(d<0)
{
m=(-b)/(2*a);
n=(sqrt(-d))/(2*a);
printf("%.3lf+%.3lf*i %.3lf-%.3lf*i",m,n,m,n);
}
}
return 0;
}
1、代码格式不规范,最严重的就是变量名要有意义!不要觉得能用就行。
2、d>0的情况
e=(-b+sqrt(d))/(2*a); f=(-b+sqrt(d))/(2*a); //改为: f=(-b-sqrt(d))/(2*a);
3、一元二次方程的复数解
若判别式△=b²-4ac<0,则方程无实根,虚数解为
x=(-b± i√(4ac-b²))/(2a)
4、建议:浮点数是不能精确确定它的值的,应该有一个容差范围。