题目描述 解一元二次方程ax2+bx+c=0的解。保证有解 输入 a,b,c的值。 输出 两个根X1和X2,其中X1>=X2。 结果保留两位小数。 样例输入 Copy 1 5 -2 样例输出 Copy 0.37 -5.37 提示 结果保留两位小数,输出结果后加回车符。
时间: 2025-01-04 18:39:24 浏览: 5
要解一元二次方程 \( ax^2 + bx + c = 0 \),我们可以使用求根公式。对于任何实系数的二次方程,其解可以通过以下公式计算:
\[ X_1, X_2 = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} \]
这个公式给出了两个可能的解,一个是正号(+),另一个是负号(-)。如果判别式 \( b^2 - 4ac \) 是非负的(即大于等于零),那么这两个解都是实际存在的。
为了确保输出的结果是两个实数并且满足 \( X_1 \geq X_2 \),你需要先计算判别式,然后根据其符号选择正确的根。若判别式为正,那么就是两个不同的实根;若判别式为零,则有两个相同的实根。若判别式为负,说明方程没有实数根,但你可以选择返回复数解,不过通常情况下题目要求的是实数解。
以下是一个简单的C程序,用于计算并输出这两个解:
```c
#include <stdio.h>
#include <math.h>
void solveQuadratic(double a, double b, double c) {
double discriminant = b * b - 4 * a * c;
if (discriminant >= 0) {
// 实数解
double x1 = (-b + sqrt(discriminant)) / (2 * a);
double x2 = (-b - sqrt(discriminant)) / (2 * a);
// 检查x1是否大于或等于x2
if (x1 >= x2) {
printf("%.2lf %.2lf\n", x1, x2);
} else {
double temp = x1;
x1 = x2;
x2 = temp; // 交换两个解
printf("%.2lf %.2lf\n", x1, x2);
}
} else {
// 复数解(这里可以选择不显示,或者用复数表示)
printf("No real solutions.\n");
}
}
int main() {
double a, b, c;
scanf("%lf %lf %lf", &a, &b, &c); // 输入a, b, c 的值
solveQuadratic(a, b, c); // 解方程并输出结果
return 0;
}
```
阅读全文