首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言求解一元二次方程 ax²+bx+c=0:判別式分支完整實作

     編輯:關於C語言

數學公式

判別式 Δ = b² - 4ac

  • Δ > 0:兩相異實根
  • Δ = 0:兩相等實根
  • Δ < 0:共軛複根

完整程式碼(含浮點比較容差)

#include 
#include 

#define EPS 1e-6

int main() {
    float a, b, c;
    scanf("%f%f%f", &a, &b, &c);

    float delta = b*b - 4*a*c;

    if (fabs(a) < EPS) {                 // 退化為一次方程
        float x = -c / b;
        printf("%f\n", x);
    } else if (fabs(delta) < EPS) {      // 重根
        float x = -b / (2*a);
        printf("%f\n", x);
    } else if (delta > 0) {              // 兩實根
        float x1 = (-b + sqrt(delta)) / (2*a);
        float x2 = (-b - sqrt(delta)) / (2*a);
        printf("%f\n%f\n", x1, x2);
    } else {                             // 複根
        float real = -b / (2*a);
        float imag = sqrt(-delta) / (2*a);
        printf("%f+%fi\n%f-%fi\n", real, imag, real, imag);
    }
    return 0;
}

關鍵細節

  1. fabs(a) < EPS 判斷 a≈0,避免除零並處理退化線性方程。
  2. 同理判斷 Δ≈0。
  3. 複數輸出格式 real±imagi。
  4. 若係數為整數,可改用 double 提高精度。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved