程式設計小練~一元二次方程求解問題
阿新 • • 發佈:2019-01-05
如何考慮一元二次方程求解問題:
求解思想:
- 首先考慮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; }