求一元二次方程的根C++结果保留两位小数
时间: 2024-10-22 14:20:19 浏览: 114
要计算一元二次方程 \( ax^2 + bx + c = 0 \) 的根,并且结果保留两位小数,你可以使用C++中的`<cmath>`库中的`sqrt()`函数以及控制精度的`std::fixed`和`std::setprecision`。以下是一个简单的示例:
```cpp
#include <iostream>
#include <cmath>
#include <iomanip>
// 定义一元二次方程的系数
double a, b, c;
// 计算判别式
double discriminant() {
return b * b - 4 * a * c;
}
// 计算两个解(可能有复数)
std::pair<double, double> solveQuadratic() {
double root1, root2;
if (discriminant() > 0) { // 实数解
root1 = (-b + std::sqrt(discriminant())) / (2 * a);
root2 = (-b - std::sqrt(discriminant())) / (2 * a);
} else if (discriminant() == 0) { // 双重实数解
root1 = root2 = -b / (2 * a);
} else { // 复数解
double realPart = -b / (2 * a);
double imaginaryPart = std::sqrt(-discriminant()) / (2 * a);
root1 = complex(realPart, imaginaryPart);
root2 = complex(realPart, -imaginaryPart); // 注意复数表示形式
}
// 设置输出精度为两位小数
std::ios_base::floatfield fmode = std::ios_base::floatfield::fixed;
std::ios_base::_precision dp = 2;
std::cout << std::boolalpha; // 显示布尔值
return std::make_pair(std::setprecision(dp)(root1), std::setprecision(dp)(root2));
}
int main() {
// 输入方程的系数
std::cout << "Enter the coefficients a, b, and c: ";
std::cin >> a >> b >> c;
auto roots = solveQuadratic();
std::cout << "Roots are: " << roots.first << " and " << roots.second << std::endl;
return 0;
}
```
在这个程序中,首先获取用户输入的一元二次方程的系数,然后根据判别式的符号确定解的形式并计算。最后,使用`std::setprecision()`设置输出精度,确保结果只显示两位小数。
阅读全文