C程式設計案例(求 ax^2+bx+c=0 的解)
阿新 • • 發佈:2018-12-05
問題:求方程: 的解
思路:
- 化方程為一般式:
- 分類討論根的情況(a、b、c)
程式碼實現
#include <stdio.h>
#include <math.h>
int main(){
float a,b,c;
printf("Pleaser enter a、b、c:");
scanf("%f %f %f",&a,&b,& c);
float x1,x2,x,real,image;
if(a==0){
if(b==0){
if(c==0){//a=0,b=0,c=0;
printf("方程的解為任意常數;\n");
}
else{//a=0,b=0,c!=0;
printf("方程無解;\n");
}
}
else{//a=0,b!=0;
x=-(c/b);
printf("原方程的的解為:x=%8.4f\n",x);
}
}
else{//a!=0
float disc=b*b-4*a*c;
if(fabs(disc)<1e-6){//a!=0;b^2-4ac=0;
x= -(b/(2*a));
printf("原方程的的解為:x=%8.4f\n",x);
}else if(disc>1e-6){//a!=0;b^2-4ac>0;
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("原方程的的解為:x1=%8.4f ; x2=%8.4f \n",x1,x2);
}else{//a!=0;b^2-4ac>0;
real=-b/(2*a); //實部
image=sqrt(-disc)/(2*a); //虛部
printf("原方程的的解為:x1=%8.4f+%8.4fi ; x2=%8.4f+%8.4fi \n",real,image,real,image);
}
}
}
程式說明:
由於disc(即 )是實數,而實數在計算和儲存是很會有一些微小的誤差,因此不能直接進行如下判斷:“if(disc==0)”
解決辦法:判別disc的絕對值(即:fabs(disc))是否小於一個很小的值(例如: ,計算機語言為 1e-6 或 1E-6),如果小於此數,就認為disc等於0;
參考文章:
https://blog.csdn.net/neusoft06/article/details/78771492
https://blog.csdn.net/Yangjiankang_0929/article/details/44627349