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

news2024/11/22 16:11:03

 

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

您可以在程序中输入一元三次方程的系数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,作为程序的退出码。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/938488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云计算和Docker分别适用场景

在大规模网络爬虫系统中&#xff0c;通过使用云计算和Docker技术&#xff0c;可以实现大规模网络爬虫系统的高效架构设计和部署。这种架构能够提供可扩展性、高可用性和灵活性&#xff0c;为爬虫系统的运行和管理带来便利。 云计算和Docker在大规模网络爬虫系统中有不同的业务…

【C语言】用函数递归的方法解决汉诺塔问题

&#x1f493;博主csdn个人主页&#xff1a;小小unicorn&#x1f493; ⏩专栏分类&#xff1a;C语言 &#x1f69a;代码仓库&#xff1a;小小unicorn的学习足迹&#x1f69a; &#x1f339;&#x1f339;&#x1f339;关注我带你学习编程知识 汉诺塔 1.问题起源:2.汉诺塔游戏规…

可扩展的单核至四核Cortex-A53@1.4GHz工业级核心板规格书

1 核心板简介 创龙科技SOM-TL62x是一款基于TI Sitara系列AM62x单/双/四核ARM Cortex-A53 + 单核ARM Cortex-M4F多核处理器设计的高性能低功耗工业核心板,通过工业级B2B连接器引出2x TSN Ethernet、9x UART、3x CAN-FD、GPMC、2x USB2.0、CSI、DISPLAY等接口。处理器ARM Corte…

什么软件可以文字转语音?来试试这几种工具

将文字转换成语音可以帮助那些有视觉障碍或者阅读困难的人更容易地获取信息。这些人可能无法看到屏幕上的文字&#xff0c;但是能够通过听声音来理解信息。其次&#xff0c;它还可以作为一种语言学习工具&#xff0c;例如帮助人们提高语言发音能力&#xff0c;因为它可以提供标…

使用Python爬虫采集网络热点

在当今信息爆炸的时代&#xff0c;了解网络热搜词和热点事件对于我们保持时事敏感性和把握舆论动向非常重要。在本文中&#xff0c;我将与你分享使用Python爬虫采集网络热搜词和热点事件的方法&#xff0c;帮助你及时获取热门话题和热点新闻。 1. 网络热搜词采集 网络热搜词是人…

生成地图展示-广东省【Python思路】

在【生成图片展示】博客的基础上&#xff0c;进一步的确定某个省份的数据。 # 以下数据均为人造数据&#xff0c;仅供学习# 1.导包 from pyecharts.options import * from pyecharts.charts import Map import json# 2.打开、读取、关闭文件 f open("D:/Typora 记事本/n…

【C/C++】虚函数调用流程 | 虚函数和一般函数的区别

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

C++信息学奥赛1144:单词翻转

#include <iostream> #include <string> using namespace std; int main() {string str;// 输入一行字符串getline(cin, str);string arr;for (int i 0; i < str.length(); i){if (str[i] ! ){arr str[i]; // 将非空格字符添加到临时存储的字符串中}else{for…

spring5.x-声明式事务原理及源码实现

上文&#xff1a;spring5.x-AOP实现原理及源码分析 本系列文章&#xff1a; spring5.x-AOP实现原理及源码分析 spring5.x-监听器原理及源码实现 spring5.x-解决循环依赖分析 spring5.x-IOC模块源码学习 spring5.x介绍及搭配spring源码阅读环境 基础知识 请先学习…

高职教育应对ChatGPT应用的策略

一、完善顶层设计&#xff0c;提升技术水平 在推广ChatGPT平台的过程中&#xff0c;高职院校需要关注技术本身的问题。这就需要在国家和地方政府的引导下&#xff0c;引入更完善的技术顶层设计&#xff0c;提高人工智能在高职教育中的运用水平。具体来说&#xff0c;一方面需要…

信息化发展3

信息化体系 国家信息化体系包括信息技术应用&#xff08;龙头&#xff09; 、信息资源&#xff08;核心&#xff09; 、信息网络&#xff08;基础设施&#xff09; 、信息技术和产业&#xff08;国家信息化建设基础&#xff09; 、信息化人才&#xff08;关键&#xff09; 、信…

Android常用组件:空布局empty_view,占位图封装

最近在做一件费劲不讨好的事情&#xff0c;那就是把项目中无关业务的代码功能模块抽出来&#xff0c;供以后使用。 既然费劲心机&#xff0c;不妨分享出来&#xff0c;大家可以一块学习借鉴。 直接来看看空布局的界面效果&#xff1a; 基本的布局就是以下结构&#xff1a; xm…

Python中的装饰器介绍

装饰器是Python编程语言中一种强大的特性&#xff0c;用于修改或增强函数或类的行为&#xff0c;而无需对它们本身进行修改。装饰器通常被用于在不改变原始代码的情况下&#xff0c;向函数或方法添加额外的功能&#xff0c;如日志记录、权限检查、数据格式转换等。装饰器本质上…

从小学到高考:讲述我与儿子的成长故事

三年前&#xff0c;当儿子考上高中的时候&#xff0c;我就想着写一篇文章做纪念&#xff0c;然后写了一半就放弃了&#xff0c;因为初中阶段充满了遗憾。在儿子高一拿到好成绩时&#xff0c;我又想着写一篇文章以作鼓励&#xff0c;写了一半也放弃了&#xff0c;因为革命尚未成…

聊天平台Revolt的搭建

经网友 凌尘 提醒&#xff0c;Web-Check 最新的镜像版本&#xff0c;容器端口已经从 8888 改为了 3000&#xff0c;特此更正&#xff01; 什么是 Revolt &#xff1f; Revolt 是一个开源的用户至上的聊天平台。是在不牺牲任何可用性的情况下与朋友和社区保持联系的最佳方式之一…

帝国CMS仿管理资源吧资料下载网站模板源码/下载会员+积分付费下载功能自动采集资源网站源码

帝国CMS仿管理资源吧资料下载网站模板源码&#xff0c;带下载会员积分付费下载功能自动采集资源网站源码&#xff0c;管理资源吧——为中小企业管理者提供全方位的管理资料下载服务&#xff1b;是一个所有资料免费下载&#xff0c;免注册、免登陆、免积分的公益性的管理知识共享…

地球的“第三极”及其在全球气候中的作用

青藏高原是全球气候系统的重要力量&#xff0c;也是气候变化的热点地区。一项新的审查总结了知识状况并确定了与该地区相关的研究需求。 西门措湖是一个冰川冰碛湖&#xff0c;坐落在青藏高原的山​​峰之中。图片来源&#xff1a;Tenace10/Wikimedia Commons &#xff0c; 资料…

ModaHub魔搭社区:WinPlan经营大脑开放API调用指南

本文主要是介绍开放API调用流程 1. 开放API调用流程 1.1 创建API-TOKEN 即API访问凭证, 是用户在调用API接口时的应用和组织身份凭证,请妥善保管。如遇到丢失或者泄漏的情况,请及时重新生成。 API-TOKEN生成方式: 请前往[管理中心]->[数据集成]页面创建/重新生成。Win…

将Series序列中的缺失值用后一个值填充Series.bfill()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 对于Series序列中的缺失值n1 用n1后面的值n2来填充替代 Series.bfill() [太阳]选择题 关于以下代码的说法中错误的是? import numpy as np import pandas as pd a pd.Series([1,np.nan,2,np.…

PCI控制器扫描PCI总线过程解析

1、PCI的三种地址空间介绍 地址空间描述命令说明I/O空间供给设备驱动程序使用I/O操作命令对设备对应的I/O地址空间进行访问&#xff0c;此类访问不可预取存储空间供给设备驱动程序使用memory操作命令对设备的Memory空间进行访问&#xff0c;其中Memory操作命令又可分为Prefech…