C语言求方程 ax²+bx+c=0的根,用3个函数分别求当b²-4ac大于0、等于0和小于0时的根并输出结果。从主函数输入a、b、c的值。
时间: 2023-06-13 11:03:13 浏览: 230
好的,我来为您编写这个程序。
首先,我们需要三个函数,分别用于求解当$b^2-4ac>0$、$b^2-4ac=0$和$b^2-4ac<0$时的根。这三个函数可以分别返回两个实数型的根,或者一个实数型的根和一个虚数型的根。
下面是完整的程序代码:
```c
#include <stdio.h>
#include <math.h>
void roots_greater_than_zero(float a, float b, float c, float *root1, float *root2);
void roots_equal_to_zero(float a, float b, float c, float *root1, float *root2);
void roots_less_than_zero(float a, float b, float c, float *real_part, float *imaginary_part);
int main()
{
float a, b, c, root1, root2, real_part, imaginary_part;
printf("请输入 a, b, c 的值:\n");
scanf("%f%f%f", &a, &b, &c);
if (b*b - 4*a*c > 0)
{
roots_greater_than_zero(a, b, c, &root1, &root2);
printf("方程的两个根为:%.2f, %.2f\n", root1, root2);
}
else if (b*b - 4*a*c == 0)
{
roots_equal_to_zero(a, b, c, &root1, &root2);
printf("方程的两个根为:%.2f, %.2f\n", root1, root2);
}
else
{
roots_less_than_zero(a, b, c, &real_part, &imaginary_part);
printf("方程的两个根为:%.2f + %.2fi, %.2f - %.2fi\n", real_part, imaginary_part, real_part, imaginary_part);
}
return 0;
}
void roots_greater_than_zero(float a, float b, float c, float *root1, float *root2)
{
*root1 = (-b + sqrt(b*b - 4*a*c)) / (2*a);
*root2 = (-b - sqrt(b*b - 4*a*c)) / (2*a);
}
void roots_equal_to_zero(float a, float b, float c, float *root1, float *root2)
{
*root1 = *root2 = -b / (2*a);
}
void roots_less_than_zero(float a, float b, float c, float *real_part, float *imaginary_part)
{
*real_part = -b / (2*a);
*imaginary_part = sqrt(fabs(b*b - 4*a*c)) / (2*a);
}
```
在这个程序中,我们使用了指针来传递函数的返回值,因为每个函数都需要返回两个实数型的根,或者一个实数型的根和一个虚数型的根。指针可以让我们在函数中修改外部变量的值,从而将计算结果传递回主函数。
对于$b^2-4ac>0$的情况,我们调用`roots_greater_than_zero`函数来计算两个实数型的根;对于$b^2-4ac=0$的情况,我们调用`roots_equal_to_zero`函数来计算两个相等的实数型的根;对于$b^2-4ac<0$的情况,我们调用`roots_less_than_zero`函数来计算一个实数型的根和一个虚数型的根。
最后,我们将计算结果输出到控制台上。
阅读全文