C语言二——C++编写一段代码,求一元三次方程的根

 

这段代码是用来解决一元三次方程的程序。它使用了复数运算,并根据判别式的值进行不同分支的处理,输出方程的根。

您可以在程序中输入一元三次方程的系数a、b、c和d,然后调用solve_cubic_equation函数进行求解。函数会根据判别式的值进行不同情况的处理并输出结果。

请注意,这段代码需要使用C++编译器进行编译运行,同时需要包含头文件。

#include 
#include 
#include 

using namespace std;

void solve_cubic_equation(double a, double b, double c, double d) {
    double discriminant, delta;
    double p, q;
    double x1, x2;
    complex x3;

    discriminant = (18 * a * b * c * d) - (4 * pow(b, 3) * d) + (pow(b, 2) * pow(c, 2)) - (4 * a * pow(c, 3)) - (27 * pow(a, 2) * pow(d, 2));
    delta = (pow(b, 2) - (3 * a * c));

    if (discriminant > 0) {
        p = ((3 * a * c) - pow(b, 2)) / (3 * pow(a, 2));
        q = ((2 * pow(b, 3)) - (9 * a * b * c) + (27 * pow(a, 2) * d)) / (27 * pow(a, 3));

        double phi = acos(-q / (2 * sqrt(-pow(p, 3))));

        x1 = (2 * sqrt(-p) * cos(phi/3)) - (b / (3 * a));
        x2 = (2 * sqrt(-p) * cos((phi + (2 * M_PI))/3)) - (b / (3 * a));
        x3 = (2 * sqrt(-p) * cos((phi - (2 * M_PI))/3)) - (b / (3 * a));

        cout << "方程有三个实根:" << endl;
        cout << "x1 = " << x1 << endl;
        cout << "x2 = " << x2 << endl;
        cout << "x3 = " << x3.real() << endl;
    } else if (discriminant == 0 || (delta == 0 && discriminant < 0)) {
        x1 = (-b) / (3 * a);
        cout << "方程有一个实根:" << endl;
        cout << "x1 = " << x1 << endl;
    } else {
        double R = (pow(delta, 2) + pow(discriminant, 3) * 4) / 108;
        double S = pow((delta / 2), 3);

        double t = cbrt(R + sqrt(fabs(S)));
        double u = cbrt(R - sqrt(fabs(S)));

        complex x1 = (-b) / (3 * a) + (t + u);
        complex x2 = (-b) / (3 * a) - ((t + u) / complex(2, 0)) + (complex(0, 1) * (t - u) * sqrt(3) / complex(2, 0));
        x3 = (-b) / (3 * a) - ((t + u) / complex(2, 0)) - (complex(0, 1) * (t - u) * sqrt(3) / complex(2, 0));

        cout << "方程有一个实根和两个共轭虚根:" << endl;
        cout << "x1 = " << x1 << endl;
        cout << "x2 = " << x2 << endl;
        cout << "x3 = " << x3 << endl;
    }
}

int main() {
    double a, b, c, d;

    cout << "请输入一元三次方程的系数(a、b、c、d):" << endl;
    cin >> a >> b >> c >> d;

    solve_cubic_equation(a, b, c, d);

    return 0;
}

 C语言二——C++编写一段代码,求一元三次方程的根_第1张图片

 

这是一个用于解一元三次方程的C++程序。程序使用了复数类 complex 来处理方程的根,以支持虚根的计算。

下面是程序的具体分块分析:

  1. 头文件引入和 solve_cubic_equation() 函数的定义
#include 
#include 
#include 

using namespace std;

void solve_cubic_equation(double a, double b, double c, double d) {
    // ...
}

这里引入了三个头文件 iostream、 complex 和 cmath,使用命名空间 std。然后定义了 solve_cubic_equation() 函数,用于解一元三次方程。

  1. solve_cubic_equation() 函数的具体实现

在 solve_cubic_equation() 函数内部,定义了一系列变量来存储方程的解。根据一元三次方程的求解公式,计算方程的判别式 discriminant 和 delta。然后根据判别式和 delta 的值,分别计算出不同情况下的方程的解,并使用 cout 输出到屏幕上。

  1. main() 函数
int main() {
    double a, b, c, d;

    cout << "请输入一元三次方程的系数(a、b、c、d):" << endl;
    cin >> a >> b >> c >> d;

    solve_cubic_equation(a, b, c, d);

    return 0;
}

在 main() 函数中,声明了变量 abcd,用来存储用户输入的一元三次方程的系数。通过 cout 向用户输出提示信息,要求用户输入方程的系数。然后使用 cin 接收用户输入的系数,并将其作为参数传递给 solve_cubic_equation() 函数来进行方程的求解。

  1. 返回并结束程序
return 0;
}

这个块用于表示程序执行成功,并通过 return 语句返回一个整数值 0,作为程序的退出码。

以上就是这个程序的具体分块分析。如果您还有其他问题,请随时提问。

你可能感兴趣的:(c语言,算法,开发语言)