C++课程设计-复数计算器.doc

上传人:PIYPING 文档编号:10560085 上传时间:2021-05-23 格式:DOC 页数:19 大小:844.81KB
返回 下载 相关 举报
C++课程设计-复数计算器.doc_第1页
第1页 / 共19页
C++课程设计-复数计算器.doc_第2页
第2页 / 共19页
C++课程设计-复数计算器.doc_第3页
第3页 / 共19页
C++课程设计-复数计算器.doc_第4页
第4页 / 共19页
C++课程设计-复数计算器.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《C++课程设计-复数计算器.doc》由会员分享,可在线阅读,更多相关《C++课程设计-复数计算器.doc(19页珍藏版)》请在三一文库上搜索。

1、复数计算器1.设计目的面向对象程序设计课程设计是计算机科学与技术专业和软件工程专业集中实践性环节之一,是学习完面向对象程序设计课程后进行的一次全面的综合练习。其目的在于加深对面向对象程序设计中基础理论和基本知识的理解,培养学生的实践能力,促进理论与实践的结合。通过课程设计,让学生能够熟练运用C+进行面向对象编程,建立对象模型,降低软件的复杂性,改善软件的重用性和维护性,提高软件的生产效率,全面掌握面向对象编程技术。2.设计要求1、掌握使用一种面向对象程序设计语言如Borland C+或Visual C+等。 2、培养调查研究、查阅技术文献、资料、手册以及编写技术文献的能力。 3、通过课程设计,

2、要求学生在指导教师的指导下,独立完成实习课题的全部内容,包括: 通过调查研究和上机实习,收集和调查有关技术资料。 掌握设计课题的基本步骤和方法。 根据课题的要求进行上机实验调试。4、课程设计完成后,提交课程设计报告3.设计方案【实习题目】运用C+语言描述数据类、复数类,每一个类应包含数据成员和成员函数。设计基类和派生类,并运用多态性和虚函数的知识。注重面向对象程序设计理论知识的理解与实际的动手编程能力,要求学生设计具有继承与派生以及多态性的类,理解面向对象程序设计的核心的概念。本课程设计要实现的主要功能如下:1)建立数据类、复数类2)数据、复数信息的初始化3)复数信息的输出4)将复数信息保存为

3、文件5)求复数的绝对值 6)实现复数的加、减、乘、除、乘方、自加、自减等运算4.设计内容4.0【类层次结构图和用例图】开始输出菜单及提示信息加法减法退出求模比较自减自加除法乘法结束【基本要求】1、 使用继承减少重复代码;2、 使用多态性统一通讯协议,使程序易于维护;3、 体现数据抽象和封装;4、 体现数据访问属性和继承属性。【实现说明】 能够使用构造的类层次创建和使用对象,并能实现以上各基本要求。4.1设计复数类CComplex1 为复数类设计两个double型数据成员,一个作为实部,一个作为虚部。2 需要声明如下形式带默认值的构造函数,以满足特定方式创建对象的需要。 CComplex(dou

4、ble real=0,double image=0) ;3 为满足设计要求(3),需要重载“”、“”“+friend ostream & operator(CComplex &com):int+operator(istream &is,CComplex &com); /重载输入friend ostream & operator(CComplex &com);int operator(CComplex &com);int operator!=(CComplex &com);int operator=(CComplex &com);;4.2 设计构造函数。下面是构造函数的实现代码:CComplex

5、(double real=0,double image=0)Real=real;Image=image;4.3 重载“”运算符定义friend ostream & operator(ostream &os,CComplex &com),可以输入a+bi的形式,代码如下:ostream & operator(ostream &os,CComplex &com) /重载输入if(fabs(com.Image)EPS) / 如果虚部为0oscom.Real; /只输出实部else if(fabs(com.Real)EPS) /如果实部为0oscom.Image0)oscom.Real+com.Ima

6、gei;elseoscom.Realcom.Image”运算符定义friend istream & operator(istream &is,CComplex &com)代码如下:istream & operator(istream &is,CComplex &com) /couts; /用字符串的形式接受复数int len=strlen(s); /求出字符串的长度int n=0,sign=1;/n为当前从字符串中提取出来的数字,初始化为0;sign是难道符号,初始化为正com.Image=com.Real=0;for(int k=0;klen;k+) /判断接受的字符串是否合法if(sk 9

7、) & (sk!=+ & sk!=- & sk!=i)couterrorendl;return is; /错误,输出出错信息并返回for(k=0;klen;) /顺序识别字符串中各字符if(n!=0 &(sk=-|sk=+) /当前字符是否是符号位com.Real=sign*n;/是符号位,且n!=0,即n已被赋值,表明当前读取的是虚部的符号n=0; /将原n*sign值赋给实部,将n清零,准备接受虚部的值if(sk=-) /当前字符为负号sign=-1;k+; /给符号标志赋值if(sk=+) /当前字符为正号sign=1;k+; /给符号标志赋值if(sk=i) /当前字符为Iif(k!=

8、len-1) /判断字符I是否为字符串中作后一个字符cout=0 & sknum1;double ss=num1.mod();cout模的结果为ssendl;cout按任意键结束n;cout.flush();cin.get();cin.get();运行结果如下4.6加法功能的实现CComplex CComplex:operator+(CComplex &com) /加法重载operator+operator+(CComplex &com)SumSum .RealSum .IimagCom.RealCom.ImagCComplex sum;sum.Real=Real+com.Real; /实部相

9、加sum.Image=Image+com.Image; /虚部相加return sum;void Add() /复数加法运算函数user.nAdd+;CComplex num1,num2,sum,Zero(0,0);cout加法计算n最少输入两个复数,并且以0结束n;coutnum1;coutnum2;sum=num1+num2;coutnum1;int i=4;while(!(num1=Zero)sum=sum+num1;cout第inum1;i+;cout加法结果是:sumendl;cout请按任意键继续n;cout.flush();cin.get();cin.get();运行结果如下4.

10、7减法功能的实现CComplex CComplex:operator-(CComplex &com) /减法重载Operator-+operator-(CComplex &com)SubSub .RealSub .IimagSub.RealSub.ImagCComplex sub;sub.Real=Real-com.Real;sub.Image=Image-com.Image;return sub;void Sub() /复数减法预算函数user.nSub+;CComplex num1,num2,sub,Zero(0,0);cout最少输入两个复数,并且以0结束n;coutnum1;coutn

11、um2;sub=num1-num2;coutnum1;int i=4;while(!(num1=Zero)sub=sub-num1;cout第inum1;i+;cout减法结果是:subendl;cout请按任意键继续n;cout.flush();cin.get();cin.get();运行结果如下4.8乘法功能的实现Operator*+operator*(CComplex &com)multimulti.Realmulti .Iimagmulti.Realmulti.ImagCComplex CComplex:operator*(CComplex &com) /乘法重载CComplex mu

12、lti;multi.Real=Real*com.Real-Image*com.Image; /乘积实部multi.Image=Real*com.Image+Image*com.Real; /乘积虚部return multi; void Mul() /复数乘积函数user.nMul+;CComplex num1,num2,mul,Zero(0,0);cout乘法计算n最少输入两个复数,并且以零结束n;coutnum1;coutnum2;mul=num1*num2;coutnum1;int i=4;while(!(num1=Zero)mul*=num1;cout第inum1;i+;cout乘法结果

13、是:mulendl;cout请按任意键继续n;cout.flush();cin.get();cin.get();运行结果如下4.9除法功能的实现operator/+operator/(CComplex &com)dividedivide.Realdivide.Imagedivide.Realdivide.ImageCComplex CComplex:operator/(CComplex &com) / 除法重载CComplex divide;divide.Real=(Real*com.Real+Image*com.Image)/(com.Real*com.Real+com.Image *com

14、.Image); /除法实部divide.Image=(Image*com.Real-Real*com.Image )/(com.Real*com.Real+com.Image*com.Image); /除法虚部return divide; void Chu() /复数除法函数user.nchu+;CComplex cum1,cum2,chur,Zero(0,0);cout除法计算n最少输入两个复数,并且以零结束n;coutcum1;coutcum2;chur=cum1/cum2;coutcum1;int i=4;while(!(cum1=Zero)chur/=cum1;cout第icum1;

15、i+;cout除法结果是:churendl;coutnum1;+num1;cout自加的结果为num1endl;coutnum1;-num1;cout自减的结果为num1endl;coutint CComplex:operator(CComplex &com) /比较模的大小if(mod()com.mod()return 1;elsereturn 0;重载运算符int CComplex:operator(CComplex &com)if(mod()com.mod()return 1; /若大,则返回1elsereturn 0;void compare() /两复数比较函数CComplex nu

16、m1,num2;cout输入两个复数n;coutnum1;coutnum2;if(num1=num2)coutnum2)coutnum1的模大于num2的模n;else if(num1num2)coutnum2的模大于num1的模n;elsecout这两个复数的模相等n;cout按任意键继续n;cin.get();cin.get();运行结果如下4.13重载等于int CComplex:operator=(CComplex &com) if(Real=com.Real & Image=com.Image)return 1;elsereturn 0;4.14重载不等于int CComplex:o

17、perator!=(CComplex &com)/重载运算符!=,分别判断复数的实部和虚部if(*this=com)return 0;elsereturn 1;4.13用户资料保存函数void SaveFile()userprint();fstream file;User user1;file.open(user.dat,ios:binary|ios:in|ios:out);if(!file)coutn;return;file.seekp(0,ios:beg);while(!file.eof()file.read(char *)&user1,sizeof(User);if(strcmp(use

18、r1.szName,user.szName)=0)file.seekp(-(sizeof(User),ios:cur);file.write(char *)&user,sizeof(User);file.close();return;file.close();fstream outfile;outfile.open(user.dat,ios:binary|ios:app);outfile.write(char *)&user,sizeof(User);outfile.close();return;运行结果如下5.总结在整个系统的设计和制作过程中,让我领悟到,一个系统的完成,需要知识全方位的理解和掌握,还有团队的协作。在制作之初,我组每人都相对有一个侧重点,每个人负责一部分的代码设计,当然这也是在整体讨论的基础上分配的。大家也都认真的完成了。不过,制作当中遇到了不少的问题。比如我主要负责运算这方面的设计,当中就因为复数模缺少对象调用而无法输出显示,导致在这里卡了很久。但是,在重新的审阅和资料查找中,终于问题解决,程序也成功运行,心里觉得很有成就感,熬夜没有白费。参考文献1 马石安、魏文平 ,面向对象程序设计教程Z. 北京:清华大学出版社,2008.2 马石安、魏文平 ,面向对象程序设计教程题解与课程设计指导Z. 北京:清华大学出版社,2008.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1