C23-复数的定义-表示和实现-C语言程序_第1页
C23-复数的定义-表示和实现-C语言程序_第2页
C23-复数的定义-表示和实现-C语言程序_第3页
C23-复数的定义-表示和实现-C语言程序_第4页
C23-复数的定义-表示和实现-C语言程序_第5页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.《数据结构》作业一抽象数据类型—复数的定义、表示及其实现抽象数据类型复数的定义:ADTComplex{数据对象:D={a,b|a,b R,R为实数集}数据关系:S={<a,b>|a 为复数实部, b为复数虚部}基本操你:Complex(&z,a=0,b=0)操作结果:构造复数 z,其实部和虚部分别为 a和b,不带参数时自动取 0。GetReal(x)初始条件:复数 x已存在;操作结果:返回 z的实部。GetImag(x)初始条件:复数 x已存在;操作结果:返回 z的虚部。Add(&z,x,y)初始条件:复数 x,y已存在;操作结果:将 x与y的和存入 z。Sub(&z,x,y)初始条件:复数 x,y已存在;操作结果:将 x与y的差存入 z。Mul(&z,x,y)初始条件:复数 x,y已存在;操作结果:将 x与y的积存入 z。Div(&z,x,y)初始条件:复数 x,y已存在;操作结果:将 x与y的商存入 z。Pow(&z,x,n)初始条件:复数 x已存在;操作结果:将 x的n次方存入 z,n为非负整数。Pow(&z,x,a)初始条件:复数 x已存在;操作结果:将 x的乘a次幂存入 z,a为实数。Abs(x)初始条件:复数 x已存在;操作结果:返回复数 x的模。ComplexAng(x)初始条件:复数 x已存在;操作结果:返回复数 x的幅角。PrintImage(x)初始条件:复数 x已存在;操作结果:以“ bi”的形式显示复数 x的虚部。ErrorExit(str)..初始条件:str 为字串常量;操作结果:遇到非法时 (比如分母为 0时)强形退出程序。Print(x)初始条件:复数 x已存在;操作结果:以“ a+bi”的形式显示复数 x。}ADTComplex2.抽象数据类型复数的表示与实现:#include<conio.h> //getch#include<iostream> //cout#include<cmath> //sqrt,powusingnamespacestd; //std 命名空间#defineeps1.0e-10 //考虚计算精度#definePI3.1415926536 //圆周率classComplex{ //复数类的定义private: //私有变量:存取只能通过成员函数doubler,i;public: //公有变量:可通过成员运算符存取Complex(Complex&z,doublex=0,doubley=0) //构造函数:初始化{z.r=x;z.i=y;}doubleGetReal(Complexx){returnx.r;} //取实部doubleGetImag(Complexx){returnx.i;} //取虚部voidAdd(Complex&x,Complexc1,Complexc2) //复数相加{x.r=c1.r+c2.r;x.i=c1.i+c2.i;}voidSub(Complex&x,Complexc1,Complexc2) //复数相减{x.r=c1.r-c2.r;x.i=c1.i-c2.i;}voidMul(Complex&x,Complexc1,Complexc2) //复数相乘{}doubleAbs(Complexx) //复数求模..{}voidErrorExit(char*s) //程序意外终止{cout<<s; //给出错误信息getch(); //等待按任意键exit(0); //终止程序}voidDiv(Complex&x,Complexa,Complexb) //求数除法 a/b{doublet;if(Abs(b)<eps) //若分母为 0ErrorExit("\nDividedbyzero!"); //终止程序}doubleComplexAng(Complexx) //求复角{doubler,a; //模与幅角if(r<eps)a=0; //实-虚皆0elseif(fabs(x.r)<eps){ //实部为0if(x.i>0)a=(double)PI/2;elsea=-(double)PI/2;}else{a=atan(x.i/x.r);if(a>0&&x.r<0)a=PI+a; //同号:三象限if(a<0&&x.r<0)a=PI+a; //异号:二象限}returna;}voidPow(Complex&x,Complexy,doublen) //幂运算:实数幂{doubler,a;if(n==0)x.i=0,x.r=1; //定义0的0次幂为1else{if(Abs(y)<eps) //模为0if(n<0)ErrorExit("\n 分母为0!");//0 负幂无意义..elsex.r=0,x.i=0;//0的正幂为0else{a=ComplexAng(y);//求辐角r=Abs(y);//求模x.r=pow(r,n)*cos(n*a);x.i=pow(r,n)*sin(n*a);r=Abs(x);if(fabs(x.r/r)<eps)x.r=0;//处理无穷小量if(fabs(x.i/r)<eps)x.i=0;}}}voidPow(Complex&x,Complexa,unsignedn)//重载Pow函数:乘方{x.r=1,x.i=0;if(n==0)return;//0次幂为1for(inti=0;i<n;i++)Mul(x,x,a);}voidPrintImag(Complexx)//输出虚部{if(x.i==1)cout<<"i"<<endl;elseif(x.i==-1)cout<<"-i"<<endl;elsecout<<x.i<<"i"<<endl;}voidPrint(Complexx)//输出整个复数{if(x.i&&x.r){//实部虚部都不为0cout<<x.r;if(x.i>=0)cout<<"+";PrintImag(x);}elseif(x.i==0&&x.r==0)cout<<"0"<<endl;//实部虚部都为0elseif(x.i==0)cout<<x.r<<endl;//虚部为0elsePrintImag(x);//实部为0}};//类定义完毕3.程序测试部分voidmain(){ComplexC,C1(1,1),C2(1,1); //C初始化(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论