1. 程式人生 > >程式設計小練~一元二次方程求解問題

程式設計小練~一元二次方程求解問題

如何考慮一元二次方程求解問題:

求解思想:

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