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

 

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

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

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

#include <iostream>
#include <complex>
#include <cmath>

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<double> 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<double> x1 = (-b) / (3 * a) + (t + u);
        complex<double> x2 = (-b) / (3 * a) - ((t + u) / complex<double>(2, 0)) + (complex<double>(0, 1) * (t - u) * sqrt(3) / complex<double>(2, 0));
        x3 = (-b) / (3 * a) - ((t + u) / complex<double>(2, 0)) - (complex<double>(0, 1) * (t - u) * sqrt(3) / complex<double>(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++程序。程序使用了复数类 complex 来处理方程的根,以支持虚根的计算。

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

  1. 头文件引入和 solve_cubic_equation() 函数的定义
#include <iostream>
#include <complex>
#include <cmath>

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,作为程序的退出码。

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张謹礧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值