编程小练~一元二次方程求解问题

如何考虑一元二次方程求解问题:
求解思想:首先考虑a是否为0,若为0,则直接判断该方程不为一元二次方程。若不为0,则判断b^2-4ac和0的关系,若为0,判断该方程只有一个解并直接输出解为-b/2a,若大于0,判断该方程有两个解并输出解为(-b+sqrt(b^2-4ac)/2a,(-b-sqrt(b^2-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);
        if(a>-EXP&&a<EXP)//意味着a是无限接近于0的数字,约等于0
        {
              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;
}


猜你喜欢

转载自blog.csdn.net/ds19980228/article/details/79772321