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

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

一元二次方程是代数学中的基本概念,它是一种只包含一个未知数,且未知数的最高次幂为 2 的方程。在数学表达式中,一元二次方程的一般形式为:

ax² + bx + c = 0

其中 a、b、c 是实数常数,且 a ≠ 0,x 是未知数。


在C语言中,我们可以编写一个程序来解一元二次方程。这个程序将接受用户输入的系数 a、b 和 c,然后计算并输出方程的解。解一元二次方程的关键在于使用判别式 Δ = b² - 4ac 来确定方程的根的性质和数量。
 

让我们来看一个完整的C语言程序,它能够解一元二次方程:

#include <stdio.h>
#include <math.h>

int main() {
    double a, b, c;
    double discriminant, root1, root2;

    printf("请输入一元二次方程 ax² + bx + c = 0 的系数:\n");
    printf("a = ");
    scanf("%lf", &a);
    printf("b = ");
    scanf("%lf", &b);
    printf("c = ");
    scanf("%lf", &c);

    if (a == 0) {
        printf("a 不能为 0,这不是一个一元二次方程。\n");
        return 1;
    }

    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\n", root1);
        printf("x2 = %.2f\n", root2);
    } else if (discriminant == 0) {
        root1 = -b / (2 * a);
        printf("方程有一个二重实根:\n");
        printf("x = %.2f\n", root1);
    } else {
        double realPart = -b / (2 * a);
        double imaginaryPart = sqrt(-discriminant) / (2 * a);
        printf("方程有两个共轭复根:\n");
        printf("x1 = %.2f + %.2fi\n", realPart, imaginaryPart);
        printf("x2 = %.2f - %.2fi\n", realPart, imaginaryPart);
    }

    return 0;
}

这个程序首先包含了必要的头文件:stdio.h 用于输入输出操作,math.h 用于数学函数如 sqrt(平方根)。在 main 函数中,我们声明了变量来存储系数 a、b、c,以及判别式和根。
 

程序通过 printf 和 scanf 函数与用户交互,获取方程的系数。值得注意的是,我们使用 %lf 格式说明符来读取 double 类型的输入。在获取输入后,程序首先检查 a 是否为 0,因为 a = 0 时方程就不再是二次方程了。
 

接下来,程序计算判别式 Δ = b² - 4ac。根据判别式的值,我们可以确定方程根的性质:


程序使用 if-else 语句根据判别式的不同情况输出相应的结果。对于复根,我们使用 i 来表示虚数单位。


让我们来看一个具体的例子,假设我们要解方程 x² - 5x + 6 = 0:

请输入一元二次方程 ax² + bx + c = 0 的系数:
a = 1
b = -5
c = 6

输出结果:

方程有两个不同的实根:
x1 = 3.00
x2 = 2.00

这个程序展示了如何使用C语言来解决一个常见的数学问题,它不仅涵盖了基本的输入输出操作,还包括了条件语句、数学函数的使用,以及如何处理不同的情况。通过这个例子,我们可以看到C语言在数学计算中的强大功能,以及如何将数学概念转化为计算机程序。
 

在实际应用中,这样的程序可以进一步扩展,例如处理更复杂的方程,或者作为更大的数学软件包的一部分。

相关文章