




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 中南大学高级程序设计实践(C+)课程设计报告题 目 复数计算器 学生姓名 曾立弘 指导教师 陈丽萍 学 院 信息科学与工程学院 专业班级 电子信息工程 1401 班 完成时间 2015年6月8日 星期一 目录第一章 需求分析.第1页第二章 概要设计.第2页第三章 详细设计.第4页第四章 调试分析.第21页第五章 测试结果.第25页第六章 课程设计总结.第36页第七章 参考文献.第37页第八章 附录.第37页 C+程序设计之复数计算器 第一章 需求分析第一章 需求分析1.1程序设计的任务11.1编程目的1.本次程序设计的目的运用面向对象程序设计知识,利用C+语言设计和实现一个复数计算器,要求具
2、备如下主要功能:(1)建立实数类、复数类(2)实现实数、复数信息的初始化(3)实现实数的加、减、乘、除、自增、自减、求平方、二次方根等操作(4)实现复数的加、减、乘、除、取模、求平方、求共轭复数、求单个复数的向量角、求两个复数的夹角等运算(5)实现实数、复数信息的输出1.1.2编程要求在实现过程中,需利用面向对象程序设计理论的基础知识,充分体现出C+语言关于类、继承、封装与多态等核心概念,每一个类应包含数据成员和成员函数。1.1.3数据范围数据输入的形式为float型,输出形式亦是float型,数据(实数、复数的实部、虚部)范围是-2128 +2128,也即-3.40E+38 +3.40E+3
3、8。1.2本程序能实现的功能1.2.1实数类(Complex)所实现的功能:实数的加法运算、减法运算、乘法运算、除法运算、前置自增运算、后置自增运算、前置自减运算、后置自减运算、求平方运算、求平方根运算;1.2.2复数类(Complex1)所实现的功能:复数的加法运算、减法运算、乘法运算、除法运算、模长运算、求平方运算、共轭复数运算、求单个复数的向量角运算、求两个复数的夹角运算。1.2.3主函数所能实现的功能1.提供给操作者操作数据的类型(实数还是复数)的标识;2.操作者选择数据类型后,提供运算类型操作的标识;3.运用指针调用两个类的各成员函数分别完成各项计;第53页 C+程序设计之复数计算器
4、 第二章 概要设计 第二章 概要设计2.1构成部分2.1.1系统由三部分构成:实数类(Complex)、复数类(Complex1)、主函数main。2.1.2.构成部分关系复数类(Complex1)由实数类(Complex)派生而来,其中两者成员函数中的enter(输入数据)函数是虚函数,用以实现多态性。主函数main通过指针调用实数类(Complex)、复数类(Complex1)分别完成实数运算、复数运算。2.1.3.类层次实数类是父类,复数类是子类。2.2主程序流程以及程序模块之间的调用关系如图2.21所示:输入flag判断flag判断wflag=1flag=2实数运算复数运算判断v w=
5、3 w=4 w=5 w=6 w=12 v=3 v=4 v=5 v=6 v=11乘法运算减法运算加法运算求复数间夹角除法运算乘法运算减法运算加法运算求平方运算除法运算图2.2-1主程序流程以及程序模块之间的调用关系图注:图2.2-1中没有画出1. flag=0时退出系统;2. flag不等于0,1,2时出现错误提示语句的选择结构;3. w,v在选择范围之外时出现错误提示语句的选择结构。4. 特殊处理:除法运算分母为0;求二次方根数为负数;求单个复数夹角时判断象限的过程。 C+程序设计之复数计算器 第三章 详细设计 第三章 详细设计3.1类层次中各个类的描述3.1.1.实数类(Complex)私有
6、部分仅数据:float型数据 real;公共部分包括12个成员函数,分别是:类的构造函数:Complex()实数加法运算函数: Complex operator+(Complex &c1)实数减法运算函数:Complex operator-(Complex &c1)实数乘法运算函数:Complex operator*(Complex &c1)实数除法运算函数:Complex operator/(Complex &c1)实数前置自增函数:Complex operator+()实数后置自增函数:Complex operator+(int)实数前置自减函数:Compl
7、ex operator-()实数后置自减函数:Complex operator-(int)实数求平方根函数:float RootOfTwo()实数求平方函数:float Square()实数输入数据函数:virtual void enter()3.1.2.复数类(Complex1)私有部分仅数据成员float 型数据real和float 型数据imag,二者分别代表复数的实部和虚部;公共部分包含11个成员函数,分别是:类的构造函数:Complex1()复数加法运算函数:Complex1 operator+(Complex1 &c1)复数减法运算函数:Complex1 operator-
8、(Complex1 &c1)复数乘法运算函数: Complex1 operator*(Complex1 &c1)复数除法运算函数:Complex1 operator/(Complex1 &c1)复数求模长函数:float Length()复数求平方函数:Complex1 Square1()求共轭复数函数:Complex1 Conjugate()复数求角度函数:float Angle1()复数间求角度函数:float Angle2(Complex1 &c1)复数输入数据函数:void enter()3.2类中各成员函数的定义3.2.1实数类(Complex)1 类
9、的构造函数 函数体部分:Complex();2实数加法运算函数函数体部分Complex operator+(Complex &c1)Complex c;cout<<"the result is: "<<endl;c.real=real+c1.real;cout<<real<<"+"<<c1.real<<"="<<c.real<<endl;return c;3实数减法运算函数函数体部分Complex operator-(Complex
10、 &c1)Complex c;cout<<"the result is: "<<endl;c.real=real-c1.real;cout<<real<<"-"<<c1.real<<"="<<c.real<<endl;return c;4实数乘法运算函数函数体部分Complex operator*(Complex &c1)Complex c;c.real=real*c1.real;cout<<"the
11、result is: "<<endl;cout<<real<<"*"<<c1.real<<"="<<c.real<<endl;return c;5实数除法运算函数函数体部分Complex operator/(Complex &c1)Complex c;cout<<"the result is: "<<endl;c.real=real/c1.real;cout<<real<<"/
12、"<<c1.real<<"="<<c.real<<endl;return c;6实数前置自增函数函数体部分Complex operator+() cout<<"the result is: "<<endl;cout<<"+"<<real;+real;cout<<"="<<real<<endl;return *this;7实数后置自增函数函数体部分Complex operato
13、r+(int)Complex temp(*this);cout<<"the result is: "<<endl;cout<<real<<"+"real+;cout<<"="<<real-1<<endl;cout<<real<<endl;return temp;8实数前置自减函数函数体部分Complex operator-()cout<<"the result is: "<<endl;
14、cout<<"-"<<real;-real;cout<<"="<<real<<endl;return *this;9实数后置自减函数函数体部分Complex operator-(int)Complex temp(*this);cout<<"the result is: "<<endl;cout<<real<<"-"real-;cout<<"="<<real+1<
15、;<endl;cout<<real<<endl;return temp;10实数求平方根函数函数体部分float RootOfTwo()Complex c;if(real<0)cout<<"the number is wrong!"<<endl;elsecout<<"the result is: "<<endl;c.real=sqrt(real);cout<<"sqrt"<<real<<"="&l
16、t;<c.real<<endl;return c.real;11实数求平方函数函数体部分float Square()Complex c;cout<<"the result is: "<<endl;c.real=real*real;cout<<"square"<<real<<"="<<c.real<<endl;return c.real;12实数输入数据函数(虚函数)函数体部分virtual void enter()cin>>
17、;real;3.2.2复数类(Complex1) 1.类的构造函数 函数体部分 Complex1(); 2. 复数加法运算函数函数体部分Complex1 operator+(Complex1 &c1)Complex1 c;cout<<"the result is: "<<endl;c.real=real+c1.real;c.imag=imag+c1.imag;cout<<"("<<real<<"+"<<imag<<"j"&l
18、t;<")"<<"+"<<"("<<c1.real<<"+"<<c1.imag<<"j"<<")"<<"="<<"("<<c.real<<"+"<<c.imag<<"j"<<")"<<endl;
19、return c;3复数减法运算函数函数体部分Complex1 operator-(Complex1 &c1)Complex1 c;cout<<"the result is: "<<endl;c.real=real-c1.real;c.imag=imag-c1.imag;cout<<"("<<real<<"+"<<imag<<"j"<<")"<<"-"<&
20、lt;"("<<c1.real<<"+"<<c1.imag<<"j"<<")"<<"="<<"("<<c.real<<"+"<<c.imag<<"j"<<")"<<endl;return c;4复数乘法运算函数函数体部分Complex1 operator*(Com
21、plex1 &c1)Complex1 c;cout<<"the result is: "<<endl;c.real=real*c1.real-imag*c1.imag;c.imag=real*c1.imag+imag*c1.real;cout<<"("<<real<<"+"<<imag<<"j"<<")"<<"*"<<"("<
22、;<c1.real<<"+"<<c1.imag<<"j"<<")"<<"="<<"("<<c.real<<"+"<<c.imag<<"j"<<")"<<endl;return c;5.复数除法运算函数函数体部分Complex1 operator/(Complex1 &c1)Comp
23、lex1 c;cout<<"the result is: "<<endl;c.real=(real*c1.real+imag*c1.imag)/(c1.real*c1.real+c1.imag*c1.imag);c.imag=(imag*c1.real-real*c1.imag)/(c1.real*c1.real+c1.imag*c1.imag);cout<<"("<<real<<"+"<<imag<<"j"<<&quo
24、t;)"<<"/"<<"("<<c1.real<<"+"<<c1.imag<<"j"<<")"<<"="<<"("<<c.real<<"+"<<c.imag<<"j"<<")"<<endl;return c;6
25、.复数求模长函数函数体部分float Length()float x;cout<<"the result is: "<<endl;x=sqrt(real*real+imag*imag);cout<<"|"<<real<<"+"<<imag<<"j"<<"|"<<"="<<x<<endl;return x;7.复数求平方函数函数体部分Complex
26、1 Square1()Complex1 c;cout<<"the result is: "<<endl;c.real=real*real-imag*imag;c.imag=real*imag+imag*real;cout<<" the square of "<<"("<<real<<"+"<<imag<<"j"<<")"<<" is "&
27、lt;<"("<<c.real<<"+"<<c.imag<<"j"<<")"<<endl;return c;8.求共轭复数函数函数体部分Complex1 Conjugate()Complex1 c;cout<<"the result is: "<<endl;c.real=real;c.imag=imag*(-1);if(c.imag>=0)cout<<"conjuga
28、te complex number of"<<"("<<real<<"+"<<imag<<"j"<<")"<<" is "<<"("<<c.real<<"+"<<c.imag<<"j"<<")"<<endl;if(c.imag<0)co
29、ut<<"conjugate complex number of"<<"("<<real<<"+"<<imag<<"j"<<")"<<" is "<<"("<<c.real<<c.imag<<"j"<<")"<<endl;return c;8.复数求角
30、度函数函数体部分float Angle1()float y;cout<<"the result is: "<<endl;y=atan(imag)/(real)/i*180;if(real=0&&imag!=0)cout<<"the angle of" <<"("<<real<<"+"<<imag<<"j"<<")"<<" is &q
31、uot; <<90<<endl;if(real>0)cout<<"the angle of" <<"("<<real<<"+"<<imag<<"j"<<")"<<" is " <<y<<endl;if(real<0&&imag>0)cout<<"the angle of"
32、; <<"("<<real<<"+"<<imag<<"j"<<")"<<" is " <<y+180<<endl;if(real<0&&imag<0)cout<<"the angle of" <<"("<<real<<"+"<<imag<
33、<"j"<<")"<<" is " <<y-180<<endl;return y;9.复数间求角度函数函数体部分float Angle2(Complex1 &c1)float z,r,s,t;cout<<"the result is: "<<endl;r=(real*c1.real+imag*c1.imag);s=sqrt(real*real+imag*imag);t=sqrt(c1.real*c1.real+c1.imag*c1
34、.imag);z=acos(r/(s*t)/i*180;cout<<"the angle between"<<" ("<<real<<"+"<<imag<<"j"<<") "<<"and" <<" ("<<c1.real<<"+"<<c1.imag<<"j"<
35、;<") "<<" is " <<z<<endl;return z;10.复数输入数据函数(虚函数)函数体部分void enter()cin>>real;cin>>imag;cout<<endl;3. 3主程序和重要模块的算法3.3.1主程序和重要模块具体代码如下: int main() /主函数 int flag,w,v;Complex grad1,grad2;Complex *pt1,*pt2;Complex1 *pm1,*pm2;Complex1 revd1,revd2;
36、cout<<"姓名: 曾立弘"<<endl;cout<<"专业: 电气信息工程"<<endl;cout<<"班级: 1401班"<<endl;cout<<"学号: 0903140114"<<endl;while(flag!=0) /while循环 ,flag=0时终止循环 pt1=&grad1;pt2=&grad2;cout<<"Please choose the type of t
37、he numbers:"<<endl;cout<<"'0'-exit system"<<endl; cout<<"'1'-real number"<<endl; cout<<"'2'-plural number"<<endl; cin>>flag; if(flag=1) /条件语句:如果flag=1,则进行实数运算 cout<<"please choose th
38、e operation of the numbers:"<<endl;cout<<"'3'-'+'"<<endl;cout<<"'4'-'-'"<<endl;cout<<"'5'-'*'"<<endl;cout<<"'6'-'/'"<<endl;cout<<&q
39、uot;'7'-'+'"<<endl;cout<<"'8'-'-'"<<endl;cout<<"'9'-'+(int)'"<<endl;cout<<"'10'-'-(int)'"<<endl;cout<<"'11'-'root of two'"<&
40、lt;endl;cout<<"'12'-'square'"<<endl;cin>>w;if(w=3)cout<<"please enter first number: "pt1->enter();cout<<endl;cout<<"please enter second number: "pt2->enter();cout<<endl;pt1->operator+(grad2);if(w=4)cout&
41、lt;<"please enter first number: "pt1->enter();cout<<endl;cout<<"please enter second number: "pt2->enter();cout<<endl;pt1->operator-(grad2);if(w=5)cout<<"please enter first number: "pt1->enter();cout<<endl;cout<<"pl
42、ease enter second number: "pt2->enter();cout<<endl;pt1->operator*(grad2);if(w=6)cout<<"please enter first number: "pt1->enter();cout<<endl;cout<<"please enter second number: "pt2->enter();cout<<endl;pt1->operator/(grad2);if(w=7)co
43、ut<<"please enter the number: "pt1->enter();pt1->operator+();if(w=8)cout<<"please enter the number: "pt1->enter();pt1->operator-();if(w=9)cout<<"please enter the number: "pt1->enter();grad1+;if(w=10)cout<<"please enter the num
44、ber: "pt1->enter();grad1-;if(w=11)cout<<"please enter the number: "pt1->enter();pt1->RootOfTwo();if(w=12)cout<<"please enter the number: "pt1->enter();pt1->Square();if(w!=3&&w!=4&&w!=5&&w!=6&&w!=7&&w!=8&&
45、amp;w!=9&&w!=10&&w!=11&&w!=12)cout<<"please choose correct option!"<<endl; /出错提示pt1=&revd1;pt2=&revd2;pm1=&revd1;pm2=&revd2;if(flag=2) /条件语句:如果flag=1,则进行实数运算 cout<<"please choose the operation of the numbers:"<<endl;
46、cout<<"'3'-'+'"<<endl;cout<<"'4'-'-'"<<endl;cout<<"'5'-'*'"<<endl;cout<<"'6'-'/'"<<endl;cout<<"'7'-'Length'"<<
47、endl;cout<<"'8'-'Square1'"<<endl;cout<<"'9'-'Conjugate'"<<endl;cout<<"'10'-'Angle1'"<<endl;cout<<"'11'-'Angle2'"<<endl;cin>>v;if(v=3)cout<&
48、lt;"please enter first number: "pt1->enter();cout<<endl;cout<<"please enter second number: "pt2->enter();cout<<endl;pm1->operator+(revd2);if(v=4)cout<<"please enter first number: "pt1->enter();cout<<endl;cout<<"please
49、 enter second number: "pt2->enter();cout<<endl;pm1->operator-(revd2);if(v=5)cout<<"please enter first number: "pt1->enter();cout<<endl;cout<<"please enter second number: "pt2->enter();cout<<endl;pm1->operator*(revd2);if(v=6)cout&l
50、t;<"please enter first number: "pt1->enter();cout<<endl;cout<<"please enter second number: "pt2->enter();cout<<endl;pm1->operator/(revd2);if(v=7)cout<<"please enter the number: "pt1->enter();cout<<endl;pm1->Conjugate();if(
51、v=8)cout<<"please enter the number: "pt1->enter();cout<<endl;pm1->Square1();if(v=9)cout<<"please enter the number: "pt1->enter();cout<<endl;pm1->Conjugate();if(v=10)cout<<"please enter the number: "pt1->enter();cout<<en
52、dl;pm1->Angle1();if(v=11)cout<<"please enter first number: "pt1->enter();cout<<endl;cout<<"please enter second number: "pt2->enter();cout<<endl;pm1->Angle2(revd2);if(v!=3&&v!=4&&v!=5&&v!=6&&v!=7&&v!=8&
53、;&v!=9&&v!=10&&v!=11)cout<<"please choose correct option!"<<endl; /出错提示 if(flag!=1&&flag!=2&&flag!=0)cout<<"please choose correct option!"<<endl; /出错提示if(flag!=0) cout<<"n" cout<<"Please carry
54、out the next operation:"<<endl;/继续运算提示 cout<<"n" cout<<"Welcome next time!"<<endl;return 0;3.4函数调用关系图3.4.1函数调用关系图如图3.41所示 flag!=00 其他 输入w ,w=? exit error 输入v,v=?3 4 5 6 7 8 9 10 11 12 输出 “please choose correct option!”“ 输入flagfloat Length()Complex1 Co
55、njugate()float Angle1()Complex operator+()Complex1 operator+(Complex1 &c1)Complex1 operator-(Complex1 &c1)Complex1 operator*(Complex1 &c1)Complex1 operator/(Complex1 &c1) float Angle2(Complex1 &c1) float Square() float RootOfTwo() Complex operator-(int) Complex operator/(Complex
56、&c1) Complex operator*(Complex &c1) Complex operator-(Complex &c1) Complex operator+(Complex &c1)其他 11 10 9 8 7 6 5 4 3flag=2 复数运算flag=1 实数运算 Complex operator+(int) 3 4 5 6 7 8 9 10 11 12 其他 Complex operator-() Complex1 Conjugate() C+程序设计之复数计算器 第四章 调试分析 第四章 调试分析4.1调试过程遇到的问题及解决方法的得出过程
57、4.1.1问题及分析过程 1. 对输出结果的界面没有太注意,导致输出结果不是很美观; 2. 对字母的拼写错误,导致前面定义的变量到后面编译器不认识;对固有写法的拼写错误,如将运算符重载函数写为operetor,导致运算符重载不成功。 3.对一些模块的编写代码缺乏系统分析,主要体现在以下几个方面: (1)实数除法重载函数中没有考虑分母为0的情况,增加了if条件语句讨论; (2)实数求二次方根函数中没有考虑被开方数为负数的情况增加了if条件语句讨论; (3)求单个复数的向量角时没有将弧度制转化为角度制,定义了全局常变量i=3.1415927,通过弧度值除以i再乘以180将其转化为角度值; 求单个复
58、数的向量角时没有考虑象限的讨论,最后加了if选择结构讨论; 求单个复数的向量角时没有分母(即实部real)为0的情况,增加了if条件语句讨论; 具体讨论程序如下(实部为real,虚部为 imag): float Angle1() /求单个复数的夹角度数 float y;cout<<"the result is: "<<endl;y=atan(imag)/(real)/i*180;if(real=0&&imag!=0)cout<<"the angle of" <<"("&l
59、t;<real<<"+"<<imag<<"j"<<")"<<" is " <<90<<endl;if(real>0)cout<<"the angle of" <<"("<<real<<"+"<<imag<<"j"<<")"<<&
60、quot; is " <<y<<endl;if(real<0&&imag>0)cout<<"the angle of" <<"("<<real<<"+"<<imag<<"j"<<")"<<" is " <<y+180<<endl;if(real<0&&imag<0)co
61、ut<<"the angle of" <<"("<<real<<"+"<<imag<<"j"<<")"<<" is " <<y-180<<endl;return y; (4)在调用虚函数时,修改之前是基类指针指向子类指针的这一步骤写在基类、子类的定义部分,导致下面先调用基类虚函数,后调用子类虚函数时会出现调用的时同一部分,即基类的数据。修改后时将基类指针指向子类指针的这一步骤写在调用基类虚函数和调用子类虚函数之间,从而实现了虚函数和多态性。(5)为使程序可以连续运算而不是每算一次就得重新运行使用了while 循环,初始时将对象的地址赋给指针这一步骤写在while 循环之外,发现经过多次循环后指针所指的对象已经不是原来的了,为使指针总是指向要求的对象,就必须在每一次循环开始时将其重新定位,即指向对象的开头。综上述原因,最后将将对象的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 白银希望职业技术学院《大数据算法》2023-2024学年第二学期期末试卷
- 基于语义网的多模态文本理解与生成-洞察阐释
- 中国厨师上门O2O行业市场集中度、企业竞争格局分析报告-智研咨询发布
- 普速列车长高水平人员应知答练习试题及答案
- 课件保险公司综合业务实训(第二版)第四章 保险的投保和核保
- DB13T 2956-2019 空气净化用活性炭和活性炭包通 用技术要求
- 中级数据库考试试题及答案
- DB13T 3010-2018 冷链物流 冷库技术规范
- 巴音郭楞职业技术学院《专业技能与实践》2023-2024学年第二学期期末试卷
- 志工部笔试题目及答案
- 业主大会(业主委员会)规范化建设指导手册
- 工程建设平移合同范本
- 2024年上海市初中学业水平考试物理中考试卷真题(含答案详解)
- (高清版)JTST 272-2-2023 内河航运工程造价指标
- 架空输电线路环境影响评估与治理
- 桥台桩基础设计计算书
- 免拆底模钢筋桁架楼承板图集
- 桡动脉闭塞的护理查房
- 特种设备“日管控、周排查、月调度”表格
- 24春国家开放大学《教育法学》终结性考试(大作业)参考答案
- 《神笔马良》课本剧剧本
评论
0/150
提交评论