【C++】数据结构:抽象定义复数,并实现复数的加、减、乘、除四则运算

这篇具有很好参考价值的文章主要介绍了【C++】数据结构:抽象定义复数,并实现复数的加、减、乘、除四则运算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大一生在线学习数据结构,哭唧唧!

步入正题,数据结构的第一个程序就是抽象定义复数,因为我没有学过类和对象,所以只能用最简单的结构体来定义复数。

先来回顾一遍书上知识点

1.复数的抽象定义

c++实现复数的加减乘除,c++,数据结构,算法

2.表示部分

c++实现复数的加减乘除,c++,数据结构,算法

3.实现部分

c++实现复数的加减乘除,c++,数据结构,算法

c++实现复数的加减乘除,c++,数据结构,算法

 谢谢是个懒人,直接搬书。

我将数据结构中算法设计简化为“三步走”。

首先定义复数,需要一个实部和虚部。利用结构体来创建对象。c++实现复数的加减乘除,c++,数据结构,算法

 其次对象有了,接下来是寻找对象之间的关系。

c++实现复数的加减乘除,c++,数据结构,算法

最后是对对象的操作。

复数C为复数A和复数B之间的操作转化而来。因为结构体默认是私有成员,所以外部无法访问他的成员。

注:在 add, minus, multiply, divide 函数中,我使用了引用传递地址传递两种方式来修改结构体参数,并且声明了参数为 const,以防止在函数内修改参数。(最开始我使用值传递,编译器就会报错。)

1.加法操作

这里引用C,A,B,返回的是数。

c++实现复数的加减乘除,c++,数据结构,算法

2.减法操作

这里用的是C,A,B的地址。返回的是一个指针。

c++实现复数的加减乘除,c++,数据结构,算法

 3.乘法操作

c++实现复数的加减乘除,c++,数据结构,算法

 复数C的实部=实部A*实部B-虚部A*虚部B

复数C的虚部=实部A*虚部B+虚部A*实部B(高中数学知识)

4.除法操作

c++实现复数的加减乘除,c++,数据结构,算法

实部C=(实部A*实部B+虚部A*虚部B)/(2*实部B+2*虚部B)

虚部C=(虚部A*实部B-实部A*虚部B)/(2*实部B+2*虚部B) 

所有操作完成构造以后,就能在主函数中测试了。

c++实现复数的加减乘除,c++,数据结构,算法

 完整源代码

 struct Complex//构建复数的实部和虚部
{
	float realPart;
	float imagPart;
};

 void create(Complex &A, float x, float y)//创建一个复数
 {
	 A.realPart = x;//A的实部为x
	 A.imagPart = y;//A的虚部为y
 }

 void Assign(Complex* A, float real, float imag)//赋值
 {
	 A->realPart = real;
	 A->imagPart = imag;
 }
 Complex add(Complex&C, const Complex&A,const Complex&B)//两个复数相加
 {
	 C.realPart = A.realPart + B.realPart;
	 C.imagPart = A.imagPart + B.imagPart;
	 return C;
 }
 Complex subtraction(Complex* C,const Complex& A,const Complex& B)//两个复数相减
 {
	 C->realPart = A.realPart - B.realPart;
	 C->imagPart = A.imagPart - B.imagPart;
	 return *C;
 }
 Complex multiply(Complex* C,const Complex& A,const Complex& B)//复数相乘
 {
	 C->realPart = A.realPart * B.realPart - A.imagPart*B.imagPart;//(ac-bd)
	 C->imagPart = A.realPart * B.imagPart + A.imagPart * B.realPart;//(bc+ad)
	 return *C;
 }
 Complex divide(Complex* C, const Complex& A,const Complex& B)//复数相除
 {
	 C->realPart=(A.realPart*B.realPart+A.imagPart*B.imagPart)/(B.realPart*2+B.imagPart*2);// (ac + bd) / (c ^ 2 + d ^ 2)
	 C->imagPart = (A.imagPart * B.realPart - A.realPart * B.imagPart) / (B.realPart * 2 + B.imagPart * 2); //(bc-ad)/(c^2+d^2)
	 return *C;
 }

 int main() {
	 //创建两个复数
	 Complex C1;
	 Complex C2;
	 create(C1, 2, 4);
	 create(C2, 3, 5);
	 cout << "第一个复数为:C1=" << C1.realPart << "+" << C1.imagPart <<"i" << endl;
	 cout << "第二个复数为:C2=" << C2.realPart << "+" << C2.imagPart << "i" << endl;
	
	 //创建一个C3,使C3=C1+C2
	 Complex C3;
	 add(C3, C1, C2);
	 cout << "两个复数的和为:";
	 cout << "C3=C1+C2=" << C3.realPart << "+" << C3.imagPart << "i" << endl;
	
	 //创建一个C4,使C4=C1-C2
	 Complex C4;
	 subtraction(&C4, C1, C2);
	 cout << "两个复数的差为:";
	 cout << "C4=C1-C2=" << C4.realPart << "+" << "("<<C4.imagPart<<")" << "i" << endl;

	 //创建一个C5,使C5=C1*C2
	 Complex C5;
	 multiply(&C5, C1, C2);
	 cout << "两个复数的乘积为:";
	 cout << "C5=C1*C2=" << C5.realPart << "+" << C5.imagPart << "i" << endl;

	 //创建一个C6,使C6=C1/C2
	 Complex C6;
	 divide(&C6, C1, C2);
	 cout << "两个复数相除为:";
	 cout << "C6=C1/C2=" << C6.realPart << "+" << C6.imagPart << "i" << endl;

	 return 0;
 }

但是主函数中的数据是我自己填进去的。小伙伴们可以自己修改C1和C2中的数据。其中源代码中有一个赋值的函数,我在主函数中并没有调用。如果要修改数据,就可以使用它。

若有不对,请指正,谢谢!

学好数据结构是我这学期的痛,太难了!加油努力,最后,鼓励每一个热爱编程的人:勤奋,是一种最简单的人生投资。文章来源地址https://www.toymoban.com/news/detail-736118.html

到了这里,关于【C++】数据结构:抽象定义复数,并实现复数的加、减、乘、除四则运算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构 | 树的定义及实现

    目录 一、树的术语及定义 二、树的实现 2.1 列表之列表 2.2 节点与引用 节点: 节点是树的基础部分。它可以有自己的名字,我们称作“键”。节点也可以带有附加信息,我们称作“有效载荷”。有效载荷信息对于很多树算法来说不是重点,但它常常在使用树的应用中很重要

    2024年02月14日
    浏览(22)
  • 数据结构-堆排序的定义与思路实现

    目录 一、什么是堆排序 1.1 堆的定义 1.2 堆排序的定义 1.3 堆排序的优势 二、堆排序的实现 2.1 堆排序的基本思路 2.2 堆排序的具体实现 2.3 堆排序的时间复杂度 三、C++实现堆排序 3.1 C++实现堆的基本操作 3.2 C++实现堆排序 四、堆排序的应用 4.1 堆排序在优先队列中的应用 4.2 堆

    2024年02月10日
    浏览(29)
  • 数据结构-图的邻接表的定义与实现

    目录 一、引言 二、图的基本概念 三、图的存储方式 1. 邻接矩阵 2. 邻接表 3. 十字链表 4. 邻接多重表 四、邻接表的实现 1. 邻接表的定义 2. 邻接表的构建 3. 邻接表的遍历 五、邻接表的优缺点 六、总结 在计算机科学中,图是一种非常重要的数据结构,它是由节点和边组成的

    2024年02月03日
    浏览(31)
  • LeetCode、208. 实现 Trie (前缀树)【中等,自定义数据结构】

    博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。 博主所有博客文件目录索引:博客目录索引(持续更新) 视频平台:

    2024年02月19日
    浏览(32)
  • 数据结构——栈(C++实现)

    今天我们来看一个新的数据结构—— 栈 。 栈是一种基础且重要的数据结构,它在计算机科学和编程中扮演着核心角色。栈的名称源于现实生活中的概念,如一叠书或一摞盘子,新添加的物品总是放在顶部,而取出物品时也总是从顶部开始。这种后进先出(Last In, First Out, L

    2024年04月29日
    浏览(34)
  • 数据结构——队列(C++实现)

    目录 队列的概念及结构  队列的实现 队列的代码实现 完整的源文件代码 总结 推荐题目巩固知识 队列:只允许在一端进行插入数据操作,在另一端进行删除操作的特殊线性表,队列最重要的特性是 先进先出 (First In First Out) 入队列:进行插入操作的一端称为 队尾 出队列

    2024年02月07日
    浏览(34)
  • C++定义复数类(Complex)

    题目描述: 定义一个复数类Complex,使得下面的代码能够工作: Complex c1(3, 5);        //用复数3+5i初始化c1 Complex c2 = 4.5;        //用实参4.5作为实部初始化c2,虚部为0 c1.add(c2);              //将c1与c2相加,结果保存在c1中 c1.show();               //将c1输出(这

    2023年04月10日
    浏览(22)
  • 【数据结构】—红黑树(C++实现)

                                                            🎬 慕斯主页 : 修仙—别有洞天                                                  💜 本文前置知识:  AVL树                                                       ♈️ 今日夜电波 :

    2024年02月05日
    浏览(41)
  • 【数据结构】红黑树(C++实现)

    👀 樊梓慕: 个人主页  🎥 个人专栏: 《C语言》 《数据结构》 《蓝桥杯试题》 《LeetCode刷题笔记》 《实训项目》 《C++》 《Linux》 《算法》 🌝 每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.概念 2.性质 3.节点的定义  4.插入 4.1情况1:叔叔u存在且为红 4.2情况2:

    2024年03月13日
    浏览(43)
  • 数据结构-B树的特点结构与C++实现

    目录 1. 引言 2. 什么是B树 3. B树的特点 3.1 平衡性 3.2 多路搜索树 3.3 高度平衡 4. B树的应用场景 4.1 文件系统 4.2 数据库系统 4.3 索引结构 5. B树的基本操作 5.1 插入操作 5.2 删除操作 5.3 查找操作 6. B树与其他数据结构的比较 6.1 B树与二叉搜索树 6.2 B树与红黑树 7. C++代码实现 8.

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包