中南大学
高级程序设计实践(C++)
课程设计报告
题 目 复数计算器 学生姓名 曾立弘 指导教师 陈丽萍 学 院 信息科学与工程学院
专业班级 电子信息工程 1401 班 完成时间 2015年6月8日 星期一
目录
第一章 需求分析.................................第1页
第二章 概要设计.................................第2页
第三章 详细设计.................................第4页
第四章 调试分析................................第21页
第五章 测试结果................................第25页
第六章 课程设计总结............................第36页
第七章 参考文献................................第37页
第八章 附录....................................第37页
C++程序设计之复数计算器 第一章 需求分析
第一章 需求分析
1.1程序设计的任务
1.1.1编程目的
1.本次程序设计的目的运用面向对象程序设计知识,利用C++语言设计和实现一个复数计算器,要求具备如下主要功能: (1)建立实数类、复数类 (2)实现实数、复数信息的初始化
(3)实现实数的加、减、乘、除、自增、自减、求平方、二次方根等操作 (4)实现复数的加、减、乘、除、取模、求平方、求共轭复数、求单个复数的向量角、求两个复数的夹角等运算 (5)实现实数、复数信息的输出 1.1.2编程要求
在实现过程中,需利用面向对象程序设计理论的基础知识,充分体现出C++语言关于类、继承、封装与多态等核心概念,每一个类应包含数据成员和成员函数。 1.1.3数据范围
数据输入的形式为float型,输出形式亦是float型,数据(实数、复数的实部、虚部)范围是-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38。
1.2本程序能实现的功能
1.2.1实数类(Complex)所实现的功能:
实数的加法运算、减法运算、乘法运算、除法运算、前置自增运算、后置自增运算、前置自减运算、后置自减运算、求平方运算、求平方根运算; 1.2.2复数类(Complex1)所实现的功能:
复数的加法运算、减法运算、乘法运算、除法运算、模长运算、求平方运算、共轭复数运算、求单个复数的向量角运算、求两个复数的夹角运算。
1.2.3主函数所能实现的功能
1.提供给操作者操作数据的类型(实数还是复数)的标识; 2.操作者选择数据类型后,提供运算类型操作的标识; 3.运用指针调用两个类的各成员函数分别完成各项计;
第1页
C++程序设计之复数计算器 第二章 概要设计
第二章 概要设计
2.1构成部分
2.1.1系统由三部分构成:实数类(Complex)、复数类(Complex1)、主函数main。 2.1.2.构成部分关系
复数类(Complex1)由实数类(Complex)派生而来,其中两者成员函数中的enter(输入数据)函数是虚函数,用以实现多态性。
主函数main通过指针调用实数类(Complex)、复数类(Complex1)分别完成实数运算、复数运算。 2.1.3.类层次
实数类是父类,复数类是子类。
2.2主程序流程以及程序模块之间的调用关系
如图2.2—1所示:
输入flag
flag=1 实数运算 判断flag flag=2 复数运算 判断w 判断v w=3 w=4 w=5 w=6 …… w=12 v=3 v=4 v=5 v=6 …… v=11 加 法 运 算 减法运算 乘法运算 除法运算
求平方运算 第2页 加法运算 减法运算 乘法运算 除法运算 求复数间夹角 C++程序设计之复数计算器 第二章 概要设计
图2.2--1主程序流程以及程序模块之间的调用关系图
注:图2.2--1中没有画出 1. flag=0时退出系统;
2. flag不等于0,1,2时出现错误提示语句的选择结构; 3. w,v在选择范围之外时出现错误提示语句的选择结构。 4. 特殊处理:
除法运算分母为0;求二次方根数为负数;求单个复数夹角时判断象限的过程。
第3页
C++程序设计之复数计算器 第三章 详细设计
第三章 详细设计
3.1类层次中各个类的描述
3.1.1.实数类(Complex)
私有部分仅数据: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) 实数前置自减函数:Complex 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-(Complex1 &c1) 复数乘法运算函数: Complex1 operator*(Complex1 &c1) 复数除法运算函数:Complex1 operator/(Complex1 &c1) 复数求模长函数:float Length() 复数求平方函数:Complex1 Square1() 求共轭复数函数:Complex1 Conjugate() 复数求角度函数:float Angle1()
复数间求角度函数:float Angle2(Complex1 &c1)
第4页
C++程序设计之复数计算器 第三章 详细设计
复数输入数据函数:void enter()
3.2类中各成员函数的定义
3.2.1实数类(Complex) 1 类的构造函数
函数体部分:Complex(){}; 2实数加法运算函数 函数体部分
Complex operator+(Complex &c1) { }
3实数减法运算函数 函数体部分
Complex operator-(Complex &c1) { }
4实数乘法运算函数 函数体部分
Complex operator*(Complex &c1) {
Complex c;
cout<<\c.real=real+c1.real;
cout< Complex c; cout<<\c.real=real-c1.real; cout< Complex c; c.real=real*c1.real; cout<<\ cout< 第5页 C++程序设计之复数计算器 第三章 详细设计 } return c; 5实数除法运算函数 函数体部分 Complex operator/(Complex &c1) { } 6实数前置自增函数 函数体部分 Complex operator++() { } 7实数后置自增函数 函数体部分 Complex operator++(int) { Complex temp(*this); cout<<\cout< cout<<\cout< 第6页 Complex c; cout<<\c.real=real/c1.real; cout< cout<<\cout<<\++real; cout<<\return *this; C++程序设计之复数计算器 第三章 详细设计 } 8实数前置自减函数 函数体部分 Complex operator--() { } 9实数后置自减函数 函数体部分 Complex operator--(int) { } 10实数求平方根函数 函数体部分 float RootOfTwo() { Complex c; if(real<0) { } else 第7页 cout<<\cout<<\--real; cout<<\return *this; Complex temp(*this); cout<<\cout< cout<<\cout< cout<<\ C++程序设计之复数计算器 第三章 详细设计 } { } return c.real; cout<<\c.real=sqrt(real); cout<<\ 11实数求平方函数 函数体部分 float Square() { } 12实数输入数据函数(虚函数) 函数体部分 virtual void enter() { cin>>real; } 3.2.2复数类(Complex1) 1.类的构造函数 函数体部分 Complex1(){}; 2. 复数加法运算函数 函数体部分 Complex1 operator+(Complex1 &c1) { Complex1 c; cout<<\c.real=real+c1.real; 第8页 Complex c; cout<<\c.real=real*real; cout<<\return c.real; C++程序设计之复数计算器 第三章 详细设计 } c.imag=imag+c1.imag; cout<<\<<\<<\return c; 3复数减法运算函数 函数体部分 Complex1 operator-(Complex1 &c1) { } 4复数乘法运算函数 函数体部分 Complex1 operator*(Complex1 &c1) { } 5.复数除法运算函数 函数体部分 第9页 Complex1 c; cout<<\c.real=real-c1.real; c.imag=imag-c1.imag; cout<<\<<\<<\return c; Complex1 c; cout<<\c.real=real*c1.real-imag*c1.imag; c.imag=real*c1.imag+imag*c1.real; cout<<\<<\<<\return c; C++程序设计之复数计算器 第三章 详细设计 Complex1 operator/(Complex1 &c1) { } 6.复数求模长函数 函数体部分 float Length() { } 7.复数求平方函数 函数体部分 Complex1 Square1() { } 8.求共轭复数函数 第10页 Complex1 c; cout<<\ 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<<\<<\<<\return c; float x; cout<<\x=sqrt(real*real+imag*imag); cout<<\return x; Complex1 c; cout<<\c.real=real*real-imag*imag; c.imag=real*imag+imag*real; cout<<\<<\ is \return c; C++程序设计之复数计算器 第三章 详细设计 函数体部分 Complex1 Conjugate() { } 8.复数求角度函数 函数体部分 float Angle1() { float y; cout<<\y=atan((imag)/(real))/i*180; if(real==0&&imag!=0) { cout<<\ <<\ is \ <<90< 第11页 Complex1 c; cout<<\c.real=real; c.imag=imag*(-1); if(c.imag>=0) { } if(c.imag<0) { } return c; cout<<\ <<\ is \<<\cout<<\ <<\ is \<<\ C++程序设计之复数计算器 第三章 详细设计 if(real>0) { cout<<\ <<\ is \ < if(real<0&&imag>0) { cout<<\ <<\ is \ < if(real<0&&imag<0) { cout<<\ <<\ is \ < } 9.复数间求角度函数 函数体部分 float Angle2(Complex1 &c1) { float z,r,s,t; cout<<\ 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; cout<<\ (\ <<\ (\ \ is \ < return z; 第12页 \ C++程序设计之复数计算器 第三章 详细设计 } 10.复数输入数据函数(虚函数) 函数体部分 void enter() { } cin>>real; cin>>imag; cout< 3. 3主程序和重要模块的算法 3.3.1主程序和重要模块具体代码如下: int main() //主函数 { int flag,w,v; Complex grad1,grad2; Complex *pt1,*pt2; Complex1 *pm1,*pm2; Complex1 revd1,revd2; cout<<\姓名: 曾立弘\cout<<\专业: 电气信息工程\cout<<\班级: 1401班\cout<<\学号: 0903140114\ while(flag!=0) //while循环 ,flag=0时终止循环 { pt1=&grad1; pt2=&grad2; cout<<\cout<<\ cout<<\ cout<<\ cin>>flag; { 第13页 if(flag==1) //条件语句:如果flag=1,则进行实数运算 C++程序设计之复数计算器 第三章 详细设计 cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cin>>w; if(w==3) { } if(w==4) { } if(w==5) { 第14页 cout<<\ \pt1->enter(); cout< cout<<\ \pt2->enter(); cout< pt1->operator+(grad2); cout<<\ \pt1->enter(); cout< cout<<\ \pt2->enter(); cout< pt1->operator-(grad2); C++程序设计之复数计算器 第三章 详细设计 } cout<<\ \pt1->enter(); cout< cout<<\ \pt2->enter(); cout< pt1->operator*(grad2); if(w==6) { } if(w==7) { } if(w==8) { } if(w==9) { cout<<\ \pt1->enter(); 第15页 cout<<\ \pt1->enter(); cout< cout<<\ \pt2->enter(); cout< pt1->operator/(grad2); cout<<\ \pt1->enter(); pt1->operator++(); cout<<\ \pt1->enter(); pt1->operator--(); C++程序设计之复数计算器 第三章 详细设计 } grad1++; if(w==10) { } if(w==11) { } if(w==12) { } cout<<\ \pt1->enter(); pt1->Square(); cout<<\ \pt1->enter(); pt1->RootOfTwo(); cout<<\ \pt1->enter(); grad1--; if(w!=3&&w!=4&&w!=5&&w!=6&&w!=7&&w!=8&&w!=9&&w!=10&&w!=11& } pt1=&revd1; pt2=&revd2; pm1=&revd1; pm2=&revd2; if(flag==2) //条件语句:如果flag=1,则进行实数运算 { cout<<\ 第16页 &w!=12) { cout<<\} //出错提示 C++程序设计之复数计算器 第三章 详细设计 cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cin>>v; if(v==3) { } if(v==4) { } if(v==5) { cout<<\ \pt1->enter(); 第17页 cout<<\ \pt1->enter(); cout< cout<<\ \pt2->enter(); cout< pm1->operator+(revd2); cout<<\ \pt1->enter(); cout< cout<<\ \pt2->enter(); cout< pm1->operator-(revd2); C++程序设计之复数计算器 第三章 详细设计 } cout< cout<<\ \pt2->enter(); cout< pm1->operator*(revd2); if(v==6) { } if(v==7) { } if(v==8) { } if(v==9) { cout<<\ \pt1->enter(); 第18页 cout<<\ \pt1->enter(); cout< cout<<\ \pt2->enter(); cout< pm1->operator/(revd2); cout<<\ \pt1->enter(); cout< cout<<\ \pt1->enter(); cout< C++程序设计之复数计算器 第三章 详细设计 } { } cout< if(v==10) { } if(v==11) { } if(v!=3&&v!=4&&v!=5&&v!=6&&v!=7&&v!=8&&v!=9&&v!=10&&v!=11) { cout<<\} //出错提示 cout<<\ \pt1->enter(); cout< cout<<\ \pt2->enter(); cout< cout<<\ \pt1->enter(); cout< if(flag!=1&&flag!=2&&flag!=0) cout<<\ } //出错提示 if(flag!=0) cout<<\ { cout<<\继续运算提示 cout<<\ 第19页 C++程序设计之复数计算器 第三章 详细设计 } } } cout<<\return 0; 3.4函数调用关系图 3.4.1函数调用关系图 如图3.4—1所示 flag!=0 输入flag 0 其他 flag=2 复数运算 flag=1 实数运算 输入w ,w=? exit error 输入v,v=? 3 4 5 6 7 8 9 10 11 12 其他 11 10 9 8 7 6 5 4 3 5 6 7 8 9 10 12 其他 3 4 11 输出 “please choose correct option!” “ float Square() float RootOfTwo() Complex operator--(int) Complex operator++(int) Complex operator--() Complex operator++() Complex operator/(Complex &c1) Complex operator*(Complex &c1) Complex operator-(Complex &c1) Complex operator+(Complex &c1) 第20页 Complex1 operator+(Complex1 &c1) Complex1 operator-(Complex1 &c1) Complex1 operator*(Complex1 &c1) Complex1 operator/(Complex1 &c1) Complex1 Conjugate() float Length() Complex1 Conjugate() float Angle1() float Angle2(Complex1 &c1) C++程序设计之复数计算器 第四章 调试分析 第四章 调试分析 4.1调试过程遇到的问题及解决方法的得出过程 4.1.1问题及分析过程 1. 对输出结果的界面没有太注意,导致输出结果不是很美观; 2. 对字母的拼写错误,导致前面定义的变量到后面编译器不认识;对固有写法的拼写错误,如将运算符重载函数写为operetor,导致运算符重载不成功。 3.对一些模块的编写代码缺乏系统分析,主要体现在以下几个方面: (1)实数除法重载函数中没有考虑分母为0的情况,增加了if条件语句讨论; (2)实数求二次方根函数中没有考虑被开方数为负数的情况增加了if条件语句讨论; (3)求单个复数的向量角时没有将弧度制转化为角度制,定义了全局常变量i=3.1415927,通过弧度值除以i再乘以180将其转化为角度值; 求单个复数的向量角时没有考虑象限的讨论,最后加了if选择结构讨论; 求单个复数的向量角时没有分母(即实部real)为0的情况,增加了if条件语句讨论; 具体讨论程序如下(实部为real,虚部为 imag): float Angle1() //求单个复数的夹角度数 { float y; cout<<\y=atan((imag)/(real))/i*180; if(real==0&&imag!=0) { cout<<\ <<\ is \ <<90< 第21页 C++程序设计之复数计算器 第四章 调试分析 } cout<<\ <<\ is \ < if(real<0&&imag>0) { cout<<\ <<\ is \ < if(real<0&&imag<0) { cout<<\ <<\ is \ < (4)在调用虚函数时,修改之前是基类指针指向子类指针的这一步骤写在基类、子类的定义部分,导致下面先调用基类虚函数,后调用子类虚函数时会出现调用的时同一部分,即基类的数据。修改后时将基类指针指向子类指针的这一步骤写在调用基类虚函数和调用子类虚函数之间,从而实现了虚函数和多态性。 (5)为使程序可以连续运算而不是每算一次就得重新运行使用了while 循环,初始时将对象的地址赋给指针这一步骤写在while 循环之外,发现经过多次循环后指针所指的对象已经不是原来的了,为使指针总是指向要求的对象,就必须在每一次循环开始时将其重新定位,即指向对象的开头。综上述原因,最后将将对象的地址赋给指针这一步骤写在while 循环之内,从而问题得以解决。 4.2算法的时间复杂性和可能的改进设想 4.2.1算法的时间复杂性 1.在主函数中的选择分支结构(本程序中未用switch结构,而是if结构)初始时 为下面格式 if( ) { 第22页 C++程序设计之复数计算器 第四章 调试分析 } ...... else { if( ) } 以此来选择输入的指令并输出可能的错误形式,但考虑到上面结构可能会对运行速率造成影响,故改为以下形式: { } else { if( ) } { } else { if( ) } { } else { } ...... ...... ...... ...... 第23页 C++程序设计之复数计算器 第五章 测试结果 if( ) { ...... } if( ) { ...... } if( ) { ...... } ...... if( != && != != && != != && != != && != != && != ) { ...... } 来选择结构并输出可能的错误形式。 2.指针和虚函数的运用。 4.2.2可能的改进思想 1.本程序在程序要求中明确说明要建立两个类,实数类和复数类。但个人认为可以直接建立一个复数类,并将两者所要求的函数全部归在这一个类中,因为实数可以用虚部为0的复数代替,唯一要加的就是为实数运算服务的函数使其运用默认参数的知识,令虚部的默认参数为了0即可。 2. 本程序在程序要求中明确说明要建立两个类,实数类和复数类。但个人认为可以仅仅建立一个复数类,不需要实数类,因为实数的运算可以直接定义函数来进行,而不是建立实数类再用类的成员函数来实现其母的。 第24页 C++程序设计之复数计算器 第五章 测试结果 第五章 测试结果 5.1错误处理 5.1.1初始界面 5.1.2错误处理一 5.1.3错误处理二 第25页 C++程序设计之复数计算器 第五章 测试结果 5.1.4错误处理三 第26页 C++程序设计之复数计算器 第五章 测试结果 5.1.5退出系统 5.2 测试数据(实数以3、7测试,若单个变量则取3;复数以-3-7j和5+5j测试,若单个变量取-3-7j) 5.2.1实数部分 1.加法运算 第27页 C++程序设计之复数计算器 第五章 测试结果 2.减法运算 第28页 C++程序设计之复数计算器 第五章 测试结果 3.乘法运算 第29页 C++程序设计之复数计算器 第五章 测试结果 4.除法运算 5前置自增运算 第30页 C++程序设计之复数计算器 第五章 测试结果 6.前置自减运算 7后置自增运算 8后置自减运算 第31页 C++程序设计之复数计算器 第五章 测试结果 9求平方根运算 10.求平方运算 5.2.2复数部分 1.加法运算 第32页 C++程序设计之复数计算器 第五章 测试结果 2.减法运算 3.乘法运算 第33页 C++程序设计之复数计算器 第五章 测试结果 4.除法运算 5.求模长运算 6.求平方运算 7.求共轭复数运算 第34页 C++程序设计之复数计算器 第五章 测试结果 8.求单个复数向量角运算 9.求复数间夹角运算 第35页 C++程序设计之复数计算器 第六章 课程设计总结 第六章 课程设计总结 6.1三周程序编写及调试,在做“C++课程设计之复数计算器”这个项目中,发现的问题有以下几点: 1.基本符号问题 其一、本程序是在Microsoft Visual C++ 6.0上面完成的,这可以说是一款比较智能的编译系统了,但即使如此,仍有括弧忘写、误删、只有一个括弧的问题,若在其他编译系统中书写,可能错误会更多;其二、书写混乱,在较长的代码段不是很整齐,对后面的书写带来极大的不便。 2.知识掌握深度问题 其一、对指针虽初步掌握,但不熟,有一些原则性的失误,如:在循环中,指针从开头移到结尾后,第二次循环开始时需将其重新固定到开头,否则会随机赋值进行运算;其二、对虚函数和多态性掌握不彻底,对将子类的地址赋给基类指针这一步骤的代码 的位置在此前不是很清楚;其三、未弄清if语句和switch语句的优缺点;其四、对if语句的各式结构的优缺点未对比分析过;其五、对运算符重载函数作为类的成员函数和类的友元函数未细细比较。 3.学习编程语言的习惯问题 其一、注重书本而不注重上机,导致实践能力与知识掌握不是齐头并进。 6.2对数据结构这门课的思考 1.即使是一个小小的算法,或者实现一个并不是太复杂的功能,但对编程能力 的要求非常严格。从一个初学者的态度来讲,要严格、严谨、务实、创新,否则,即使能够实现所有要求,但编译时间过长,影响用户的使用。 2.数据结构这门知识可以说是由无数个小的板块构成的,在知识储存量相同的情况下,判断程序员优秀与否的差别在与这些模块的组合方式,组合方式很多,实现同一步骤的方式也很多。所以,学好这门课的关键是不仅是要会,更重要的是熟练。 第36页 C++程序设计之复数计算器 第七章 参考文献 第八章 附录 第七章 参考文献 【1】《C++程序设计》(第2版) 谭浩强编著 清华大学出版社 第八章 附录 8.1带注释的源程序 #include class Complex //实数类 { public: Complex(){}; //构造函数 Complex operator+(Complex &c1) //加法重载函数 { } Complex operator-(Complex &c1) //减法重载函数 { } Complex operator*(Complex &c1) //乘法重载函数 { 第37页 Complex c; cout<<\c.real=real+c1.real; cout< Complex c; cout<<\c.real=real-c1.real; cout< C++程序设计之复数计算器 第七章 参考文献 第八章 附录 } Complex c; c.real=real*c1.real; cout<<\ cout< Complex operator/(Complex &c1) //除法重载函数 { } Complex operator++() //前置自增重载函数 { } Complex operator++(int) //后置自增重载函数 { } Complex temp(*this); cout<<\cout< cout<<\cout<<\return temp; cout<<\cout<<\++real; cout<<\return *this; Complex c; cout<<\c.real=real/c1.real; cout< 第38页 C++程序设计之复数计算器 第八章 附录 Complex operator--() //前置自减重载函数 { } Complex operator--(int) //后置自减重载函数 { } float RootOfTwo() //求平方根函数 { } 第39页 cout<<\cout<<\--real; cout<<\return *this; Complex temp(*this); cout<<\cout< cout<<\cout<<\return temp; Complex c; if(real<0) { } else { } return c.real; cout<<\c.real=sqrt(real); cout<<\cout<<\ C++程序设计之复数计算器 第八章 附录 }; float Square() //求平方函数 { } virtual void enter() //输入数据函数(虚函数) { } private: float real; //私有数据 cin>>real; Complex c; cout<<\c.real=real*real; cout<<\return c.real; class Complex1:public Complex //类的共有继承 生成复数类 { public: Complex1(){}; //构造函数 Complex1 operator+(Complex1 &c1) //加法重载函数 { } Complex1 operator-(Complex1 &c1) //减法重载函数 { Complex1 c; cout<<\ 第40页 Complex1 c; cout<<\c.real=real+c1.real; c.imag=imag+c1.imag; cout<<\<<\<<\return c; C++程序设计之复数计算器 第八章 附录 } c.real=real-c1.real; c.imag=imag-c1.imag; cout<<\<<\<<\return c; Complex1 operator*(Complex1 &c1) //乘法重载函数 { } Complex1 operator/(Complex1 &c1) //除法重载函数 { } float Length() //求模长函数 { float x; cout<<\x=sqrt(real*real+imag*imag); 第41页 Complex1 c; cout<<\c.real=real*c1.real-imag*c1.imag; c.imag=real*c1.imag+imag*c1.real; cout<<\<<\<<\return c; Complex1 c; cout<<\ 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<<\<<\<<\return c; C++程序设计之复数计算器 第八章 附录 } cout<<\return x; Complex1 Square1() //求平方函数 { } Complex1 Conjugate() //求共轭复数 { } float Angle1() //求单个复数的夹角度数 第42页 Complex1 c; cout<<\c.real=real*real-imag*imag; c.imag=real*imag+imag*real; cout<<\<<\ is \return c; Complex1 c; cout<<\c.real=real; c.imag=imag*(-1); if(c.imag>=0) { } if(c.imag<0) { } return c; cout<<\ <<\ is \<<\cout<<\ <<\ is \<<\ C++程序设计之复数计算器 第八章 附录 { } float Angle2(Complex1 &c1) //求复数间的夹角度数函数 { float z,r,s,t; cout<<\ 第43页 float y; cout<<\y=atan((imag)/(real))/i*180; if(real==0&&imag!=0) { cout<<\ <<\ is \ <<90< cout<<\ <<\ is \ < if(real<0&&imag>0) { cout<<\ <<\ is \ < if(real<0&&imag<0) { cout<<\ <<\ is \ < C++程序设计之复数计算器 第八章 附录 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; cout<<\ (\ \<<\ (\ \ is \< }; } void enter() //输入数据函数 { } float real; //私有变量 float imag; //私有变量 cin>>real; cin>>imag; cout< private: int main() //主函数 { int flag,w,v; Complex grad1,grad2; Complex *pt1,*pt2; Complex1 *pm1,*pm2; Complex1 revd1,revd2; cout<<\姓名: 曾立弘\cout<<\专业: 电子信息工程\cout<<\班级: 1401班\cout<<\学号: 0903140114\{ pt1=&grad1; pt2=&grad2; 第44页 while(flag!=0) //while循环 ,flag=0时终止循环 C++程序设计之复数计算器 第八章 附录 cout<<\cout<<\ cout<<\ cout<<\ cin>>flag; { cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cin>>w; if(w==3) { } if(w==4) { cout<<\ \pt1->enter(); cout< 第45页 if(flag==1) //条件语句:如果flag=1,则进行实数运算 cout<<\ \pt1->enter(); cout< cout<<\ \pt2->enter(); cout< pt1->operator+(grad2); C++程序设计之复数计算器 第八章 附录 } cout<<\ \pt2->enter(); cout< pt1->operator-(grad2); if(w==5) { } if(w==6) { } if(w==7) { } if(w==8) { cout<<\ \ 第46页 cout<<\ \pt1->enter(); cout< cout<<\ \pt2->enter(); cout< pt1->operator*(grad2); cout<<\ \pt1->enter(); cout< cout<<\ \pt2->enter(); cout< pt1->operator/(grad2); cout<<\ \pt1->enter(); pt1->operator++(); C++程序设计之复数计算器 第八章 附录 } pt1->enter(); pt1->operator--(); if(w==9) { } if(w==10) { } if(w==11) { } if(w==12) { } cout<<\ \pt1->enter(); pt1->Square(); cout<<\ \pt1->enter(); pt1->RootOfTwo(); cout<<\ \pt1->enter(); grad1--; cout<<\ \pt1->enter(); grad1++; if(w!=3&&w!=4&&w!=5&&w!=6&&w!=7&&w!=8&&w!=9&&w!=10&&w!=11& } 第47页 &w!=12) { cout<<\} //出错提示 C++程序设计之复数计算器 第八章 附录 pt1=&revd1; pt2=&revd2; pm1=&revd1; pm2=&revd2; if(flag==2) //条件语句:如果flag=2,则进行复数运算 { cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cin>>v; if(v==3) { } if(v==4) { cout<<\ \pt1->enter(); cout< cout<<\ \pt2->enter(); 第48页 cout<<\ \pt1->enter(); cout<