首页 > 编程笔记 > C语言笔记

C语言求一元二次方程的根(附带源码和解析)

在数学中,一元二次方程是代数方程中的一种重要形式,它是一个只包含一个未知数,且未知数的最高次幂为 2 的多项式等式。一般形式可以表示为:

ax² + bx + c = 0

其中 x 是未知数,a、b 和 c 是实数系数,并且 a ≠ 0。在C语言中,我们可以编写程序来求解这种方程的根。
 

求解一元二次方程的根,我们通常使用判别式和求根公式。判别式 Δ = b² - 4ac 可以帮助我们确定方程根的性质:

下面是一个用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语言程序展示了如何将数学概念转化为计算机程序,它不仅能帮助我们快速求解一元二次方程,还能加深我们对方程性质的理解。

相关文章