算法设计,求一元二次方程ax² + bx + c = 0 (a ≠ 0)的根。分别考虑Δ = b² - 4ac大于0、等于0和小于0三种情况。
时间: 2024-10-27 12:07:51 浏览: 35
算法设计用于找到一元二次方程 \( ax^2 + bx + c = 0 \) 的根,其中 \( a \neq 0 \),可以通过使用著名的二次公式来完成。根据判别式 \( \Delta = b^2 - 4ac \) 的值,我们有以下三种情况:
1. **判别式大于0** (\( \Delta > 0 \)**):**
- 这意味着方程有两个不相等的实数根,计算如下:
\[ x_1 = \frac{-b + \sqrt{\Delta}}{2a}, \quad x_2 = \frac{-b - \sqrt{\Delta}}{2a} \]
2. **判别式等于0** (\( \Delta = 0 \)**):**
- 方程有一个重根(重复的实数根),因为 \( \sqrt{\Delta} = 0 \):
\[ x = -\frac{b}{2a} \]
3. **判别式小于0** (\( \Delta < 0 \)**):**
- 方程有两个复数根(即共轭复数),因为负平方根会产生虚部:
\[ x_1 = \frac{-b + i\sqrt{-\Delta}}{2a}, \quad x_2 = \frac{-b - i\sqrt{-\Delta}}{2a} \]
其中 \( i \) 是虚数单位。
下面是用 C 语言编写的简单示例代码来计算这三种情况下的解:
```c
#include <stdio.h>
#include <math.h>
void quadratic(double a, double b, double c) {
double discriminant = b * b - 4 * a * c;
if (discriminant > 0) {
double root1 = (-b + sqrt(discriminant)) / (2 * a);
double root2 = (-b - sqrt(discriminant)) / (2 * a);
printf("两个不相等的实根: %.2f 和 %.2f\n", root1, root2);
} else if (discriminant == 0) {
double root = -b / (2 * a);
printf("唯一的实根: %.2f\n", root);
} else {
double realPart = -b / (2 * a);
double imaginaryPart = sqrt(-discriminant) / (2 * a);
printf("一对共轭复根: %.2f + %.2fi 和 %.2f - %.2fi\n",
realPart, imaginaryPart, realPart, imaginaryPart);
}
}
int main() {
double a, b, c;
printf("请输入系数 a, b, c: ");
scanf("%lf %lf %lf", &a, &b, &c);
quadratic(a, b, c);
return 0;
}
```
阅读全文