1、 高级程序设计实践(C+)课程设计报告题 目 复数计算器 目录第一章 需求分析.第1页第二章 概要设计.第2页第三章 详细设计.第4页第四章 调试分析.第21页第五章 测试结果.第25页第六章 课程设计总结.第36页第七章 参考文献.第37页第八章 附录.第37页 C+程序设计之复数计算器 第一章 需求分析第一章 需求分析1.1程序设计的任务11.1编程目的1.本次程序设计的目的运用面向对象程序设计知识,利用C+语言设计和实现一个复数计算器,要求具备如下主要功能:(1)建立实数类、复数类(2)实现实数、复数信息的初始化(3)实现实数的加、减、乘、除、自增、自减、求平方、二次方根等操作(4)实现
2、复数的加、减、乘、除、取模、求平方、求共轭复数、求单个复数的向量角、求两个复数的夹角等运算(5)实现实数、复数信息的输出1.1.2编程要求在实现过程中,需利用面向对象程序设计理论的基础知识,充分体现出C+语言关于类、继承、封装与多态等核心概念,每一个类应包含数据成员和成员函数。1.1.3数据范围数据输入的形式为float型,输出形式亦是float型,数据(实数、复数的实部、虚部)范围是-2128 +2128,也即-3.40E+38 +3.40E+38。1.2本程序能实现的功能1.2.1实数类(Complex)所实现的功能:实数的加法运算、减法运算、乘法运算、除法运算、前置自增运算、后置自增运算
3、、前置自减运算、后置自减运算、求平方运算、求平方根运算;1.2.2复数类(Complex1)所实现的功能:复数的加法运算、减法运算、乘法运算、除法运算、模长运算、求平方运算、共轭复数运算、求单个复数的向量角运算、求两个复数的夹角运算。1.2.3主函数所能实现的功能1.提供给操作者操作数据的类型(实数还是复数)的标识;2.操作者选择数据类型后,提供运算类型操作的标识;3.运用指针调用两个类的各成员函数分别完成各项计;第52页 C+程序设计之复数计算器 第二章 概要设计 第二章 概要设计2.1构成部分2.1.1系统由三部分构成:实数类(Complex)、复数类(Complex1)、主函数main。
4、2.1.2.构成部分关系复数类(Complex1)由实数类(Complex)派生而来,其中两者成员函数中的enter(输入数据)函数是虚函数,用以实现多态性。主函数main通过指针调用实数类(Complex)、复数类(Complex1)分别完成实数运算、复数运算。2.1.3.类层次实数类是父类,复数类是子类。2.2主程序流程以及程序模块之间的调用关系如图2.21所示:输入flag判断flag判断wflag=1flag=2实数运算复数运算判断v w=3 w=4 w=5 w=6 w=12 v=3 v=4 v=5 v=6 v=11乘法运算减法运算加法运算求复数间夹角除法运算乘法运算减法运算加法运算求
5、平方运算除法运算图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)私有部分仅数据:float型数据 real;公共部分包括12个成员函数,分别是:类的构造函数:Complex()实数加法运算函数: Complex op
6、erator+(Complex &c1)实数减法运算函数:Complex operator-(Complex &c1)实数乘法运算函数:Complex operator*(Complex &c1)实数除法运算函数:Complex operator/(Complex &c1)实数前置自增函数:Complex operator+()实数后置自增函数:Complex operator+(int)实数前置自减函数:Complex operator-()实数后置自减函数:Complex operator-(int)实数求平方根函数:float RootOfTwo()实数求平方函数:float Squar
7、e()实数输入数据函数:virtual void enter()3.1.2.复数类(Complex1)私有部分仅数据成员float 型数据real和float 型数据imag,二者分别代表复数的实部和虚部;公共部分包含11个成员函数,分别是:类的构造函数:Complex1()复数加法运算函数:Complex1 operator+(Complex1 &c1)复数减法运算函数:Complex1 operator-(Complex1 &c1)复数乘法运算函数: Complex1 operator*(Complex1 &c1)复数除法运算函数:Complex1 operator/(Complex1 &
8、c1)复数求模长函数:float Length()复数求平方函数:Complex1 Square1()求共轭复数函数:Complex1 Conjugate()复数求角度函数:float Angle1()复数间求角度函数:float Angle2(Complex1 &c1)复数输入数据函数:void enter()3.2类中各成员函数的定义3.2.1实数类(Complex)1 类的构造函数 函数体部分:Complex();2实数加法运算函数函数体部分Complex operator+(Complex &c1)Complex c;coutthe result is: endl;c.real=rea
9、l+c1.real;coutreal+c1.real=c.realendl;return c;3实数减法运算函数函数体部分Complex operator-(Complex &c1)Complex c;coutthe result is: endl;c.real=real-c1.real;coutreal-c1.real=c.realendl;return c;4实数乘法运算函数函数体部分Complex operator*(Complex &c1)Complex c;c.real=real*c1.real;coutthe result is: endl;coutreal*c1.real=c.r
10、ealendl;return c;5实数除法运算函数函数体部分Complex operator/(Complex &c1)Complex c;coutthe result is: endl;c.real=real/c1.real;coutreal/c1.real=c.realendl;return c;6实数前置自增函数函数体部分Complex operator+() coutthe result is: endl;cout+real;+real;cout=realendl;return *this;7实数后置自增函数函数体部分Complex operator+(int)Complex tem
11、p(*this);coutthe result is: endl;coutreal+;real+;cout=real-1endl;coutrealendl;return temp;8实数前置自减函数函数体部分Complex operator-()coutthe result is: endl;cout-real;-real;cout=realendl;return *this;9实数后置自减函数函数体部分Complex operator-(int)Complex temp(*this);coutthe result is: endl;coutreal-;real-;cout=real+1end
12、l;coutrealendl;return temp;10实数求平方根函数函数体部分float RootOfTwo()Complex c;if(real0)coutthe number is wrong!endl;elsecoutthe result is: endl;c.real=sqrt(real);coutsqrtreal=c.realendl;return c.real;11实数求平方函数函数体部分float Square()Complex c;coutthe result is: endl;c.real=real*real;coutsquarereal=c.realreal;3.2.
13、2复数类(Complex1) 1.类的构造函数 函数体部分 Complex1(); 2. 复数加法运算函数函数体部分Complex1 operator+(Complex1 &c1)Complex1 c;coutthe result is: endl;c.real=real+c1.real;c.imag=imag+c1.imag;cout(real+imagj)+(c1.real+c1.imagj)=(c.real+c.imagj)endl;return c;3复数减法运算函数函数体部分Complex1 operator-(Complex1 &c1)Complex1 c;coutthe resu
14、lt is: endl;c.real=real-c1.real;c.imag=imag-c1.imag;cout(real+imagj)-(c1.real+c1.imagj)=(c.real+c.imagj)endl;return c;4复数乘法运算函数函数体部分Complex1 operator*(Complex1 &c1)Complex1 c;coutthe result is: endl;c.real=real*c1.real-imag*c1.imag;c.imag=real*c1.imag+imag*c1.real;cout(real+imagj)*(c1.real+c1.imagj)
15、=(c.real+c.imagj)endl;return c;5.复数除法运算函数函数体部分Complex1 operator/(Complex1 &c1)Complex1 c;coutthe 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+imagj)/(c1.real+c1.imagj)=(c.real+c.ima
16、gj)endl;return c;6.复数求模长函数函数体部分float Length()float x;coutthe result is: endl;x=sqrt(real*real+imag*imag);cout|real+imagj|=xendl;return x;7.复数求平方函数函数体部分Complex1 Square1()Complex1 c;coutthe result is: endl;c.real=real*real-imag*imag;c.imag=real*imag+imag*real;cout the square of (real+imagj) is (c.real
17、+c.imagj)endl;return c;8.求共轭复数函数函数体部分Complex1 Conjugate()Complex1 c;coutthe result is: =0)coutconjugate complex number of(real+imagj) is (c.real+c.imagj)endl;if(c.imag0)coutconjugate complex number of(real+imagj) is (c.realc.imagj)endl;return c;8.复数求角度函数函数体部分float Angle1()float y;coutthe result is:
18、endl;y=atan(imag)/(real)/i*180;if(real=0&imag!=0)coutthe angle of (real+imagj) is 900)coutthe angle of (real+imagj) is yendl;if(real0)coutthe angle of (real+imagj) is y+180endl;if(real0&imag0)coutthe angle of (real+imagj) is y-180endl;return y;9.复数间求角度函数函数体部分float Angle2(Complex1 &c1)float z,r,s,t;c
19、outthe 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.imag);z=acos(r/(s*t)/i*180;coutthe angle between (real+imagj) and (c1.real+c1.imagj) is zreal;cinimag;coutendl;3. 3主程序和重要模块的算法3.3.1主程序和重要模块具体代码如下: int main() /主函数 int flag,w,v;Complex g
20、rad1,grad2;Complex *pt1,*pt2;Complex1 *pm1,*pm2;Complex1 revd1,revd2;cout姓名: 曾立弘endl;cout专业: 电气信息工程endl;cout班级: 1401班endl;cout学号: 0903140114endl;while(flag!=0) /while循环 ,flag=0时终止循环 pt1=&grad1;pt2=&grad2;coutPlease choose the type of the numbers:endl;cout0-exit systemendl; cout1-real numberendl; cou
21、t2-plural numberflag; if(flag=1) /条件语句:如果flag=1,则进行实数运算 coutplease choose the operation of the numbers:endl;cout3-+endl;cout4-endl;cout5-*endl;cout6-/endl;cout7-+endl;cout8-endl;cout9-+(int)endl;cout10-(int)endl;cout11-root of twoendl;cout12-squarew;if(w=3)coutenter();coutendl;coutenter();coutoperat
22、or+(grad2);if(w=4)coutenter();coutendl;coutenter();coutoperator-(grad2);if(w=5)coutenter();coutendl;coutenter();coutoperator*(grad2);if(w=6)coutenter();coutendl;coutenter();coutoperator/(grad2);if(w=7)coutenter();pt1-operator+();if(w=8)coutenter();pt1-operator-();if(w=9)coutenter();grad1+;if(w=10)co
23、utenter();grad1-;if(w=11)coutenter();pt1-RootOfTwo();if(w=12)coutenter();pt1-Square();if(w!=3&w!=4&w!=5&w!=6&w!=7&w!=8&w!=9&w!=10&w!=11&w!=12)coutplease choose correct option!endl; /出错提示pt1=&revd1;pt2=&revd2;pm1=&revd1;pm2=&revd2;if(flag=2) /条件语句:如果flag=1,则进行实数运算 coutplease choose the operation of t
24、he numbers:endl;cout3-+endl;cout4-endl;cout5-*endl;cout6-/endl;cout7-Lengthendl;cout8-Square1endl;cout9-Conjugateendl;cout10-Angle1endl;cout11-Angle2v;if(v=3)coutenter();coutendl;coutenter();coutoperator+(revd2);if(v=4)coutenter();coutendl;coutenter();coutoperator-(revd2);if(v=5)coutenter();coutendl
25、;coutenter();coutoperator*(revd2);if(v=6)coutenter();coutendl;coutenter();coutoperator/(revd2);if(v=7)coutenter();coutConjugate();if(v=8)coutenter();coutSquare1();if(v=9)coutenter();coutConjugate();if(v=10)coutenter();coutAngle1();if(v=11)coutenter();coutendl;coutenter();coutAngle2(revd2);if(v!=3&v!
26、=4&v!=5&v!=6&v!=7&v!=8&v!=9&v!=10&v!=11)coutplease choose correct option!endl; /出错提示 if(flag!=1&flag!=2&flag!=0)coutplease choose correct option!endl; /出错提示if(flag!=0) coutn; coutPlease carry out the next operation:endl;/继续运算提示 coutn; coutWelcome next time!endl;return 0;3.4函数调用关系图3.4.1函数调用关系图如图3.41所
27、示 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 Conjugate()float Angle1()Complex operator+()Complex1 operator+(Complex1 &c1)Complex1 operator-(Complex1 &c1)Complex1 operator*(Complex1 &c1)Complex1 operator/(Complex1 &c1) f