利用给的二次函数的(ax^2+bx+c=0)a,b,c求出二次方程的解。
首先我们要了解到C语言对于小于精度的数会判断为0,例如对float而言如果小于10的负6次方(但是大于0),那么就会判定为是+0(可以判断出符号),例如10^-7在float上就认为是0,那么为了防止出现出现0i的情况,因此在第二个if中对0的定义是绝对值小于10^-6。
#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c,x1,x2,d;
printf("请输入二次函数(ax^2+bx+c=0)的a,b,c:\n");
scanf("%f %f %f",&a,&b,&c);
d=b*b-4*a*c;
if(d>0)
{
x1=(b*b-sqrt(b))/(2*a);
x2=(b*b+sqrt(b))/(2*a);
printf("x1=%4.3f x2=%4.3f",x1,x2);
}
else if(abs(d)<1e-6)
{
x1=-b/(2*a);
printf("x1=%4.3f x2=%4.3f",x1,x1);
}
else
{
d=-d;
x1=-b/(2*a);
x2=sqrt(b);
printf("x1=%4.3f+%4.3fi x2=%4.3f-%4.3fi",x1,x2,x1,x2);
}
}
运行结果:
请输入二次函数(ax^2+bx+c=0)的a,b,c:
1 5 10
x1=-2.500+2.236i x2=-2.500-2.236i