C++求一元二次方程的根,有两种分情况,有两个不等的实根和有两个相等的实根
时间: 2024-09-18 20:05:57 浏览: 40
在C++中,求解一元二次方程的一般形式是ax^2 + bx + c = 0时,确实需要考虑两种情况:当判别式Δ = b^2 - 4ac > 0时,方程有两个不相等的实根;当Δ = 0时,方程有两个相等的实根。
**两种情况的处理**:
1. **两个不等的实根**:
当判别式大于零时,我们可以使用上面提到的求根公式:
```cpp
double x1 = (-b + std::sqrt(b*b - 4*a*c)) / (2*a);
double x2 = (-b - std::sqrt(b*b - 4*a*c)) / (2*a);
```
这里`std::sqrt`用于计算平方根,确保结果是正数。
2. **两个相等的实根**:
判别式等于零时,方程只有一个根,即x1=x2:
```cpp
double x = -b / (2*a);
```
**完整的函数实现**:
```cpp
#include <iostream>
#include <cmath>
void quadraticEquation(double a, double b, double c, double& x1, double& x2) {
double discriminant = b * b - 4 * a * c;
if (discriminant > 0) {
x1 = (-b + std::sqrt(discriminant)) / (2 * a);
x2 = (-b - std::sqrt(discriminant)) / (2 * a);
} else if (discriminant == 0) {
x1 = x2 = -b / (2 * a);
} else {
// 处理复数根,这通常涉及到复数运算,但这里仅作为理论说明
std::complex<double> sqrtDiscriminant(std::sqrt(-discriminant), 0);
x1 = complex<double>(-b, 2 * a * sqrtDiscriminant).real() / (2 * a);
// 复数根通常是成对出现,但实际应用中可能只取一个
x2 = x1;
}
}
int main() {
double a, b, c;
std::cout << "请输入a, b, c的值:" << std::endl;
std::cin >> a >> b >> c;
double x1, x2;
quadraticEquation(a, b, c, x1, x2);
if (std::abs(x1 - x2) < 1e-9) {
std::cout << "方程有唯一实根 x = " << x1 << std::endl;
} else {
std::cout << "方程有两个实根 x1 = " << x1 << ", x2 = " << x2 << std::endl;
}
return 0;
}
```
阅读全文