C语言求一元二次方程的根(附带源码和解析)
在数学中,一元二次方程是代数方程中的一种重要形式,它是一个只包含一个未知数,且未知数的最高次幂为 2 的多项式等式。一般形式可以表示为:
ax² + bx + c = 0
其中 x 是未知数,a、b 和 c 是实数系数,并且 a ≠ 0。在C语言中,我们可以编写程序来求解这种方程的根。
求解一元二次方程的根,我们通常使用判别式和求根公式。判别式 Δ = b² - 4ac 可以帮助我们确定方程根的性质:
- 如果 Δ > 0,方程有两个不同的实根;
- 如果 Δ = 0,方程有两个相等的实根;
-
如果 Δ < 0,方程没有实根,只有复数根。
下面是一个用C语言编写的程序,可以计算一元二次方程的根:
#include <stdio.h> #include <math.h> int main() { double a, b, c, discriminant, root1, root2, realPart, imagPart; printf("请输入二次项系数 a: "); scanf("%lf", &a); printf("请输入一次项系数 b: "); scanf("%lf", &b); printf("请输入常数项 c: "); scanf("%lf", &c); discriminant = b*b - 4*a*c; if (discriminant > 0) { root1 = (-b + sqrt(discriminant)) / (2*a); root2 = (-b - sqrt(discriminant)) / (2*a); printf("方程有两个不同的实根:\n"); printf("x1 = %.2f 和 x2 = %.2f\n", root1, root2); } else if (discriminant == 0) { root1 = root2 = -b / (2*a); printf("方程有两个相等的实根:\n"); printf("x1 = x2 = %.2f\n", root1); } else { realPart = -b / (2*a); imagPart = sqrt(-discriminant) / (2*a); printf("方程有两个复数根:\n"); printf("x1 = %.2f + %.2fi 和 x2 = %.2f - %.2fi\n", realPart, imagPart, realPart, imagPart); } return 0; }
这个程序首先要求用户输入方程的系数 a、b 和 c,然后计算判别式 discriminant 的值。根据判别式的值,程序会进入不同的分支来计算和输出根。
如果判别式大于零,程序使用求根公式 (-b ± √(b² - 4ac)) / (2a) 计算两个不同的实根。如果判别式等于零,程序计算出一个双重根。如果判别式小于零,程序计算复数根的实部和虚部。
让我们来看一些具体的例子,以便更好地理解这个程序的运行过程:
例 1:对于方程 x² - 5x + 6 = 0
请输入二次项系数 a: 1 请输入一次项系数 b: -5 请输入常数项 c: 6 方程有两个不同的实根: x1 = 3.00 和 x2 = 2.00
例 2:对于方程 x² - 4x + 4 = 0
请输入二次项系数 a: 1 请输入一次项系数 b: -4 请输入常数项 c: 4 方程有两个相等的实根: x1 = x2 = 2.00
例 3:对于方程 x² + x + 1 = 0
请输入二次项系数 a: 1 请输入一次项系数 b: 1 请输入常数项 c: 1 方程有两个复数根: x1 = -0.50 + 0.87i 和 x2 = -0.50 - 0.87i
在编写这样的程序时,我们需要注意一些细节。例如,使用 double 类型来存储浮点数,以确保计算的精度。同时,我们使用了 math.h 库中的 sqrt() 函数来计算平方根。在处理用户输入时,使用 scanf() 函数时要格外小心,确保使用正确的格式说明符(%lf 用于 double 类型)。
这个C语言程序展示了如何将数学概念转化为计算机程序,它不仅能帮助我们快速求解一元二次方程,还能加深我们对方程性质的理解。