如何考虑一元二次方程求解问题:
求解思想:
- 首先考虑a是否为0,若为0,则直接判断该方程不为一元二次方程。
- 若不为0,则判断b*b-4ac和0的关系,若为0,判断该方程只有一个解并直接输出解为-b/2a
- 若大于0,判断该方程有两个解并输出解为(-b+sqrt(b*b-4ac)/2a,(-b-sqrt(b*b-4ac))/2a
- 若小于0,判断该方程无解。
注意:浮点型和零之间的比较
由于浮点数在内存中的存储方式,使得有些浮点数在内存中无法精确的存储,这样就会造成精度的缺失,就有可能导致计算的不准确性,因此不能够使用==去直接判断两个浮点数。这样就必须自己定义一个精度,保证误差在精度的范围内就可以了 .
程序如下:
#define EXP 0.00000000001//设置一个能接受的精度,保证误差在精度范围内就可以了
#include<math.h>
#include<stdio.h>
int main()
{
double a=0.0,b=0.0,c=0.0;
scanf("%lf%lf%lf",&a,&b,&c);
//意味着a是无限接近于0的数字,约等于0
if(a>-EXP&&a<EXP)
printf("\n该方程不是一元二次方程\n");
else
{
double disc=b*b-4*a*c;
printf("\n该方程是一元二次方程");
if(disc>-EXP&&disc<EXP)
{
printf("且只有一个唯一解为:%lf\n",(-b)/2*a);
}
else if(disc>=EXP)
printf("且两个解分别为:%lf %lf\n",(-b+sqrt(disc)/2*a),(-b-sqrt(disc)/2*a));
else
printf("但无解\n");
}
return 0;
}