求方程的根
阿新 • • 發佈:2021-01-21
#include<stdio.h>
#include<math.h>
int main(){
float a,b,c,disc,realpart,imagepart,x1,x2;
printf("請輸入方程");
scanf("%f %f %f",&a,&b,&c);
if(fabs(a)<=1e-6){
printf("非二次方程");
}else
disc=b*b-4*a*c;
if(fabs(disc)<=1e-6) {
printf("方程有兩個相同的實根:%8.4f\n",-b/(2*a));
}else if(disc>0){
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("方程有兩個不一樣的實根:%8.4f %8.4f\n",x1,x2);
}else{
realpart=-b/(2*a);
imagepart=sqrt(-disc)/(2*a);
printf("方程為復根: %8.4f + %8.4fi\n",realpart,imagepart) ;
printf("方程為復根: %8.4f - %8.4fi\n",realpart,imagepart);
}
}
此處為了避免由計算引起的誤差,判斷一個數是否為0的時候:先取這個數的絕對值,然後判斷其絕對值是否小於1乘以10的-6次方,取絕對值fabs(),使用前注意匯入<math.dio>。
此外要注意1乘以10的-6次方的表示方式:1e-6。
最後,在寫計算的表示式的時候一定要注意把括號加上,以避免產生計算上的先後次序導致的誤差。