求方程 ax²+bx+c=0的根,用3个函数分别求当:b2-4ac大于0、等于0和小于0时的根并输出结果。从主函数输入a,b,c的值。
时间: 2024-12-29 18:33:49 浏览: 14
为了求解二次方程 \(ax^2 + bx + c = 0\) 的根,我们通常会使用公式法,根据判别式的值来决定根的情况。以下是三种情况下的函数设计:
1. 当判别式 \(D = b^2 - 4ac\) 大于0时(即一元二次方程有两个不同的实数根):
```cpp
#include <iostream>
#include <cmath>
double quadraticRoots(double a, double b, double c) {
if (b * b - 4 * a * c > 0) {
double root1 = (-b + std::sqrt(b * b - 4 * a * c)) / (2 * a);
double root2 = (-b - std::sqrt(b * b - 4 * a * c)) / (2 * a);
return {root1, root2};
} else {
// 这里可以返回一个空容器或者抛出异常表示无实数根
return {};
}
}
int main() {
double a, b, c;
std::cout << "请输入a, b, c的值:" << std::endl;
std::cin >> a >> b >> c;
auto roots = quadraticRoots(a, b, c);
if (!roots.empty()) {
std::cout << "两个不同的实数根是: " << roots[0] << ", " << roots[1] << std::endl;
} else {
std::cout << "方程无实数根." << std::endl;
}
return 0;
}
```
2. 当判别式等于0时(即一元二次方程有一个重根):
```cpp
// 对于判别式等于0的情况,根相等
if (b * b - 4 * a * c == 0) {
double root = -b / (2 * a);
std::cout << "唯一的实数根是: " << root << std::endl;
} else {
// 如果这里不处理,则认为没有满足条件的根
}
```
3. 当判别式小于0时(即一元二次方程无实数根,有复数根):
```cpp
// 对于判别式小于0,方程无实数根,可以简单输出提示
if (b * b - 4 * a * c < 0) {
std::cout << "方程无实数根,有复数根." << std::endl;
}
```
阅读全文