• »
  • C/C++
  • 程式語言
  • » 用C語言解一元二次方程式,判別式的運用 C語言學習筆記【3】
    上一篇:

    用C語言解一元二次方程式,判別式的運用 C語言學習筆記【3】

    前幾天看到一題利用C語言來解一元二次方程式,於是就開始研究會運用到的定義函數和運算函數,今天在這裡寫下學習筆記。這程式需要引入數學運算的標頭檔,這樣在判別式部分,才能開根號,不過我還不知道要怎麼輸出帶根式的解,所以這程式只能輸出整數解的部分,如果解是有根式的,輸出的答案會有誤。

    寫這個解一元二次方程式的程式,首先要先認識「sqrt()」這個用來開根號的函數,在括號內輸入要開根號的式子或值,便可開根號,而要使用這個函數,要先引入<math.h>這個標頭檔,如此才能順利編譯執行。話不多說,就讓我們來看看這程式的寫法吧。

    用C語言解一元二次方程式,判別式的運用

    第1步 讓我們直接用程式來說明,開啟編譯程式後貼上以下程式碼,接下來就來解釋每段的含意。本文教學末,提供高中生程式解題系統的題目AC範本。

    1. 首先開頭引入三個標頭檔,上方有提過。
    2. 接下來定義7個整數變數,你也可以定義浮點數(float、double),本文主要解整數方程式。
    3. 然後利用while迴圈,當使用者輸入a b c三個常數時,讓程式不斷執行;while迴圈的外面代表使用者未輸入任何常數所顯示的錯誤訊息。
    4. 接下來先利用所謂的公式解中的「判別式(Discriminant)」(以下用D表示),來判斷根的三種情形,當D<0代表此方程式無實數解;當D=0代表此方程式的兩個解一樣(二重根);最後當這個D>0,代表此方程式有兩個相異實根。
    5. 當D>0,則我們利用開根號的函數(sprt),來把D開根號,接著把開完根號的值令為spD,那麼就可以使用公式姐來運算兩個根。
      當D>0,但若常數向為零時,則兩根依舊是「0」,故視為相等實根(重根),所以我們在輸出答案時,要判斷兩解是否相等,因此在下一個判斷式,來輸出不同的答案。
    6. 當D=0時,代表這兩根相同,那們我們只要算一次就好了,算完之後輸出答案。
      為了避免-0的出現,我們用判斷式來作區別。
    7. 當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;
    }

    用C語言解一元二次方程式,判別式的運用 C語言學習筆記【3】-01

    第2步 接著編譯執行,就可以執行囉。

    用C語言解一元二次方程式,判別式的運用 C語言學習筆記【3】-02

    練習題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;
    }
    Advertisement
    Follow US
    About Post
    Date: 2013.04.03 Tags: , , , , ,
    Discussion - 1 Comment

    Leave a Reply