判別式 Δ = 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; }
fabs(a) < EPS 判斷 a≈0,避免除零並處理退化線性方程。Δ≈0。real±imagi。double 提高精度。