0) { // 兩實根
double x1 = (-b + sqrt(disc)) / (2*a);
double x2 = (-b - sqrt(disc)) / (2*a);
printf("x1 = %f\nx2 = %f\n", x1, x2);
} else { // 複根
double re = -b/(2*a);
double im = sqrt(-disc)/(2*a);
printf("x1 = %f + %fi\nx2 = %f - %fi\n", re, im, re, im);
}
return 0;
}
| 條件 | 數學意義 | 輸出 |
|---|---|---|
a ≈ 0 | 非二次方程 | 線性求解或提示 |
Δ ≈ 0 | 重根 | 單一實根 |
Δ > 0 | 兩相異實根 | 兩實數 |
Δ < 0 | 共軛複根 | 實部 ± 虛部 i |
EPS 比較浮點數,避免精度誤差導致分支錯誤。sqrt 需 math.h 且編譯加 -lm。%f + %fi 符合數學慣例。一元二次方程求解是「條件分支 + 數學庫 + 浮點比較」的綜合練習。掌握判別式邏輯、EPS 比較、複數輸出,可擴展至高次多項式數值求根(牛頓法、伴隨矩陣法)。