题解 | 计算一元二次方程
计算一元二次方程
https://www.nowcoder.com/practice/7da524bb452441b2af7e64545c38dc26
#include <stdio.h> #include <math.h> int main() { double a, b, c; // 处理多组输入 while (scanf("%lf %lf %lf", &a, &b, &c) != EOF) { if (a == 0) { printf("Not quadratic equation\n"); continue; } // 计算判别式 double delta = b * b - 4 * a * c; // 使用容差值比较浮点数 const double EPSILON = 1e-8; if (fabs(delta) < EPSILON) { // 判别式近似为0 double root = -b / (2 * a); // 确保输出+0.00而非-0.00 if (fabs(root) < EPSILON) { root = 0.0; } printf("x1=x2=%.2lf\n", root); } else if (delta > EPSILON) { // 判别式大于0 double sqrt_delta = sqrt(delta); double x1 = (-b + sqrt_delta) / (2 * a); double x2 = (-b - sqrt_delta) / (2 * a); // 确保x1 <= x2 if (x1 > x2) { double temp = x1; x1 = x2; x2 = temp; } // 确保输出+0.00而非-0.00 if (fabs(x1) < EPSILON) x1 = 0.0; if (fabs(x2) < EPSILON) x2 = 0.0; printf("x1=%.2lf;x2=%.2lf\n", x1, x2); } else { // 判别式小于0 double real_part = -b / (2 * a); double imaginary_part = sqrt(-delta) / (2 * fabs(a)); // 确保实部为+0.00而非-0.00 if (fabs(real_part) < EPSILON) { real_part = 0.0; } printf("x1=%.2lf-%.2lfi;x2=%.2lf+%.2lfi\n", real_part, imaginary_part, real_part, imaginary_part); } } return 0; }