用c语言求方程az+br+c=0的根,用3个函数分别求当:b-4ac大于0、等于0和小于0时的根并输出结果。从主函数输入a,b,c的值。
时间: 2023-11-29 13:09:08 浏览: 38
以下是用C语言实现求解一元二次方程的代码,包含了三个函数分别用于求解方程的根,根据$b^2-4ac$的值进行分类讨论:
```c
#include <stdio.h>
#include <math.h>
void roots(double a, double b, double c);
void roots_greater_than_zero(double a, double b, double c);
void roots_equal_to_zero(double a, double b, double c);
void roots_less_than_zero(double a, double b, double c);
int main() {
double a, b, c;
printf("Enter values of a, b and c: ");
scanf("%lf %lf %lf", &a, &b, &c);
roots(a, b, c);
return 0;
}
void roots(double a, double b, double c) {
double d = b * b - 4 * a * c;
if (d > 0) {
roots_greater_than_zero(a, b, c);
} else if (d == 0) {
roots_equal_to_zero(a, b, c);
} else {
roots_less_than_zero(a, b, c);
}
}
void roots_greater_than_zero(double a, double b, double c) {
double root1 = (-b + sqrt(b * b - 4 * a * c)) / (2 * a);
double root2 = (-b - sqrt(b * b - 4 * a * c)) / (2 * a);
printf("The roots are %lf and %lf\n", root1, root2);
}
void roots_equal_to_zero(double a, double b, double c) {
double root = -b / (2 * a);
printf("The root is %lf\n", root);
}
void roots_less_than_zero(double a, double b, double c) {
double real_part = -b / (2 * a);
double imaginary_part = sqrt(-1 * (b * b - 4 * a * c)) / (2 * a);
printf("The roots are %lf + %lfi and %lf - %lfi\n", real_part, imaginary_part, real_part, imaginary_part);
}
```
这份代码可以根据输入的$a,b,c$值分类讨论,从而调用不同的函数输出方程的根。
当$b^2-4ac>0$时,方程有两个不相等的实数根,可以调用`roots_greater_than_zero`函数进行计算。
当$b^2-4ac=0$时,方程有一个实数根,可以调用`roots_equal_to_zero`函数进行计算。
当$b^2-4ac<0$时,方程有两个共轭复数根,可以调用`roots_less_than_zero`函数进行计算。注意,在C语言中,虚数单位为`i`,可以使用`sqrt`函数计算平方根。