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

如何考虑一元二次方程求解问题:

求解思想:

  • 首先考虑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;
}

 

 

 

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值