求方程a*x*x +bx+c=0的根,用3个函数分别求当:b*b-4ac大于0、等于0和小于0 时的根并输出结果。从主函数输入a,b,c的值。(用c语言编写 )
时间: 2024-11-05 22:26:38 浏览: 24
为了编写这个C程序,我们将定义三个函数:`quadraticRootsPositive`, `quadraticRootsEqual`, 和 `quadraticRootsNegative`,用于处理三种情况。首先,在`main`函数中获取用户输入的a、b、c值,并根据判别式调用相应的函数。下面是完整的C语言代码:
```c
#include <stdio.h>
#include <math.h>
// 函数声明
double quadraticRootsPositive(double a, double b, double c);
double quadraticRootsEqual(double a, double b, double c);
void printRoots(double r1, double r2);
int main() {
double a, b, c;
printf("请输入二次方程系数a, b, c:\n");
scanf("%lf %lf %lf", &a, &b, &c);
// 判别式的计算
double discriminant = b * b - 4 * a * c;
if (discriminant > 0) {
double r1 = quadraticRootsPositive(a, b, c);
double r2 = quadraticRootsPositive(a, b, c);
printRoots(r1, r2);
} else if (discriminant == 0) {
double root = quadraticRootsEqual(a, b, c);
printf("方程有唯一实根: %.2f\n", root);
} else { // discriminant < 0
printf("方程无实数根,有两个复数根.\n");
}
return 0;
}
// 当判别式大于0时,返回两个虚根
double quadraticRootsPositive(double a, double b, double c) {
double sqrtD = sqrt(discriminant);
return (-b + sqrtD) / (2 * a), (-b - sqrtD) / (2 * a);
}
// 当判别式等于0时,返回唯一的实根
double quadraticRootsEqual(double a, double b, double c) {
return -b / (2 * a);
}
// 打印根
void printRoots(double r1, double r2) {
printf("方程有两个实数根: %.2f 和 %.2f\n", r1, r2);
}
```
在这个程序中,`quadraticRootsPositive`函数计算并返回两个虚根,如果判别式是负数,则会打印提示说明方程无实数根。`quadraticRootsEqual`用于处理判别式为零的情况。
阅读全文