复数计算器实验_第1页
复数计算器实验_第2页
复数计算器实验_第3页
复数计算器实验_第4页
复数计算器实验_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、复数计算器中南大学高级程序设计实践(C+)课程设计报告题 目 复数计算器 学生姓名 指导教师 陈丽萍 学 院 信息科学与工程学院 专业班级 通信工程1301班 完成时间 2014年7月5日 第一章 需求分析与程序设计1.1 需求分析 111程序设计的目的与任务1复习和巩固C+语言的基础知识,进一步加深对C+语言的理解和掌握。2为学生提供独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生独立分析问题、解决问题、查阅资料以及自学能力。3学习和掌握C+程序设计方法以及上机调试技巧,为今后学习其它专业课程打好基础。4在程序实现过程中,需利用面向对象程序设计理论的基础知识,充分体现出C+语

2、言关于类、继承、封装与多态等核心概念,每一个类应包含数据成员和成员函数,以实现预期的功能,解决实际问题。112“复数计算器”程序所能实现的功能 1建立实数类、复数类,复数类由实数类公有继承而来。2实现实数、复数信息的初始化。3通过选择结构和调用相关函数实现实数的相关运算,包括:两个实数间的加、减、乘、除和一个实数的自增、自减、求平方、二次方根等运算。4通过选择结构和调用相关函数实现复数的相关运算,包括:两个复数间的加、减、乘、除、求两个复数的夹角和一个复数的取模、求平方、求共轭复数、求单个复数的向量角等运算。5通过调用相关函数实现实数、复数信息的输出,显示在显示屏上。6通过多次运用选择和循环结

3、构实现对实数、复数运算的选择,在选择了实数或复数运算的前提下,再实现对各种运算的选择,运算结束后还可以选择继续实现其它运算或退出程序。1.2 程序设计121概要设计 1系统中的各个实体及它们之间的关系 系统中的实体是实数类对象和复数类对象,它们的关系是复数类对象所属的类是由实数类对象所属的类公有派生而来的。2系统的类层次程序中建立了两个类,分别是实数类、复数类,复数类是由实数类公有派生而来的。3主程序的流程以及各程序模块之间的层次(调用)关系首先从键盘输入数字1或2或0,输入不同数字则进入不同的并列的小程序模块。若输入1,则进行实数相关运算,再输入1-8选择具体运算,此时会调用实数类中的相关成

4、员函数,运算出正确结果,运算结束后,则会进入循环结构,进行下一次选择及运算。若输入2,则进行复数相关运算,再输入1-9选择具体运算,此时会调用复数类中的相关成员函数,运算出正确结果,运算结束后,则会进入循环结构,进行下一次选择及运算。若输入0,则将退出复数计算器系统。122详细设计1类层次中各个类的描述实数类数据成员(都属于保护数据成员):double real成员函数(都属于公有成员函数):构造函数:Simple() Simple(double r)相加函数:double jia(Simple &s2) 相减函数:double jian(Simple &s2)相乘函数:dou

5、ble cheng(Simple &s2)相除函数:double chu(Simple &s2)自加函数:double zijia()自减函数:double zijian()平方函数:double pingfang()二次方根函数:double kaifang()输入函数:void input()输出函数:double output() 复数类 数据成员(都属于私有数据成员):double imag 成员函数(都属于公有成员函数): 构造函数:Complex() Complex(double r,double i) 重载“+”函数:Complex operator+(Compl

6、ex &c2) 重载“-”函数:Complex operator-(Complex &c2) 重载“/”函数:Complex operator*(Complex &c2) 重载“*”函数:Complex operator/(Complex &c2) 输入函数:void setnumber() 取模函数:double qumo() 平方函数:Complex pf() 取共轭复数函数:Complex gonge() 求向量角函数:double xiangliangjiao() 求夹角函数:double jiajiao(Complex &c2) 重载“<

7、<”函数: friend ostream&operator<<(ostream&output,Complex&c)2 类中各个成员函数的定义实数类中成员函数定义:Simple()double real=0.0;/构造函数Simple(double r)real=r;/构造函数double jia(Simple &s2)/两个实数相加函数double a; a=real+s2.real;return a;double jian(Simple &s2)/两个实数相减函数double a;a=real-s2.real;return a;dou

8、ble cheng(Simple &s2)/两个实数相乘函数double a;a=(real)*(s2.real);return a;double chu(Simple &s2)/两个实数相除函数double a;a=(real)/(s2.real);return a;double zijia()/一个实数自加函数double a;a=+real;return a;double zijian()/一个实数自减函数double a;a=-real;return a;double pingfang()/一个实数的平方函数double a;a=(real)*(real);return

9、 a;double kaifang()/一个实数的二次方根函数double a;a=sqrt(real);return a;void input()/实数的输入函数cout<<"请输入一个实数:"<<""cin>>real; double output()/实数的输出函数return real;复数类中成员函数定义:Complex()real=0.0;imag=0.0;/构造函数Complex(double r,double i)real=r;imag=i;/构造函数void setnumber()/复数的输入函数co

10、ut<<"请输入一个复数的实部:"<<""cin>>real;cout<<"请输入一个复数的虚部:"<<""cin>>imag;Complex operator+(Complex &c2)/重载"+"用于两复数相加Complex c;c.real=real+c2.real;c.imag=imag+c2.imag;return c;Complex operator-(Complex &c2)/重载"-

11、"用于两复数相减Complex c;c.real=real-c2.real;c.imag=imag-c2.imag;return c;Complex operator*(Complex &c2)/重载"*"用于两复数相乘Complex c;c.real=real*c2.real-imag*c2.imag;c.imag=real*c2.imag+imag*c2.real;return c;Complex operator/(Complex &c2)/重载"/"用于两复数相除Complex c;c.real=(real*c2.rea

12、l+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);return c;double qumo()/一个复数取模函数double a;a=sqrt(real*real+imag*imag);return a;Complex pf()/一个复数的平方函数Complex c;c.real=real*real-imag*imag;c.imag=2*real*imag;return c;Complex gonge()/一

13、个复数的共轭复数函数Complex c;c.real=real;c.imag=0-imag;return c;double xiangliangjiao()/单个复数的向量角函数double a;a=atan(imag/real)*57.295;return a;double jiajiao(Complex &c2)/两个复数的夹角函数double a;a=fabs(atan(imag/real)*57.295-(atan(c2.imag/c2.real)*57.295 return a;friend ostream&operator<<(ostream&o

14、utput,Complex&c)/重载"<<"用于复数的输出output<<c.real;if(c.imag>=0)output<<"+"output<<c.imag<<"i"<<endl;return output;3 主程序和重要模块的算法调试程序后,显示屏会显示文字提醒计算器使用者输入数字0或1或2,使用者需根据提示输入相关数据。部分相关程序代码如下:cout<<"【欢迎使用复数运算器】"<<endl

15、;gg: cout<<"请输入0或1或2"<<endl; cout<<"【0】退出复数计算器;"<<endl;cout<<"【1】进行实数相关运算;"<<endl;cout<<"【2】进行复数相关运算:"<<""cin>>a;若计算器使用者输入1,则选择了实数的相关运算,系统会提示输入数字1-8,1-8分别对应两个实数间的相加、相减、相乘、相除和一个实数的自加、自减、平方、二次方根等运算,

16、使用者需根据提示输入1-8,再从键盘输入一个或两个实数,按回车键后即可得到正确结果。部分相关程序代码如下:if(a=1)cout<<"1.相加 2.相减 3.相乘 4.相除 (两个实数间的运算)"<<endl;cout<<"5.自加 6.自减 7.平方 8.二次方根 (一个实数的运算)"<<endl;cout<<"输入数字1-8进行选择:"<<""cin>>b;if(b=1|b=2|b=3|b=4)cout<<"

17、;请输入2个实数:"<<""<<""<<endl;s1.input();s2.input();cout<<"第1个实数是:"<<s1.output()<<endl;cout<<"第2个实数是:"<<s2.output()<<endl;switch(b)case 1:cout<<"相加结果是:"<<s1.jia(s2)<<endl;break;c

18、ase 2:cout<<"相减结果是:"<<s1.jian(s2)<<endl;break;case 3:cout<<"相乘结果是:"<<s1.cheng(s2)<<endl;break;case 4:cout<<"相除结果是:"<<s1.chu(s2)<<endl;break;default:cout<<"error"<<endl;break;cout<<endl;if(

19、b=5|b=6|b=7|b=8)cout<<"请输入1个实数:"<<""<<endl;s1.input();cout<<"输入的实数是:"<<s1.output()<<endl;switch(b)case 5:cout<<"自加结果是:"<<s1.zijia()<<endl;break;case 6:cout<<"自减结果是:"<<s1.zijian()<&l

20、t;endl;break;case 7:cout<<"平方结果是:"<<s1.pingfang()<<endl;break;case 8:cout<<"二次方根是:"<<s1.kaifang()<<endl;break;default:cout<<"error"<<endl;break;cout<<endl;goto gg;若计算器使用者输入2,则选择了复数的相关运算,系统会提示输入数字1-9,1-9分别对应两个复数间的相加、相

21、减、相乘、相除、夹角和一个复数的取模、平方、向量角、共轭复数等运算,使用者需根据提示输入1-9,再通过从键盘键入分别输入实部和虚部输入一个或两个复数,按回车键后即可得到正确结果。部分相关程序代码如下:if(a=2)cout<<"1.相加 2.相减 3.相乘 4.相除 5.两个复数的夹角 (两个复数间的运算)"<<endl;cout<<"6.取模 7.平方 8.一个复数的向量角 9.共轭复数 (一个复数的运算)"<<endl;cout<<"输入数字1-9进行选择:"<&l

22、t;""cin>>b;if(b=1|b=2|b=3|b=4|b=5)cout<<"请输入2个复数:"<<""<<""<<endl;c1.setnumber();c2.setnumber();cout<<"第1个复数是:"<<c1;cout<<"第2个复数是:"<<c2;switch(b)case 1:cout<<"相加结果是:"<&

23、lt;c1+c2<<endl;break;case 2:cout<<"相减结果是:"<<c1-c2<<endl;break;case 3:cout<<"相乘结果是:"<<c1*c2<<endl;break;case 4:cout<<"相除结果是:"<<c1/c2<<endl;break;case 5:cout<<"这两个复数的夹角是:"<<c1.jiajiao(c2)<

24、;<"°"<<endl;break;default:cout<<"error"<<endl;break;cout<<endl;if(b=6|b=7|b=8|b=9)cout<<"请输入1个复数:"<<""<<endl;c1.setnumber();cout<<"输入的复数是:"<<c1;switch(b)case 6:cout<<"取模结果是:&quo

25、t;<<c1.qumo()<<endl;break; case 7:cout<<"平方结果是:"<<c1.pf()<<endl;break;case 8:cout<<"该复数的向量角是:"<<c1.xiangliangjiao()<<"°"<<endl;break;case 9:cout<<"该复数的共轭复数是:"<<c1.gonge()<<endl;break;

26、default:cout<<"error"<<endl;break;cout<<endl;goto gg;若计算器使用者输入0,再按任意键后,即可退出复数计算器。此过程是通过运用if判断语句和switch选择语句而实现的。部分相关程序代码如下:if(a=0) cout<<"【谢谢使用!按任意键后,您将退出复数计算器】"<<endl;exit(0);若第一次计算器使用者输入1或2且一次运算结束后,系统会再次提醒输入0或1或2,即可进行下一次运算;若第一次计算器使用者输入0,则会退出系统。此过程是通

27、过运用goto循环语句和if判断语句而实现的。4 程序运行的流程图(鉴于程序中用到if判断语句和switch循环语句,流程图中会有较多分支,所以此流程图将会以三部分的形式呈现)从键盘输入数字0或1或2输入1输入2输入034退出程序 图1 程序图分图1 输入1输入数字1-8876543321调用1次实数输入函数,1次输出函数,1次二次方根函数调用1次实数输入函数,1次输出函数,1次平方函数调用1次实数输入函数,1次输出函数,1次相减函数调用1次实数输入函数,1次输出函数,1次自加函数调用2次实数输入函数,2次输出函数,1次相除函数调用2次实数输入函数,2次输出函数,1次相乘函数调用2次实数输入函

28、数,2次输出函数,1次相减函数调用2次实数输入函数,2次输出函数,1次相加函数输出结果3 图2 程序图分图2 输入2输入数字1-99876543321调用1次复数输入函数,1次求共轭复数函数调用2次复数输入函数,1次复数相加函数调用2次复数输入函数,1次复数相减函数调用2次复数输入函数,1次求两复数夹角函数调用2次复数输入函数,1次复数相乘函数调用1次复数输入函数,1次求单个复数向量角函数调用1次复数输入函数,1次复数平方函数调用1次复数输入函数,1次取模函数调用2次复数输入函数,1次复数相乘函数输出结果4 图3 程序图分图3 第二章 调试与总结2.1 调试分析与测试结果2.1.1调试过程中遇

29、到的问题及解决方法 1调试出现错误 调试过程中出现错误,不能正常运行,经检查后发现是代码中包含的sqrt函数,fabs函数,atan函数没有定义,在头文件中加上#include<cmath>即可正常运行。 2运算结果不正确 调试过程中,当算一个复数的向量角时,算出的度数不对,经认真检查后,发现是没有将弧度转化为度数,只需在原始结果后乘57.295即可得到正确结果。 当算两个复数的夹角时,有时运行结果出现负角,但两个复数的夹角不可能是负的,经仔细思考后,在原始结果前加fabs取绝对值,即可得到正确结果。 3循环结构不恰当 调试过程中,刚开始每进行一种运算后,就会退出系统,若想要进行下

30、一次运算,必须重新调试,这样不太方便,最终经过思考,我在main函数中加入了一个goto循环结构和exit退出语句,有了这些修改后,在每次运算结束后,可以选择继续进行下一次运算,或是退出系统,这样比较方便。2.1.2测试结果(鉴于许多运算功能原理相似,以下只列出部分功能的测试结果) 1.求两个实数相乘的结果:2. 求一个实数自减的结果3. 求一个实数平方的结果:4. 求一个实数的二次方根:5. 求两个复数相除的结果:6. 求两个复数的夹角:7. 求一个复数的模:8.求一个复数的向量角:9. 求一个复数的共轭复数:22课程设计总结2.2.1课设总结在这次程序设计的过程中,我遇到了很多问题,同时也

31、收获了不少,成长了不少。一拿到题目我就非常紧张,害怕自己做不出来,焦虑的情绪让我浪费了好多时间,这让我懂得在生活中遇到问题时,要有良好的心态,一定要镇定自若,千万不能惊慌失措。当我花了好久,终于辛辛苦苦设计出了算法,编写好程序,可是当调试时,出现了很多问题,如:调试过程中出现错误,程序不能正常运行,经认真检查和思考后发现是头文件中缺少#include<cmath>;还有调试过程中,当算一个复数的向量角时,算出的度数不对,经认真检查后,发现是没有将弧度转化为度数,只需在原始结果后乘57.295即可得到正确结果;当算两个复数的夹角时,有时运行结果出现负角,但两个复数的夹角不可能是负的,

32、经仔细思考后,在原始结果前加fabs取绝对值,即可得到正确结果;还有调试过程中,刚开始每进行一种运算后,就会退出系统,若想要进行下一次运算,必须重新调试,这样不太方便,最终经过思考,我在main函数中加入了一个goto循环结构和exit退出语句,有了这些修改后,在每次运算结束后,可以选择继续进行下一次运算,或是退出系统,这样比较方便。回头检查错误,修改程序的过程,又让我花费了好多时间和精力,这让我知道做任何事都要有严谨的态度,并考虑到结果。在完善程序的过程中,我也学会了如何快速寻找错误并改正,还让我做任何事更有耐心。当我遇到问题不能自己独立解决时,我求助了同学,这也让我深刻懂得,在必要的时候我

33、们可以求助他人,同样可以得到好的结果,但大部分还是要靠自己的力量解决问题。在这次课程设计中,我设计了一个较大的程序后,我对书本上的理论知识有了更全面、深刻的理解,同时也锻炼了我的动手能力、实践能力、将课本知识运用到实际生活中的能力。虽然这次程序设计的过程很艰难,但最终我成功了,我觉得一切的努力都是值得的。 第三章 参考文献 1C+程序设计 2C+程序设计实验上机与指导 第四章 附录#include<iostream.h>#include<string>#include<cmath>class Simpleprotected:double real;publi

34、c:Simple()double real=0.0;/构造函数Simple(double r)real=r;/构造函数double jia(Simple &s2)/两个实数相加函数double a; a=real+s2.real; return a;double jian(Simple &s2)/两个实数相减函数double a;a=real-s2.real;return a;double cheng(Simple &s2)/两个实数相乘函数double a;a=(real)*(s2.real);return a;double chu(Simple &s2)/两

35、个实数相除函数double a;a=(real)/(s2.real);return a;double zijia()/一个实数自加函数double a;a=+real;return a;double zijian()/一个实数自减函数double a;a=-real;return a;double pingfang()/一个实数的平方函数double a;a=(real)*(real);return a;double kaifang()/一个实数的二次方根函数double a;a=sqrt(real);return a;void input()/实数的输入函数cout<<"

36、;请输入一个实数:"<<""cin>>real;double output()/实数的输出函数return real;class Complex:public Simpleprivate:double imag;public:Complex()real=0.0;imag=0.0;/构造函数Complex(double r,double i)real=r;imag=i;/构造函数void setnumber()/复数的输入函数cout<<"请输入一个复数的实部:"<<""cin&

37、gt;>real;cout<<"请输入一个复数的虚部:"<<""cin>>imag;Complex operator+(Complex &c2)/重载"+"用于两复数相加Complex c;c.real=real+c2.real;c.imag=imag+c2.imag;return c;Complex operator-(Complex &c2)/重载"-"用于两复数相减Complex c;c.real=real-c2.real;c.imag=imag-c2

38、.imag;return c;Complex operator*(Complex &c2)/重载"*"用于两复数相乘Complex c;c.real=real*c2.real-imag*c2.imag;c.imag=real*c2.imag+imag*c2.real;return c;Complex operator/(Complex &c2)/重载"/"用于两复数相除Complex c;c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);c.imag=

39、(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);return c;double qumo()/一个复数取模函数double a;a=sqrt(real*real+imag*imag);return a;Complex pf()/一个复数的平方函数Complex c;c.real=real*real-imag*imag;c.imag=2*real*imag;return c;Complex gonge()/一个复数的共轭复数函数Complex c;c.real=real;c.imag=0-imag;return c;do

40、uble xiangliangjiao()/单个复数的向量角函数double a;a=atan(imag/real)*57.295;return a;double jiajiao(Complex &c2)/两个复数的夹角函数double a;a=fabs(atan(imag/real)*57.295-(atan(c2.imag/c2.real)*57.295);return a;friend ostream&operator<<(ostream&output,Complex&c)/重载"<<"用于复数的输出output

41、<<c.real;if(c.imag>=0)output<<"+"output<<c.imag<<"i"<<endl;return output;int main() Simple s1,s2;Complex c1,c2;int a,b;cout<<"【欢迎使用复数运算器】"<<endl; gg: cout<<"请输入0或1或2"<<endl;cout<<"【0】退出复数计算器;&

42、quot;<<endl;cout<<"【1】进行实数相关运算;"<<endl;cout<<"【2】进行复数相关运算:"<<"" cin>>a;if(a=1)cout<<"1.相加 2.相减 3.相乘 4.相除 (两个实数间的运算)"<<endl;cout<<"5.自加 6.自减 7.平方 8.二次方根 (一个实数的运算)"<<endl;cout<<"输入数

43、字1-8进行选择:"<<""cin>>b;if(b=1|b=2|b=3|b=4)cout<<"请输入2个实数:"<<""<<""<<endl;s1.input();s2.input();cout<<"第1个实数是:"<<s1.output()<<endl;cout<<"第2个实数是:"<<s2.output()<<endl;

44、switch(b)case 1:cout<<"相加结果是:"<<s1.jia(s2)<<endl;break;case 2:cout<<"相减结果是:"<<s1.jian(s2)<<endl;break;case 3:cout<<"相乘结果是:"<<s1.cheng(s2)<<endl;break;case 4:cout<<"相除结果是:"<<s1.chu(s2)<<end

45、l;break;default:cout<<"error"<<endl;break;cout<<endl;if(b=5|b=6|b=7|b=8)cout<<"请输入1个实数:"<<""<<endl;s1.input();cout<<"输入的实数是:"<<s1.output()<<endl;switch(b)case 5:cout<<"自加结果是:"<<s1.ziji

46、a()<<endl;break;case 6:cout<<"自减结果是:"<<s1.zijian()<<endl;break;case 7:cout<<"平方结果是:"<<s1.pingfang()<<endl;break;case 8:cout<<"二次方根是:"<<s1.kaifang()<<endl;break;default:cout<<"error"<<endl;break;cout<<endl;goto gg;if(a=2)cout<<&

温馨提示

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

评论

0/150

提交评论