)求方程ax2+ bx+c=0的根,用3个函数分别求当:bx2-4ac 大于0、等于0和小于0的根并输出结果。从主函数输入 a,b,c 的值。用C语言
时间: 2024-12-16 22:32:22 浏览: 4
在C语言中,你可以通过递归或者循环结构来实现求解一元二次方程 \( ax^2 + bx + c = 0 \) 根的不同情况。这里是一个基本的示例,我们将创建三个函数分别处理三种情况:判别式大于0(有两个实数根)、等于0(有一个重根)和小于0(无实数根,但有复数根,此处仅考虑实数根)。由于C语言并不直接支持复数运算,我们仅关注实数根。
```c
#include <stdio.h>
#include <math.h>
// 函数1:判别式大于0时,求两个实数根
double quadraticRealRoots(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 {
// 对于delta=0的情况,返回一个重复的根
return -b / (2 * a);
}
}
// 函数2:判别式等于0时,求一个实数根
double quadraticSingleRoot(double a, double b, double c) {
double delta = b * b - 4 * a * c;
if (delta == 0)
return -b / (2 * a);
else
return "Error: Delta should be zero for single root!";
}
// 函数3:判别式小于0时,提示无实数根
void quadraticNoRealRoots(double a, double b, double c) {
if (b * b - 4 * a * c < 0)
printf("There are no real roots for this equation.\n");
}
int main() {
double a, b, c;
// 从用户输入获取系数
printf("Enter the coefficients a, b, and c: ");
scanf("%lf %lf %lf", &a, &b, &c);
// 判断并打印根
double result;
switch (true) {
case b * b - 4 * a * c > 0:
result = quadraticRealRoots(a, b, c);
printf("When delta > 0, roots are %.2f and %.2f.\n", result[0], result[1]);
break;
case b * b - 4 * a * c == 0:
result = quadraticSingleRoot(a, b, c);
printf("When delta = 0, root is %.2f.\n", result);
break;
default:
quadraticNoRealRoots(a, b, c);
break;
}
return 0;
}
```
阅读全文