c++解一元二次方程的根带复数
时间: 2024-10-05 17:02:11 浏览: 32
在 C++ 中,解决一元二次方程通常涉及计算判别式(Δ = b² - 4ac),然后根据其值来确定根的情况。如果判别式大于零(Δ > 0),有两个实数根;等于零(Δ = 0)有一个重根;小于零(Δ < 0)则有两个共轭复数根。
以下是一个简单的示例,展示了如何使用公式法(也称为韦达定理)来求解一元二次方程 ax² + bx + c = 0 的根:
```cpp
#include <iostream>
#include <cmath>
// 定义求解一元二次方程的函数
std::pair<std::complex<double>, std::complex<double>> solveQuadratic(double a, double b, double c) {
double delta = b * b - 4 * a * c; // 判别式
if (delta > 0) { // 实数双根
double root1 = (- sqrt(delta)) / (2 * a);
return std::make_pair(root1, root2);
} else if (delta == 0) { // 重根
double root = -b / (2 * a);
return std::make_pair(root, root);
} else { // 复共轭根
double realPart = -b / (2 * a);
double imaginaryPart = sqrt(-delta) / (2 * a);
std::complex<double> root1(realPart, imaginaryPart);
std::complex<double> root2(realPart, -imaginaryPart); // 取相反的虚部保持共轭
return std::make_pair(root1, root2);
}
}
int main() {
double a, b, c;
std::cout << "Enter coefficients a, b, and c: ";
std::cin >> a >> b >> c;
std::pair<std::complex<double>, std::complex<double>> roots = solveQuadratic(a, b, c);
std::cout << "The roots are: (" << roots.first.real() << ", " << roots.first.imag() << ") and (" << roots.second.real() << ", " << roots.second.imag() << ")";
return 0;
}
```
在这个程序中,用户输入三个系数 `a`, `b`, 和 `c`,然后 `solveQuadratic` 函数会返回两个根,可能是实数或一对共轭复数。请注意,在实际应用中,你需要处理用户输入并确保数学运算的精度。
阅读全文