用C語言解一元二次方程式,判別式的運用 C語言學習筆記【3】
前幾天看到一題利用C語言來解一元二次方程式,於是就開始研究會運用到的定義函數和運算函數,今天在這裡寫下學習筆記。這程式需要引入數學運算的標頭檔,這樣在判別式部分,才能開根號,不過我還不知道要怎麼輸出帶根式的解,所以這程式只能輸出整數解的部分,如果解是有根式的,輸出的答案會有誤。
寫這個解一元二次方程式的程式,首先要先認識「sqrt()」這個用來開根號的函數,在括號內輸入要開根號的式子或值,便可開根號,而要使用這個函數,要先引入<math.h>這個標頭檔,如此才能順利編譯執行。話不多說,就讓我們來看看這程式的寫法吧。
用C語言解一元二次方程式,判別式的運用
第1步 讓我們直接用程式來說明,開啟編譯程式後貼上以下程式碼,接下來就來解釋每段的含意。本文教學末,提供高中生程式解題系統的題目AC範本。
- 首先開頭引入三個標頭檔,上方有提過。
- ●接下來定義7個整數變數,你也可以定義浮點數(float、double),本文主要解整數方程式。
- ●然後利用while迴圈,當使用者輸入a b c三個常數時,讓程式不斷執行;while迴圈的外面代表使用者未輸入任何常數所顯示的錯誤訊息。
- ●接下來先利用所謂的公式解中的「判別式(Discriminant)」(以下用D表示),來判斷根的三種情形,當D<0代表此方程式無實數解;當D=0代表此方程式的兩個解一樣(二重根);最後當這個D>0,代表此方程式有兩個相異實根。
- ●當D>0,則我們利用開根號的函數(sprt),來把D開根號,接著把開完根號的值令為spD,那麼就可以使用公式姐來運算兩個根。
●當D>0,但若常數向為零時,則兩根依舊是「0」,故視為相等實根(重根),所以我們在輸出答案時,要判斷兩解是否相等,因此在下一個判斷式,來輸出不同的答案。- ●當D=0時,代表這兩根相同,那們我們只要算一次就好了,算完之後輸出答案。
●為了避免-0的出現,我們用判斷式來作區別。- ●當D不大於0,又不等於0,我們可以確定他必小於0,所以當D<0時,此方程式的解:無實根。
#include<stdio.h> #include<stdlib.h> #include<math.h> int main(void){ int a, b, c, D, spD, x1, x2; printf("請輸入一元二次方程式的三個係數,如 aX^2 + bX + c = 0\n以a b c表示\n"); while(scanf("%d %d %d", &a, &b ,&c)==3){ D=(b*b) - (4*a*c); if(D>0){ spD=sqrt(D); x1= (-b+spD)/(2*a); x2= (-b-spD)/(2*a); if (x1==x2){ printf("此一元二次方程式的解為兩相等實根(重根) X=%d\n", x1); } else { printf("此一元二次方程式的解為兩相異實根 X=%d或%d\n", x1, x2); } } else if(D==0){ x1= (-b)/(2*a); if(b==0){ printf("此一元二次方程式的解為兩相等實根 X=0"); } else{ printf("此一元二次方程式的解為兩相等實根(重根) X=%d\n", x1); } } else{ printf("此一元二次方程式無實數解\n"); } } printf("請輸入正確的三項係數"); system("PAUSE"); return 0; }
第2步 接著編譯執行,就可以執行囉。
練習題AC範本
#include<stdio.h> #include<stdlib.h> #include<math.h> int main(){ int a, b, c; double x1,x2; while(scanf("%d %d %d", &a, &b ,&c)!=EOF){ if((b*b-4*a*c)>0){ x1=(-b+sqrt(b*b-4*a*c))/(2*a); x2=(-b-sqrt(b*b-4*a*c))/(2*a); if (x1==x2){ printf("Two same roots x=0"); } else { printf("Two different roots x1=%.0lf , x2=%.0lf", x1, x2); } } else if((b*b-4*a*c)==0){ x1=-b/(2*a); if (b=0){ printf("Two same roots x=0"); } else { printf("Two same roots x=%.0lf",x1); } } else if((b*b-4*a*c)<0) { printf("No real root"); } } return 0; }
Leave a Reply