1. 程式人生 > >C程式設計案例(求 ax^2+bx+c=0 的解)

C程式設計案例(求 ax^2+bx+c=0 的解)

問題:求方程: a x 2 + b x + c =
0 ax^2+bx+c=0
的解

在這裡插入圖片描述

思路:

  1. 化方程為一般式:
    在這裡插入圖片描述
  2. 分類討論根的情況(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(即 b 2 4 a c b^2-4ac )是實數,而實數在計算和儲存是很會有一些微小的誤差,因此不能直接進行如下判斷:“if(disc==0)”
解決辦法:判別disc的絕對值(即:fabs(disc))是否小於一個很小的值(例如: 1 0 6 10^-6 ,計算機語言為 1e-6 或 1E-6),如果小於此數,就認為disc等於0;

參考文章:

https://blog.csdn.net/neusoft06/article/details/78771492
https://blog.csdn.net/Yangjiankang_0929/article/details/44627349