介绍
二次方程是形如 ax²+bx+c=0 的方程,其中 a、b 和 c 是常数。在这个实验中,我们将学习如何编写一个程序来求解二次方程的根。
为了求解二次方程,我们将使用以下公式:
x = (-b ± sqrt(b² - 4ac)) / 2a
注意:你需要自己创建文件
~/project/main.c来练习编程,并学习如何使用 gcc 编译和运行它。
cd ~/project
## 创建 main.c
touch main.c
## 编译 main.c
gcc main.c -o main
## 运行 main
./main
获取输入系数
我们将从用户那里获取二次方程的系数,例如 a、b 和 c。这些系数将用于计算二次方程的根。
float a, b, c, determinant, r1, r2, real, imag;
printf("\nEnter coefficients a, b and c: ");
scanf("%f%f%f", &a, &b, &c);
计算判别式
我们将使用以下公式计算二次方程的判别式值:
determinant = b*b - 4*a*c;
determinant = b*b - 4*a*c;
检查根的性质
我们将根据步骤 2 中计算的判别式值检查二次方程根的性质。如果判别式大于 0,则根为实数且不相等。如果判别式等于 0,则根为实数且相等。如果判别式小于 0,则根为复数且为虚数。
if(determinant > 0) // 两个根都是实数
{
r1 = (-b + sqrt(determinant))/2*a; // 括号很重要
r2 = (-b - sqrt(determinant))/2*a;
printf("\n\n\nRoots are: %.2f and %.2f ", r1, r2);
}
else if(determinant == 0) // 两个根都是实数且相等
{
r1 = r2 = -b/(2*a); // 括号很重要
printf("\n\n\nRoots are: %.2f and %.2f ", r1, r2);
}
/*
Determinant < 0 - 两个根都是虚数,形式为 real + i*imaginary
*/
else
{
real = -b/(2*a);
imag = sqrt(-determinant)/(2*a);
printf("\n\n\nRoots are %.2f + i%.2f and %.2f - i%.2f ", real, imag, real, imag);
}
输出根
最后,我们将根据步骤 3 中计算的根的性质输出二次方程的根。
编写完整代码
#include<stdio.h>
#include<math.h> // 需要使用 sqrt() 函数
int main()
{
float a, b, c, determinant, r1, r2, real, imag;
printf("\nEnter coefficients a, b and c: ");
scanf("%f%f%f", &a, &b, &c);
determinant = b*b - 4*a*c;
if(determinant > 0) // 两个根都是实数
{
r1 = (-b + sqrt(determinant))/2*a; // 括号很重要
r2 = (-b - sqrt(determinant))/2*a;
printf("\n\n\nRoots are: %.2f and %.2f ", r1, r2);
}
else if(determinant == 0) // 两个根都是实数且相等
{
r1 = r2 = -b/(2*a); // 括号很重要
printf("\n\n\nRoots are: %.2f and %.2f ", r1, r2);
}
/*
Determinant < 0 - 两个根都是虚数,形式为 real + i*imaginary
*/
else
{
real = -b/(2*a);
imag = sqrt(-determinant)/(2*a);
printf("\n\n\nRoots are %.2f + i%.2f and %.2f - i%.2f ", real, imag, real, imag);
}
printf("\n\n\n\n\t\t\tCoding is Fun !\n\n\n");
return 0;
}
总结
在这个实验中,我们学习了如何编写一个 C 程序来求解二次方程的根。我们从用户那里获取了二次方程的系数,并根据判别式的值确定了根的性质,从而计算出根。最后,我们根据根的性质输出了二次方程的根。



