抽象数据类型(Abstract Data Type,ADT)指的是用户进行软件系统设计时从问题的数学模型中抽象出来的逻辑数据结构和逻辑数据结构上的运算,而不考虑计算机的具体存储结构和运算的具体实现算法。抽象数据类型中的数据对象和数据运算的声明与数据对象的表示和数据运算的实现相互分离。

根据抽象数据类型的定义,实现复数的基本运算。

注意:

 *z1、*z2为引用型指针,不对实参进行改变

*&sum、*&quo为输出型指针,对实参进行改变

  需要理解清楚

复数的基本函数

创建复数的数据类型,real为复数的实部,imag为复数的虚部

#include <iostream>
using namespace std;
#include <math.h>typedef struct
{double real;//复数的实部double imag;//复数的虚部
} Complex;

对复数进行初始化,开辟存储空间

z=new Complex 等效于 z=(Complex *)malloc(sizeof(Complex)),两者皆可。

//复数初始化
void InitComplex(Complex *&z)//引用型指针
{z=new Complex;  //给z分配了一块存储空间
}  

为复数进行赋值

//复数的赋值
void AssignComplex(Complex *&z,double v1,double v2)
{z->real=v1;   //将e1的值赋给复数的实部z->imag=v2;   //将e2的值赋给复数的虚部
}

要思考复数的特殊形式,然后分成各个不同的情况

/输出复数  能输出复数的特殊形式,例如:0,3,3i,4+i,4-i..
void DispComplex(Complex *z)
{if(z->real)//实部不为0{if(z->imag==0)cout<<z->real;else if(z->imag==1)cout<<z->real<<"+i";else if(z->imag==-1)cout<<z->real<<"-i";else if(z->imag>0)cout<<z->real<<"+"<<z->imag<<"i";elsecout<<z->real<<z->imag<<"i";}else  //实部为0的情况{if(z->imag==0)cout<<0;else if(z->imag==1)cout<<"i";else if(z->imag==-1)cout<<"-i";else cout<<z->imag<<"i";}
}

销毁复数,避免无用数据占用内存。

//销毁复数
void DestroyComplex(Complex *&z)
{delete z;  //释放z所占的存储空间
}

复数的加减乘除运算

对于复数和积差的运算,构造第三个复数sum,将复数z1和复数z2的值进行运算后保存到复数sum。

对于复数商的运算,先求模进行判断,构造第三个复数quo,将复数z1和复数z2的值进行运算后保存到复数quo。

复数的除法运算公式我就不在这里进行说明了,可以自己百度。

//求两个复数的和
void Add(Complex *z1,Complex *z2,Complex *&sum)
{sum->real=z1->real+z2->real;sum->imag=z1->imag+z2->imag;
}//求两个复数的积
void Product(Complex *z1,Complex *z2,Complex *&pro)
{pro->real=z1->real*z2->real-z1->imag*z2->imag;pro->imag=z1->imag*z2->real+z1->real*z2->imag;
}//求两个复数的差
void Difference(Complex *z1,Complex *z2,Complex *&dif)
{dif->real=z1->real-z2->real;dif->imag=z1->imag-z2->imag;}//取模
double Module(Complex *z1)
{return sqrt(z1->real*z1->real+z1->imag*z1->imag);
}//(a+bi)/(c+di)=(a+bi)*(c-di)/(c*c+d*d);
//求两个复数的商
bool Quotient(Complex *z1,Complex *z2,Complex *&quo)
{if(Module(z2)==0)  //当z2模为0,则不能进行除法运算{return false;}else{quo->real=(z1->real*z2->real+z1->imag*z2->imag)/(z2->real*z2->real+z2->imag*z2->imag);quo->imag=(z1->imag*z2->real-z1->real*z2->imag)/(z2->real*z2->real+z2->imag*z2->imag);return true;}
}

主函数

void main()
{double a,b;cout<<"请输入第一个复数的实部:";cin>>a;cout<<"请输入第一个复数的虚部:";cin>>b;Complex *z1;  InitComplex(z1);AssignComplex(z1,a,b);cout<<"第一个复数为:";DispComplex(z1);cout<<endl;cout<<"复数的模为:"<<Module(z1)<<endl;cout<<"请输入第二个复数的实部:";cin>>a;cout<<"请输入第二个复数的虚部:";cin>>b;Complex *z2;  InitComplex(z2);AssignComplex(z2,a,b);cout<<"第二个复数为:";DispComplex(z2);cout<<endl;Complex *sum;InitComplex(sum);Add(z1,z2,sum);cout<<"这两个复数的和为:";DispComplex(sum);cout<<endl;Complex *diff;InitComplex(diff); Difference(z1,z2,diff);cout<<"这两个复数的差为:";DispComplex(diff);cout<<endl;Complex *prod;InitComplex(prod);Product(z1,z2,prod);cout<<"这两个复数的积为:";DispComplex(prod);cout<<endl;Complex *shang;InitComplex(shang);if(Quotient(z1,z2,shang)){  cout<<"这两个复数的商为:";DispComplex(shang);cout<<endl;}elsecout<<"除零错误!"<<endl;//容错性cout<<"销毁复数";DestroyComplex(z1);DestroyComplex(z2);DestroyComplex(sum);DestroyComplex(diff);DestroyComplex(prod);DestroyComplex(shang);}

C++复数的具体实现相关推荐

  1. matlab画复变函数,科学网—复数复变函数的Matlab计算与绘图 - 周铁戈的博文

    复数复变函数的Matlab计算与绘图 周铁戈 复数的表示 存在两种表示方法,一种是代数式,一种是指数式,在Matlab中的方式如下: >> z=1+2i            #代数式,1 ...

  2. Python变量类型(l整型,长整形,浮点型,复数,列表,元组,字典)学习

    #coding=utf-8 __author__ = 'Administrator'#Python变量类型#Python数字,python支持四种不同的数据类型 int整型 long长整型 float ...

  3. 远场语音识别错误率降低30%,百度提基于复数CNN网络的新技术

    [12月公开课预告],入群直接获取报名地址 12月11日晚8点直播主题:人工智能消化道病理辅助诊断平台--从方法到落地 12月12日晚8点直播:利用容器技术打造AI公司技术中台 12月17日晚8点直播 ...

  4. 高数_解二元方程,复数怎么求出来的?(复数问题)

    方法还是一样的,只不过另外一边是负数开根号,得到单位为i的复数 这个题目的话: x^2-2x+1=-4 (x-1)^2=-4 x-1=正负2i x=1+2i或1-2i 就是 根号下(-16)的结果是: ...

  5. Python 复数属性及操作介绍

    复数是由一个实数和一个虚数组合构成,表示为:x+yj,一个复数是一对有序浮点数 (x,y),其中 x 是实数部分,y 是虚数部分. Python 语言中有关复数的概念: 虚数不能单独存在,它们总是和一 ...

  6. 复数3+4i在python中的表达方式是_i(x+yi)=3+4i xy属于R,则复数x+yi的模是为什么xi-y=3+4......

    满意答案 口袋兔子耳朵长 2015.09.18 已帮助:3147万人 已回答:104万条 来自:阳光兔(北京)科技有限公司,是学大教育集团与奇虎360成立的合资公司,利用学大教育在内容和教育方面的资源 ...

  7. python复数类型的虚部通过什么表示_python复数,python中复数怎么表示

    你说的没错,可以是大写的,所以其实C也是错的 Python语言中有关复数的几个概念 1.规定复数的乘法按照以下的法则进行: 设z1=a+bi,z2=c+di(a.b.c.d∈R)是任意两个复数,那么它 ...

  8. 【Java例题】2.1复数类

    1.定义复数类,包括实部和虚部变量.构造方法. 加减乘除方法.求绝对值方法和显示实部.虚部值的方法. 然后编写一个主类,在其主方法中通过定义两个复数对象来 显示每一个复数的实部值.虚部值和绝对值, 显 ...

  9. 复数 Complex Number 教程

    复数 Complex Number 教程

  10. python表示复数的语句是_在python中复数如何表示

    在python中复数如何表示 发布时间:2020-09-22 13:54:01 来源:亿速云 阅读:75 作者:小新 这篇文章主要介绍了在python中复数如何表示,具有一定借鉴价值,需要的朋友可以参 ...

最新文章

  1. 自然语言不等于英语,为什么NLPer应当认识到这个问题,以及该怎么做?
  2. 视频中的运动特征--Learning Motion Patterns in Videos
  3. X is not a member of 'cv'异常解决
  4. 谷歌将采取自动化系统审核,预计被误删视频数量或将大增
  5. 中科元素精准饮食治未病干预 李喜贵:签约华佗国药体系建立
  6. 查看tp框架版本方法
  7. 网络对抗作业——程瑀
  8. douchat 4.0 新版发布,助力小程序后台开发
  9. JS 操作cookie
  10. java访问错误404_如何解决 Java web 项目中的 404 错误
  11. 微信小程序盲盒-可对接微信支付
  12. python数组删除最后一个元素_删除numpy数组中的最后一个元素
  13. Mac 使用Quik Time Player为iPhone录屏后, iPhone状态条时间变为9:41
  14. 改图宝,快速修改图片大小
  15. Xamarin 初学,设计一个简单的美景展示App(只实现了部分功能)
  16. H盘显示数据错误循环冗余检查要怎样办啊
  17. Gprs通信协议服务器,GPRS协议简介
  18. 使用 HTML、CSS 和 JavaScript 定制私人版的刮刮乐【一看就会】
  19. C. Colored Balls: Revisited codeforces 1728A
  20. RK3588参数 rk3288处理器属于什么档次

热门文章

  1. Distractor-aware Siamese Networks for Visual Object Tracking 论文学习
  2. 阿里最全面试116题整理
  3. ICG-PEG-OH 结构式,吲哚菁绿-聚乙二醇-羟基的相关说明
  4. TX2超详细,超实用刷机教程(亲测有效,所有步骤都是博主亲自实践过)
  5. 谈谈如何构建自己的时间管理系统?
  6. 如何获取客户端真实IP
  7. 多周期CPU设计(verilog)
  8. 手把手教你设置Typora的图床-gitee
  9. 几种经典的卷积神经网络
  10. 【附源码】Python计算机毕业设计社区生鲜电商平台