编写一个程序,利用三个不同的函数来计算一元二次方程ax^2 + bx + c = 0的根,分别针对判别式b^2 - 4ac大于0、等于0和小于0的情况。函数应接受用户输入a, b, c的值,并返回对应的解。请展示每个函数的实现和输出结果。用C语言
时间: 2024-12-16 18:32:24 浏览: 11
举例求一元二次方程ax+bx+c=的根。-c语言教程
在C语言中,我们可以编写三个函数`quadratic_solver_positive`, `quadratic_solver_zero`, 和 `quadratic_solver_negative` 来分别处理一元二次方程的三种情况:判别式大于0(有两个实数根)、等于0(有一个重复的实数根),以及小于0(无实数根)。以下是这三个函数的实现:
```c
#include <stdio.h>
#include <math.h>
// 函数用于计算判别式的值并返回两个实数根(如果存在)
void quadratic_solver_positive(double a, double b, double c) {
double discriminant = b * b - 4 * a * c;
double root1 = (-b + sqrt(discriminant)) / (2 * a);
double root2 = (-b - sqrt(discriminant)) / (2 * a);
printf("当a=%lf, b=%lf, c=%lf时,\n", a, b, c);
if (discriminant > 0) {
printf("方程有两个实数根:root1=%lf, root2=%lf\n", root1, root2);
} else {
printf("方程只有一个实数根:root1=%lf (重复)\n", root1);
}
}
// 函数处理判别式等于0的情况
void quadratic_solver_zero(double a, double b, double c) {
double discriminant = b * b - 4 * a * c;
if (discriminant == 0) {
double root = -b / (2 * a);
printf("当a=%lf, b=%lf, c=%lf时,\n", a, b, c);
printf("方程有一个实数根:root=%lf\n", root);
} else {
printf("这不是一个标准的一元二次方程(判别式不为0)\n");
}
}
// 函数处理判别式小于0的情况
void quadratic_solver_negative(double a, double b, double c) {
double discriminant = b * b - 4 * a * c;
if (discriminant < 0) {
printf("当a=%lf, b=%lf, c=%lf时,\n", a, b, c);
printf("方程没有实数根(复数根)\n");
} else {
printf("这不是一个标准的一元二次方程(判别式非负)\n");
}
}
int main() {
double a, b, c;
printf("请输入a, b, c的值: ");
scanf("%lf %lf %lf", &a, &b, &c);
// 分别调用函数
quadratic_solver_positive(a, b, c);
quadratic_solver_zero(a, b, c);
quadratic_solver_negative(a, b, c);
return 0;
}
```
当你运行这个程序并输入相应的系数时,它会根据判别式的值显示方程的根或者相关的描述。注意,`sqrt()`函数需要包含头文件 `<math.h>`。
阅读全文