第1个回答 2023-03-09
一元二次方程求根公式为:
x = (-b ± sqrt(b^2 - 4ac)) / (2a)
如果 b 为负数,可以在表达式中加上括号,将其转换为正数再进行计算,即:
x = (-b ± sqrt(b * b - 4 * a * c)) / (2 * a)
这样就可以避免在计算平方根时出现负数的情况。
以下是一个简单的 C 语言程序,使用上述公式计算一元二次方程的根:
```c
#include <stdio.h>
#include <math.h>
int main() {
float a, b, c, discriminant, root1, root2;
printf("Enter coefficients a, b and c: ");
scanf("%f%f%f", &a, &b, &c);
discriminant = b * b - 4 * a * c;
if (discriminant > 0) {
root1 = (-b + sqrt(discriminant)) / (2 * a);
root2 = (-b - sqrt(discriminant)) / (2 * a);
printf("Roots are real and different.\n");
printf("Root1 = %.2f\nRoot2 = %.2f\n", root1, root2);
} else if (discriminant == 0) {
root1 = root2 = -b / (2 * a);
printf("Roots are real and same.\n");
printf("Root1 = Root2 = %.2f\n", root1);
} else {
printf("Roots are complex and different.\n");
printf("Root1 = %.2f + %.2fi\n", -b / (2 * a), sqrt(-discriminant) / (2 * a));
printf("Root2 = %.2f - %.2fi\n", -b / (2 * a), sqrt(-discriminant) / (2 * a));
}
return 0;
}
```
在上述代码中,我们首先读取用户输入的系数 a、b 和 c,然后计算判别式 `discriminant` 的值。如果判别式为正数,则输出实数根的结果;如果判别式为零,则输出相等实数根的结果;如果判别式为负数,则输出复数根的结果。需要注意的是,在计算复数根时,需要使用虚数单位 i 表示其中的虚部,并将其输出到控制台。
例如,如果用户输入系数 a = 2,b = -7 和 c = 5,则程序将输出以下结果:
```
Roots are real and different.
Root1 = 2.50
Root2 = 1.00
```
需要注意的是,在实际应用中还需要考虑更多的边界情况和错误处理。例如,需要检查输入参数是否合法,以及在计算过程中是否出现除零等错误。