求方程ax2+ bx+c=0的根,用3个函数分别求当:bx2-4ac 大于0、等于0和小于0的根并输出结果。从主函数输入 a,b,c 的值。用C语言
时间: 2024-12-16 12:31:59 浏览: 6
在C语言中,你可以通过编写三个不同的函数来计算一元二次方程`ax^2 + bx + c = 0`的根,根据判别式`D = b^2 - 4ac`的正负性来分别处理:
1. 当`D > 0`(即判别式大于0),有两个实数解:
```c
double quadraticRootsPositive(double a, double b, double c) {
double sqrtD = sqrt(b * b - 4 * a * c);
return (-b + sqrtD) / (2 * a), (-b - sqrtD) / (2 * a);
}
```
2. 当`D == 0`(即判别式等于0),有一个实数解(重根):
```c
double quadraticRootsEqualZero(double a, double b, double c) {
return -b / (2 * a);
}
```
3. 当`D < 0`(即判别式小于0),方程无实数解,有复数解:
```c
// 由于C标准库没有直接支持复数运算,这里可以考虑使用第三方库如Complex.h
// 或者忽略复数解,仅返回空或者默认表示无法找到实数解
void quadraticRootsNegative(double a, double b, double c) {
printf("方程无实数解。\n");
}
```
主函数部分,首先从用户那里获取a, b, c的值,然后根据判别式的值调用相应的函数:
```c
#include <stdio.h>
#include <math.h>
// ... (以上三个函数定义)
int main() {
double a, b, c;
printf("请输入系数a, b, c: ");
scanf("%lf %lf %lf", &a, &b, &c);
if (b * b - 4 * a * c > 0) {
double roots[2];
roots[0] = quadraticRootsPositive(a, b, c);
roots[1] = quadraticRootsPositive(a, b, c); // 可能需要修改这里,避免重复
printf("当D > 0时,根为: %.2f 和 %.2f\n", roots[0], roots[1]);
} else if (b * b - 4 * a * c == 0) {
double root = quadraticRootsEqualZero(a, b, c);
printf("当D == 0时,根为: %.2f\n", root);
} else {
quadraticRootsNegative(a, b, c);
}
return 0;
}
```
阅读全文