3、编写一个C++风格的程序,解决f(x)=0的根
时间: 2024-11-03 17:21:54 浏览: 6
C语言程序设计-编写函数fun计算下列分段函数的值:x^2+x+6 x0且x≠-3 f(x)= x^2-5x+6
5星 · 资源好评率100%
在C++中,解决一元二次方程`f(x) = ax^2 + bx + c = 0`的根通常通过求解二次公式来实现,这是一个常见的数值计算问题。下面是一个简单的示例程序,它使用了`std::complex`库来处理复数根的情况:
```cpp
#include <iostream>
#include <cmath>
#include <complex>
// 定义函数f(x)
double f(double x, double a, double b, double c) {
return a * x * x + b * x + c;
}
// 求解二次方程的主函数
std::pair<double, double> findRoots(double a, double b, double c) {
// 计算判别式
double discriminant = b * b - 4 * a * c;
// 实部的两个根
if (discriminant > 0) {
double root1 = (-b + std::sqrt(discriminant)) / (2 * a);
double root2 = (-b - std::sqrt(discriminant)) / (2 * a);
return {root1, root2};
} else if (discriminant == 0) {
double root = -b / (2 * a);
return {root, root}; // 重复根
} else { // 复数根
double realPart = -b / (2 * a);
double imaginaryPart = std::sqrt(-discriminant) / (2 * a);
std::complex<double> complexRoot(realPart, imaginaryPart);
return {complexRoot.real(), complexRoot.imag() / std::abs(complexRoot.imag())};
}
}
int main() {
double a, b, c;
std::cout << "请输入a, b, c的值(例如:1 2 3): ";
std::cin >> a >> b >> c;
auto roots = findRoots(a, b, c);
if (roots.first != roots.second) {
std::cout << "实数根为:" << roots.first << " 和 " << roots.second << "\n";
} else {
std::cout << "唯一实数根为:" << roots.first << "\n";
}
if (std::isfinite(roots.second.imag())) {
std::cout << "复数根为:" << roots.first << " ± i" << roots.second.imag() << "\n";
} else {
std::cout << "无实数解,有复数解.\n";
}
return 0;
}
```
在这个程序中,用户会被提示输入二次方程的系数,然后函数`findRoots`会计算并返回其根。注意这个程序假设用户输入的是实数系数,如果需要处理复数输入,可以修改`main`函数中的读取部分。
阅读全文