求解二次方程的根

CCBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

二次方程是形如 ax²+bx+c=0 的方程,其中 abc 是常数。在这个实验中,我们将学习如何编写一个程序来求解二次方程的根。

为了求解二次方程,我们将使用以下公式:

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

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("`C`")) -.-> c/BasicsGroup(["`Basics`"]) c(("`C`")) -.-> c/ControlFlowGroup(["`Control Flow`"]) c(("`C`")) -.-> c/FunctionsGroup(["`Functions`"]) c(("`C`")) -.-> c/UserInteractionGroup(["`User Interaction`"]) c/BasicsGroup -.-> c/variables("`Variables`") c/BasicsGroup -.-> c/operators("`Operators`") c/ControlFlowGroup -.-> c/if_else("`If...Else`") c/FunctionsGroup -.-> c/math_functions("`Math Functions`") c/UserInteractionGroup -.-> c/user_input("`User Input`") c/UserInteractionGroup -.-> c/output("`Output`") subgraph Lab Skills c/variables -.-> lab-123254{{"`求解二次方程的根`"}} c/operators -.-> lab-123254{{"`求解二次方程的根`"}} c/if_else -.-> lab-123254{{"`求解二次方程的根`"}} c/math_functions -.-> lab-123254{{"`求解二次方程的根`"}} c/user_input -.-> lab-123254{{"`求解二次方程的根`"}} c/output -.-> lab-123254{{"`求解二次方程的根`"}} end

获取输入系数

我们将从用户那里获取二次方程的系数,例如 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 程序来求解二次方程的根。我们从用户那里获取了二次方程的系数,并根据判别式的值确定了根的性质,从而计算出根。最后,我们根据根的性质输出了二次方程的根。

您可能感兴趣的其他 C 教程