求 方 程ax²+bx+c=0 的 根 , 用 3 个 函 数 分 别 求 当b²-4ac 大 于 0 、 等 于 0 和 小 于0时的根,并输出结果,结果中须包含序号-班级-姓名。从主函数输入a=1,b=2,c=1 的 值。
时间: 2024-10-25 19:06:48 浏览: 15
要编写三个函数分别处理方程 `ax² + bx + c = 0` 的三种情况(判别式大于0、等于0、小于0),我们可以使用C++标准库中的数学函数和条件语句。首先,我们需要定义一个结构体来存储学生信息(序号、班级和姓名)。然后,我们将创建三个函数:
1. `double quadraticRootsPositive(double a, double b, double c)`: 计算两个不同的实数根,当判别式大于0时。
2. `double quadraticRootsZero(double a, double b, double c)`: 如果判别式等于0,计算唯一的实数根(重复根)。
3. `void printStudentResult(Student student, double discriminant)`: 输出包含学生信息和判别式的字符串。
以下是一个示例程序的实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
// 定义学生信息结构体
struct Student {
int id;
string class_name;
string name;
};
// 求解二次方程根(判别式大于0)
double quadraticRootsPositive(double a, double b, double c) {
double delta = b * b - 4 * a * c;
if (delta > 0) {
double root1 = (-b + sqrt(delta)) / (2 * a);
double root2 = (-b - sqrt(delta)) / (2 * a);
return {root1, root2};
}
else {
throw runtime_error("Invalid case for positive discriminant");
}
}
// 求解二次方程根(判别式等于0)
double quadraticRootsZero(double a, double b, double c) {
double root = -b / (2 * a);
return root;
}
// 输出学生信息和判别式
void printStudentResult(Student student, double discriminant) {
cout << "序号-" << student.id << ", 班级-" << student.class_name << ", 姓名-" << student.name << "\n";
if (discriminant == 0)
cout << "判别式:" << discriminant << ", 根:" << quadraticRootsZero(a, b, c) << endl;
else
cout << "判别式:" << discriminant << ", 根:" << quadraticRootsPositive(a, b, c).begin() << " and "
<< quadraticRootsPositive(a, b, c).end() << endl;
}
int main() {
// 输入学生信息
Student student = {1, "一班", "小明"};
// 主函数中的数值
double a = 1, b = 2, c = 1;
try {
double discriminant = b * b - 4 * a * c;
switch (discriminant) {
case 0:
printStudentResult(student, discriminant);
break;
case double(-1): // 注意这里我们不直接比较为零,因为double可能会有微小的精度误差
printStudentResult(student, discriminant);
break;
default:
auto roots = quadraticRootsPositive(a, b, c);
printStudentResult(student, discriminant);
break;
}
} catch (const runtime_error& e) {
cerr << "错误: " << e.what() << endl;
}
return 0;
}
```
在这个例子中,`main`函数首先初始化了一个学生信息,然后根据判别式的值调用相应的函数并打印结果。请注意,为了区分判别式等于0和判别式近似为0的情况,我们检查`discriminant`是否等于负1(对于浮点数,这是几乎不可能的,但可以用来表示0)。如果判别式大于0,则返回两个根;如果判别式等于0,则只有一个根。
阅读全文