C++课程设计复数计算器
计算器课程设计c

计算器课程设计c一、教学目标本课程的教学目标是使学生掌握计算器的基本使用方法,包括加减乘除、科学计算等功能,能够运用计算器解决实际问题。
知识目标为学生能够理解计算器的基本工作原理和各种功能的使用方法;技能目标为学生能够熟练操作计算器,进行正确的数值计算和科学计算;情感态度价值观目标则是培养学生的计算思维,使他们认识到计算器在现代学习和工作中的重要性,养成良好的学习习惯和科学精神。
二、教学内容根据课程目标,本课程的教学内容主要包括计算器的基本操作、各种功能的使用方法以及计算器在实际问题中的应用。
具体的教学大纲如下:1.计算器的基本操作:学习如何开机、关机、清屏等基本操作。
2.数值计算:学习如何进行加减乘除等基本的数值计算。
3.科学计算:学习如何进行幂次计算、平方根、倒数等科学计算。
4.实际问题应用:通过实例讲解计算器在解决实际问题中的应用,如面积、体积计算等。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法、实验法等。
讲授法用于讲解计算器的基本操作和功能使用方法;讨论法用于引导学生交流计算器使用的心得和遇到的问题;案例分析法用于分析计算器在实际问题中的应用;实验法用于让学生亲自动手操作计算器进行实际计算。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备。
教材和参考书用于提供理论知识的学习,多媒体资料用于辅助讲解和演示计算器的操作,实验设备则是让学生进行实际操作的重要工具。
在教学过程中,教师应充分利用这些资源,丰富学生的学习体验,提高学习效果。
五、教学评估本课程的评估方式包括平时表现、作业、考试等多个方面,以全面客观地评价学生的学习成果。
平时表现主要评估学生在课堂上的参与度、提问回答等情况;作业则主要评估学生的动手操作能力和对知识的理解运用;考试则是对学生学习成果的全面检验,包括理论知识和实际操作两部分。
评估方式应公正客观,能够全面反映学生的学习成果。
C++程序设计-复数计算器

《C++面向对象程序设计》课程设计系专:班级:姓名:学号:指导老师:目录一、设计课题目的 (3)二、课程设计任务及要求 (3)三、课程设计总思路 (4)四、程序源代码 (4)五、运行结果显示 (11)六、本次课程设计的总结 (14)七、参考文献 (14)一、设计课题目的通过C++ 课程设计,使学生能够对现实世界中较简单的问题及其解决方法用计算机语言进行描述,掌握面向对象设计语言的方法。
同时,在实践过程中达到对C++ 语言程序设计的深入理解和熟练掌握。
二、课程设计任务及要求1、任务:课程设计选题是“小型复数计算器”,其任务:请用面向对象方法设计并实现一个小型复数计算器,功能包括:(1)实现复数的设置和显示。
(2)实现复数加减乘除功能,并显示运算结果。
2、要求:1、利用C++ 面向对象方法设计该程序,并实现其功能。
2、从键盘以a+bi的形式输入复数。
3、仿照计算器的运算过程,采用计算器方式进行有关分数运算。
三、课程设计总思路根据题中任务的功能,首先要搞清复数的运算法则,并使用c++语言表达。
复数包含实部与虚部,如何将这两部分表达出来也使关键。
主要需要定义一个cal类。
里面定义了复数所需的各种计算符,来实现复数的各种运算。
esc 函数实现提取输入的实部和虚部。
add 函数实现函数的加法运算。
sub 函数实现函数的减法运算。
mul 函数实现函数的乘法运算。
div 函数实现函数的除法运算。
在主函数中调用类中已定义的函数来实现程序。
四、程序源代码:#include<iostream>#define M 20using namespace std;class cal //定义一个类{public:cal(char a[M]){pt=a;}void esc(); //实现提取输入的实部和虚部void add(); //实现加法void sub(); //实现减法void mul(); //实现乘法void div(); //实现除法void out(); //输出结果void pass(); //传递数据private:char *p,*pt;float SUM_1,SUM_2,A,B;};//成员函数的实现void cal::esc(){int m,n,n2,m2;float shi=0,shi2=0,xu=0,xu2=0;if(pt[0]=='-')p=pt+1;else p=pt;for(m=0;m<M;m++){shi=shi*10+float(p[m]-48);if(p[m+1]=='+'||p[m+1]=='-'){m2=m+1;n2=m;break;}if(p[m+1]=='.'){n=m+2;n2=n-1;for(m=n;m<M;m++){if(p[m]=='-'||p[m]=='+'){m2=m;break;}n2++;}for(m=n2;m>=n;m--){shi2=shi2/10+float(p[m]-48);}break;}}shi+=shi2/10;if(pt[0]=='-')shi=0-shi;for(m=n2+2;m<M;m++){xu=xu*10+float(p[m]-48);if(p[m+1]=='i')break;if(p[m+1]=='.'){n=m+2; n2=n-1;for(m=n;m<M;m++){if(p[m]=='i')break;n2++;}for(m=n2;m>=n;m--){xu2=xu2/10+float(p[m]-48);}break;}}xu+=xu2/10;if(p[m2]=='-')xu=0-xu; A=shi;B=xu;}void cal::pass(){SUM_1=A;SUM_2=B;}void cal::add(){SUM_1+=A;SUM_2+=B;}void cal::sub(){SUM_1-=A;SUM_2-=B;}void cal::mul(){float C=SUM_1;SUM_1=SUM_1*A-B*SUM_2;SUM_2=B*C+SUM_2*A;}void cal::div(){float C=SUM_1;float D=(A*A+B*B);SUM_1=(SUM_1*A+B*SUM_2)/D;SUM_2=(B*C-SUM_2*A)/D;}void cal::out(){cout<<"----"<<endl;if(SUM_2<0)cout<<SUM_1<<SUM_2<<"i"<<endl;elsecout<<SUM_1<<"+"<<SUM_2<<"i"<<endl;}//主函数int main(){cout<<"这是一个简单的复数计算器,具有对复数进行'+,-,*,/' 运算的能力。
复数计算器 实验报告

中南大学高级程序设计实践(C++)课程设计报告题目复数计算器学生姓名指导教师陈丽萍学院信息科学与工程学院专业班级通信工程1301班完成时间 2014年7月5日第一章需求分析与程序设计1.1 需求分析1.1.1程序设计的目的与任务1.复习和巩固C++语言的基础知识,进一步加深对C++语言的理解和掌握。
2.为学生提供独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生独立分析问题、解决问题、查阅资料以及自学能力。
3.学习和掌握C++程序设计方法以及上机调试技巧,为今后学习其它专业课程打好基础。
4.在程序实现过程中,需利用面向对象程序设计理论的基础知识,充分体现出C++语言关于类、继承、封装与多态等核心概念,每一个类应包含数据成员和成员函数,以实现预期的功能,解决实际问题。
1.1.2“复数计算器”程序所能实现的功能1.建立实数类、复数类,复数类由实数类公有继承而来。
2.实现实数、复数信息的初始化。
3.通过选择结构和调用相关函数实现实数的相关运算,包括:两个实数间的加、减、乘、除和一个实数的自增、自减、求平方、二次方根等运算。
4.通过选择结构和调用相关函数实现复数的相关运算,包括:两个复数间的加、减、乘、除、求两个复数的夹角和一个复数的取模、求平方、求共轭复数、求单个复数的向量角等运算。
5.通过调用相关函数实现实数、复数信息的输出,显示在显示屏上。
6.通过多次运用选择和循环结构实现对实数、复数运算的选择,在选择了实数或复数运算的前提下,再实现对各种运算的选择,运算结束后还可以选择继续实现其它运算或退出程序。
1.2 程序设计1.2.1概要设计1.系统中的各个实体及它们之间的关系系统中的实体是实数类对象和复数类对象,它们的关系是复数类对象所属的类是由实数类对象所属的类公有派生而来的。
2.系统的类层次程序中建立了两个类,分别是实数类、复数类,复数类是由实数类公有派生而来的。
3.主程序的流程以及各程序模块之间的层次(调用)关系首先从键盘输入数字1或2或0,输入不同数字则进入不同的并列的小程序模块。
复数计算器

loop2:
double a,b,c,d;
cout<<"请输入两个复数:"<<endl;
cout<<"第一个复数:";
cin>>a>>b;
cout<<"第二个复数:";
cout<<"复数二:\n\tsinβ="<<(d/mo2);
cout<<setw(10)<<"cosβ="<<(c/mo2);
cout<<setw(10)<<"tanβ="<<(d/c)<<endl;
}
break;
case CX: //重新输入数值
jsq operator +(const jsq &a)
{
return jsq(r+a.r,i+a.i);
}
jsq operator -(const jsq &a)
{
return jsq(r-a.r,i-a.i);
}
jsq operator *(const jsq &a)
<<"\t\t※ ※" <<endl
<<"\t\t※ 1. 求两数之和. 6.比较大小. ※" <<endl
C++复数计算器

#include<iostream.h>#include<cmath>#include<stdlib.h>#define PAI 3.1415926 //宏定义,将PAI替换为3.1415926class Complex_0 //声明一个名Complex_0的类{public:Complex_0(){real=0;}Complex_0(float r){real=r;} //定义Complex_0类的构造函数Complex_0(float r,float i){real=r;imag=i;}Complex_0 operator+(Complex_0&c1);Complex_0 operator-(Complex_0&c1);Complex_0 operator*(Complex_0&c1);Complex_0 operator/(Complex_0&c1);//在类中声明运算符重载void qiuhe(Complex_0&,Complex_0&);void qiucha(Complex_0&,Complex_0&);void qiuji(Complex_0&,Complex_0&);void qiushang(Complex_0&,Complex_0&);void qumo(Complex_0&);void pingfang(Complex_0&);void gonge(Complex_0&);void dujiao(Complex_0&);void jiajiao(Complex_0&,Complex_0&); //在类Complex_0中声明的成员函数friend istream & operator>>(istream&,Complex_0&);friend ostream & operator<<(ostream&,Complex_0&);//声明Complex_0的两个友元函数protected:float real;float imag; //Complex_0中数据成员,声明为protected};Complex_0 Complex_0::operator+(Complex_0&c1) //运算符+重载函数定义{Complex_0 c;c.real=real+c1.real;c.imag=imag+c1.imag;return c;}Complex_0 Complex_0::operator-(Complex_0&c1) //运算符-重载函数定义{Complex_0 c;c.real=real-c1.real;c.imag=imag-c1.imag;return c;}Complex_0 Complex_0::operator*(Complex_0&c1) //运算符*重载函数定义{Complex_0 c;c.real=real*c1.real-imag*c1.imag;c.imag=imag*c1.real+real*c1.real;return c;}Complex_0 Complex_0::operator/(Complex_0&c1) //运算符/重载函数定义{Complex_0 c;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);return c;}void Complex_0::qiuhe(Complex_0&c1,Complex_0&c2) //类Complex_0中成员函数qiuhe()定义{cout<<"下面进行的是复数和运算:"<<endl;cout<<"请输入一个复数的实部和虚部,中间用空格分开"<<endl;cout<<"a1=";cin>>c1;cout<<"请输入另一个复数的实部和虚部,中间用空格分开"<<endl;cout<<"a2=";cin>>c2;cout<<"这两个数的和是:"<<c1+c2<<endl;}void Complex_0::qiucha(Complex_0&c1,Complex_0&c2) //类Complex_0中成员函数qiucha()定义{cout<<"下面进行的是复数差运算:"<<endl;cout<<"请输入一个复数的实部和虚部,中间用空格分开"<<endl;cout<<"a1=";cin>>c1;cout<<"请输入另一个复数的实部和虚部,中间用空格分开"<<endl;cout<<"a2=";cin>>c2;cout<<"这两个数的和是:"<<c1-c2<<endl;}void Complex_0::qiuji(Complex_0&c1,Complex_0&c2) //类Complex_0中成员函数qiuji()定义{cout<<"下面进行的是复数积运算:"<<endl;cout<<"请输入一个复数的实部和虚部,中间用空格分开"<<endl;cout<<"a1=";cin>>c1;cout<<"请输入另一个复数的实部和虚部,中间用空格分开"<<endl;cout<<"a2=";cin>>c2;cout<<"这两个数的积是:"<<c1*c2<<endl;}void Complex_0::qiushang(Complex_0&c1,Complex_0&c2) //类Complex_0中成员函数qiushang()定义{cout<<"下面进行的是复数商运算:"<<endl;cout<<"请输入一个复数的实部和虚部,中间用空格分开"<<endl;cout<<"a1=";cin>>c1;cout<<"请输入另一个复数的实部和虚部,中间用空格分开"<<endl;cout<<"a2=";cin>>c2;cout<<"这两个数的商是:"<<c1/c2<<endl;}void Complex_0::qumo(Complex_0&c) //类Complex_0中成员函数qumo()定义{cout<<"下面进行的是复数取模运算:"<<endl;cout<<"请输入一个复数的实部和虚部,中间用空格分开"<<endl;cout<<"a=";cin>>c;double m;m=sqrt(c.real*c.real+c.imag*c.imag);cout<<"这个复数的模是:"<<m<<endl;}void Complex_0::pingfang(Complex_0&c1) //类Complex_0中成员函数pingfang()定义{cout<<"下面进行的是复数取平方运算:"<<endl;cout<<"请输入一个复数的实部和虚部,中间用空格分开"<<endl;cout<<"a=";cin>>c1;Complex_0 c;c.real=c1.real*c1.real-c1.imag*c1.imag;c.imag=2*c1.real*c1.imag;cout<<"这个复数的平方是:"<<c<<endl;}void Complex_0::gonge(Complex_0&c1) //类Complex_0中成员函数gonge()定义{cout<<"下面进行的是复数取共轭运算:"<<endl;cout<<"请输入一个复数的实部和虚部,中间用空格分开"<<endl;cout<<"a=";cin>>c1;Complex_0 c;c.real=c1.real;c.imag=-c1.imag;cout<<"这个复数的共轭是:"<<c<<endl;}void Complex_0::dujiao(Complex_0&c1) //类Complex_0中成员函数dujiao()定义{cout<<"下面进行的是复数取向量角运算:"<<endl;cout<<"请输入一个复数的实部和虚部,中间用空格分开"<<endl;cout<<"a=";cin>>c1;double m;m=atan(c1.imag/c1.real)*180/PAI;cout<<"这个复数的向量角是:"<<m<<"'"<<endl;}void Complex_0::jiajiao(Complex_0&c1,Complex_0&c2) //类Complex_0中成员函数jiajiao()定义{cout<<"下面进行的是两复数夹角运算:"<<endl;cout<<"请输入一个复数的实部和虚部,中间用空格分开"<<endl;cout<<"a1=";cin>>c1;cout<<"请输入另一个复数的实部和虚部,中间用空格分开"<<endl;cout<<"a2=";cin>>c2;double m;m=(atan(c1.imag/c1.real)-atan(c2.imag/c2.real))*180/PAI;if(m>=0)cout<<"这两个复数的夹角是:"<<m<<"'"<<endl;elsecout<<"这两个复数的夹角是:"<<-m<<"'"<<endl;}class Real //声明一个名为Real的类{public:Real(){real=0;}Real(float num){real=num;} //类Real中构造函数int qiuhe(Real&,Real&);int qiucha(Real&,Real&);int qiuji(Real&,Real&);int qiushang(Real&,Real&);int zizeng(Real&);int zijian(Real&);int pingfang(Real&);int fanggen(Real&); //Real类中成员函数的函数声明friend istream & operator>>(istream&,Real&);friend ostream & operator<<(ostream&,Real&); //声明Real的两个友元函数protected:float real; //Real类中数据成员,声明为protected};int Real::qiuhe(Real&c1,Real&c2) //类Real中成员函数qiuhe()定义{cout<<"下面进行的是实数和运算:"<<endl;cout<<"请输入一个实数:"<<endl;cout<<"a1=";cin>>c1;cout<<"请输入另一个实数:"<<endl;cout<<"a2=";cout<<"这两个数的和是:"<<c1.real+c2.real<<endl;return 0;}int Real::qiucha(Real&c1,Real&c2) //类Real中成员函数qiucha()定义{cout<<"下面进行的是实数差运算:"<<endl;cout<<"请输入一个实数:"<<endl;cout<<"a1=";cin>>c1;cout<<"请输入另一个实数:"<<endl;cout<<"a2=";cin>>c2;cout<<"这两个数的差是:"<<c1.real-c2.real<<endl;return 0;}int Real::qiuji(Real&c1,Real&c2) //类Real中成员函数qiuji()定义{cout<<"下面进行的是实数积运算:"<<endl;cout<<"请输入一个实数:"<<endl;cout<<"a1=";cin>>c1;cout<<"请输入另一个实数:"<<endl;cout<<"a2=";cin>>c2;double t;t=c1.real*c2.real;cout<<"这两个数的积是:"<<t<<endl;return 0;}int Real::qiushang(Real&c1,Real&c2) //类Real中成员函数qiushang()定义{cout<<"下面进行的是实数商运算:"<<endl;cout<<"请输入一个实数:"<<endl;cout<<"a1=";cin>>c1;cout<<"请输入另一个实数:"<<endl;cout<<"a2=";double t;t=c1.real/c2.real;cout<<"这两个数的和是:"<<t<<endl;return 0;}int Real::zizeng(Real&c1) //类Real中成员函数zizeng()定义{const int m=120,n=121;char x=m,y=n;cout<<"下面进行的是实数自增运算";cout<<"x:自增"<<"y:停止"<<endl;cout<<"a=";cin>>c1;char z;for(int i=0;z;i++){cin>>z;if(z==x){c1.real=c1.real+1;continue;}if(z==y)break;if(z!=x&&z!=y){cout<<"Error!!!";return 0;}}cout<<"执行了"<<i<<"次自增运算:"<<endl;cout<<"执行后a="<<c1.real<<endl;return 0;}int Real::zijian(Real&c1) //类Real中成员函数zijian()定义{const int m=120,n=121;char x=m,y=n;cout<<"下面进行的是实数自减运算";cout<<"请输入一个实数:"<<endl;cout<<"a=";cin>>c1;cout<<"x:自减y:停止"<<endl;cout<<"请输入字母:";char z;for(int i=0;z;i++){cin>>z;if(z==x){c1.real=c1.real-1;continue;}if(z==y)break;if(z!=x&&z!=y){cout<<"Error!!!";return 0;}}cout<<"执行了"<<i<<"次自增运算:"<<endl;cout<<"执行后a="<<c1.real<<endl;return 0;}int Real::pingfang(Real&c1) //类Real中成员函数pingfang()定义{cout<<"下面进行的是实数平方运算:"<<endl;cout<<"请输入一个实数:"<<endl;cout<<"a=";cin>>c1;double t;t=c1.real*c1.real;cout<<"a的平方是:"<<t<<endl;return 0;}int Real::fanggen(Real&c1) //类Real中成员函数fanggen()定义{cout<<"下面进行的是实数方根运算:"<<endl;cout<<"请输入一个实数:"<<endl;cout<<"a=";cin>>c1;double t;if(c1.real>=0)t=sqrt(c1.real);else{cout<<"math error!!!"<<endl;return 0;}cout<<"a的平方根是:"<<t<<endl;return 0;}istream & operator>>(istream &input,Real&c) //输入>>运算符重载函数定义{input>>c.real;return input;}ostream & operator<<(ostream&output,Real&c) //输入<<运算符重载函数定义{output<<c.real<<endl;return output;}istream & operator>>(istream &input,Complex_0&c) //输入>>运算符重载函数定义{input>>c.real>>c.imag;return input;}ostream & operator<<(ostream&output,Complex_0&c) //输入<<运算符重载函数定义{if(c.real!=0&&c.imag>0){output<<"("<<c.real<<"+"<<c.imag<<"i)";return output;}else if(c.real!=0&&c.imag<0){output<<"("<<c.real<<c.imag<<"i)";return output;}else if(c.real==0&&c.imag!=0){output<<c.imag<<"i";return output;}else{output<<c.real;return output;}}int shishu() //定义一个函数shishu(),进行对实数类Real的调用{char x;cout<<"下面进行的是实数运算:"<<endl;cout<<" a:求和"<<" b:求差"<<" "<<"c:求积"<<" d:求商"<<endl;cout<<" e:自增"<<" f:自减"<<" "<<"g:求平方"<<" h:求方根"<<endl;cout<<"请选择实数计算类型,输入计算类型前面字母:"<<endl;cin>>x;Real c1,c2,c3;switch(x) //switch语句用于判断需要进行的判断类型{case 97:c3.qiuhe(c1,c2);break;case 98:c3.qiucha(c1,c2);break;case 99:c3.qiuji(c1,c2);break;case 100:c3.qiushang(c1,c2);break;case 101:c3.zizeng(c1);break;case 102:c3.zijian(c1);break;case 103:c3.pingfang(c1);break;case 104:c3.fanggen(c2);break; //根据判断的结果调用Real类的各个成员函数,实现运算default:cout<<"Error!!!"<<endl;}return 0;}int xushu() //定义一个函数xushu(),进行对复数类Complex_0的调用{char x;cout<<"下面进行的是复数运算:"<<endl;cout<<" a:求和"<<" b:求差"<<" c:求积"<<" d:求商"<<" e:取模"<<endl;cout<<" f:求平方"<<" g:求共轭"<<" h:求向量角"<<" i:求夹角"<<endl;cout<<"请选择复数计算类型,输入计算类型前面字母:"<<endl;cin>>x;Complex_0 c1,c2,c3;switch(x) //switch语句用于判断需要进行的判断类型{case 97:c3.qiuhe(c1,c2);break;case 98:c3.qiucha(c1,c2);break;case 99:c3.qiuji(c1,c2);break;case 100:c3.qiushang(c1,c2);break;case 101:c3.qumo(c1);break;case 102:c3.pingfang(c1);break;case 103:c3.gonge(c1);break;case 104:c3.dujiao(c2);break;case 105:c3.jiajiao(c1,c2);break; //根据判断的结果调用complex_0类的各个成员函数,实现运算default:cout<<"Error!!!"<<endl;}return 0;}int xunhuan() //定义一个函数xunhuan(),完成函数shishu()和xushu()具体调用{cout<<" 实数:R 或r"<<" "<<"复数:X 或x"<<endl;cout<<endl;cout<<"请按上述提示选择计算类型,输入计算类型前的字母:"<<endl;char a;cin>>a;switch(a) //switch语句用于判断需要进行的判断类型{case 'R':shishu();break;case 'r':shishu();break;case 'X':xushu();break;case 'x':xushu();break; //用于判断调用函数,分别具体实现实数或者复数的操作default:cout<<"Error!!!"<<endl;}cout<<"***************************************************************"<<endl; int b;cout<<"1:屏幕上保存运算结果继续运算2:清屏运算结果继续运算3:退出"<<endl;cout<<"请选择:‘1’or‘2’or‘3’"<<endl;cin>>b;switch(b){case 1: cout<<"***************************************************************"<<endl;xu nhuan();break; //函数的嵌套调用,实现循环case 2:system("cls");cout<<endl;cout<<" "<<"复数计算器"<<endl;cout<<endl;xunhuan();break;//运用清屏函数,清除屏幕数据,函数嵌套,实现循环case 3:cout<<"谢谢使用!!!"<<endl;return 0;default:cout<<"Error!!!"<<endl;cout<<"1:屏幕上保存运算结果继续运算2:清屏运算结果继续运算3:退出"<<endl;cout<<"请选择:‘1’or‘2’or‘3’"<<endl;cin>>b; cout<<"***************************************************************"<<endl;xu nhuan();}return 0;}int main() //定义主函数{const int R=82,r=114;const int X=70,x=102;cout<<endl;cout<<" "<<"复数计算器"<<endl;//输出这是一个复数计算器cout<<endl;xunhuan();//调用函数xunhuan()return 0;}。
复数计算器课程设计

复数计算器课程设计-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN目录1 题目内容及设计要求 .......................... 错误!未定义书签。
2 总体设计.............................................. 错误!未定义书签。
总体功能框图.................................. 错误!未定义书签。
类的设计说明 ................................. 错误!未定义书签。
主要算法流程图 ............................. 错误!未定义书签。
3 程序清单及注释................................. 错误!未定义书签。
4 运行结果与分析................................. 错误!未定义书签。
5 总结 .................................................... 错误!未定义书签。
6 参考文献 ............................................ 错误!未定义书签。
1 题目内容及设计要求题目17 复数计算器内容及要求:(1)所设计的复数计算器可以进行+ - * += -= *= ++ -- >= <= == !=运算符,其中>= <=是针对复数的模进行运算。
(2)设计输入重载函数,要求能接收从键盘输入a+bi形式的复数,在程序中可以识别出实部虚部并正确赋值。
(3) 设计计算器测试程序,对加减法进行测试,要求在两位数以内进行,对乘法进行测试,乘法要求为一位数的运算。
(4) 设计记录功能,可以记录下不同用户使用计算器的情况,记录以文件的形式保存在计算机内,开机时要求用户输入用户名,显示该名户以前的记录。
C++课程设计报告复数计算器

目录第一章需求分析 (1)第二章概要设计 (2)第三章详细设计 (4)第四章调试分析 (21)第五章测试结果 (25)第六章课程设计总结 (36)第七章参考文献 (37)第八章附录 (37)第一章需求分析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.运用指针调用两个类的各成员函数分别完成各项计;第二章概要设计2.1构成部分2.1.1系统由三部分构成:实数类(Complex)、复数类(Complex1)、主函数main。
复数计算器

c3.real=c1.real-c2.real; c3.imag=c1.imag-c2.imag; cout<<"("<<c1.real<<","<<c1.imag<<")-("<<c2.real<<","<<c2.imag<<")="<<"(" <<c3.real<<","<<c3.imag<<")"<<endl; } void cheng() //实数乘法运算 {Number a1,a2,a3; cout<<"请输入第一个实数:"; a1.set(); cout<<"请输入第二个实数:"; a2.set(); a3.real=a1.real*a2.real; cout<<a1.real<<"*"<<a2.real<<"="<<a3.real<<endl; } void cheng_2() //复数乘法运算 {Complex c1,c2,c3; cout<<"请输入第一个复数:"<<endl; c1.set(); cout<<"请输入第二个复数:"<<endl; c2.set(); c3.real=c1.real*c2.real-c1.imag*c2.imag; c3.imag=c1.real*c2.imag+c1.imag*c2.real; cout<<"("<<c1.real<<","<<c1.imag<<")*("<<c2.real<<","<<c2.imag<<")="<<" ("<<c3.real<<","<<c3.imag<<")"<<endl; } void chu() //实数除法运算 {Number a1,a2,a3; cout<<"请输入第一个实数:"; a1.set(); cout<<"请输入第二个实数:"; a2.set(); a3.real=a1.real/a2.real; cout<<a1.real<<"/"<<a2.real<<"="<<a3.real<<endl;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++课程设计实验报告学号班级合作者学号班级任课教师时间教师指定题目复数计算器评定难易级别 A级实验报告成绩复数计算器程序功能设计1.程序功能的总体结构复数计算器的程序总体功能可设计成如图1所示,可以看出,复数计算器的各种功能都用菜单选项列出,用户可以根据需要选择相应的菜单项,从而执行不同的子程序以完成相应的功能。
2.课程设计要求(1)一开始运行程序,要有详细的菜单选项界面,用户不选择退出就可以反复运算。
(2)可以进行多个操作数的复数运算,输入0+0*i时为止。
(3)编写可以对输入的复数求模的成员函数。
(4)编写具有测试功能的函数,即计算机能够自动出题,并要求用户计算,同时计算机判断用户计算的对错并打分,要求十题为一个单元,每题一个运算符,运算符包括+,-,*三种,参与加减运算实部虚部为一位数。
(5)重载输入输出运算符,对复数的输入既可采用实部虚部分开提示输入,也可直接输入诸如a+i*b或a+ib这种形式,对复数的输出要考虑实部虚部的正负号,通过判断给出的输出结果。
2.程序设计思想1)类的封装程序中将复数形式的数据定义成一个复数类CComplex,重载了加法及减法等运算符,使函数的加减等运算像一般数据一样方便.每个运算符重载都用一个函数去实现。
参考类的定义如下:class CComplex{private:double Real,Image;public:CComplex(double real=0,double image=0) //构造函数{Real=real;Image=image;}friend istream&operator>>(istream&is,CComplex&); //重载输入friend ostream&operator<<(ostream&os,CComplex&); //重载输出CComplex operator+(CComplex&);CComplex operator-(CComplex&); //减法重载CComplex operator*(CComplex&); //乘法重载CComplex operator/(CComplex&); //除法重载int operator==(CComplex&);int operator!=(CComplex&);int operator>(CComplex&);int operator<(CComplex&);float Module(void); //复数求模};(2)设计的任务要求1在实际应用中,输入复数可能为a+bi, a, bi, -a, -bi, +i. –i. I 等形式。
重载输入运算符应该能识别这样形式多样的复数。
所以在重载输入函数时要综合考虑上述各种输入形式。
可行的处理方式是:在重载输入函数中,设计用(3)设计的任务要求2在程序中设计一个复数运算的测试函数Test(),其功能是让计算机随机出10道运算题,用户给出答案,同时计算机实时判断对错并可以打分。
这个函数的关键是让计算机随机产生复数对象和运算符,计算机部有一个随机数发生器,可以产生一个固定顺序的整型随机数序列,调用语句为“int a = rand();”这时,a就是该随机数发生器产生的随机数。
由于产生的随机书数在整数围,为测试方便,按程序设计要求,产生的随机复数对象实部和虚部在100以,运算符只有加减两种。
因此,需要对产生的随机数进行进一步的处理,用随机数模除以除以100,产生出100以的随机整数;同样,用随机数模除以3,可以产生出0、 1、3三个随机数据,定义0为加法,1为减法,2为乘法,这样就可以产生出随机的复数对象的加减乘运算了。
可以参见图2测试子程序Test()结构框图。
在程序中重载了>>运算符,其功能是让用户能够直接输入a+bi,a+b*i两种形式的复数,其结构框图如图3所示。
N YYN3. 程序界面开始界面将字符转变为数值NY‘i ’是否是最后一个字符当前字符是否是数字输出错误信息,函数返回NN运行结果界面4.程序源代码及详细注解:# include<iostream.h># include<math.h># include<stdlib.h># include<string.h>#define Z 1e-6class CComplex{private:double Real,Image;public:CComplex(double real=0,double image=0) //构造函数{Real=real;Image=image;}friend istream&operator>>(istream&is,CComplex&); //重载输入friend ostream&operator<<(ostream&os,CComplex&); //重载输出CComplex operator+(CComplex&);CComplex operator-(CComplex&); //减法重载CComplex operator*(CComplex&); //乘法重载CComplex operator/(CComplex&); //除法重载int operator==(CComplex&);int operator!=(CComplex&);int operator>(CComplex&);int operator<(CComplex&);float Module(void); //复数求模};CComplex CComplex::operator +(CComplex&) //加法重载{CComplex t; //定义类对象t.Real=Real+.Real; //实部相加t.Image=Image+.Image; //虚部相加return t;}CComplex CComplex::operator -(CComplex&) //减法重载{CComplex t; //定义类对象t.Real=Real-.Real; //实部相减t.Image=Image-.Image; //虚部相减return t;}CComplex CComplex::operator*(CComplex&) //乘法重载{CComplex t; //定义类对象t.Real=Real*.Real-.Image*Image; //乘法实部t.Image=Real*.Image+Image*.Real; //乘法虚部return t;}CComplex CComplex::operator/(CComplex &) //除法重载{CComplex t; //定义类对象t.Real=(Real*.Real+Image*.Image)/(.Real*.Real+.Image*.Image);//除法实部t.Image=(Image*.Real-Real*.Image)/(.Real*.Real+.Image*.Image);//除法虚部return t;}/*int CComplex:: operator!=(CComplex&) //重载“!=”运算符,分别判断复数的实部与虚部{if(*this==)return 0;elsereturn 1;}*/int CComplex:: operator>(CComplex&) //重载“>”运算符,比较复数的模{if(Module()>.Module())return 1; //大于,则返回1elsereturn 0;}int CComplex:: operator<(CComplex&) //重载“<”运算符,比较复数的模{if(Module()<.Module())return 1; //小于,则返回1elsereturn 0;}float CComplex::Module(){float t;t=sqrt(Real*Real+Image*Image);return t;// cin.get();// cin.get();}int CComplex::operator==(CComplex&) //重载“==”运算符,分别判断两个复数对象的实部与虚部{if(Real==.Real&&Image==.Image)return 1; //实部与虚部分别相等返回1else return 0;}void Add(){CComplex a1,a2,sum,f(0,0);cout<<"加法计算"<<endl<<"最少输入两个复数,并以零结束"<<endl; cout<<"第一个复数"<<endl;cin>>a1;cout<<"第二个复数"<<endl;cin>>a2;sum=a1+a2;cout<<"第三个复数"<<endl;cin>>a1;int i=4;while(!(a1==f)){sum=sum+a1;cout<<"第"<<i<<"个复数"<<endl;cin>>a1;i++;}cout<<"结果"<<sum<<endl;cout<<"按任意键继续"<<endl;//cout.flush();cin.get();}void Sub(){CComplex a1,a2,sub,f(0,0);cout<<"减法计算"<<endl<<"最少输入两个复数,并以零结束"<<endl; cout<<"第一个复数"<<endl;cin>>a1;cout<<"第二个复数"<<endl;cin>>a2;sub=a1-a2;cout<<"第三个复数"<<endl;cin>>a1;int i=4;while(!(a1==f)){sub=sub-a1;cout<<"第"<<i<<"个复数"<<endl;cin>>a1;i++;}cout<<"结果:"<<sub<<endl;cout<<"按任意键继续"<<endl;//cout.flush();cin.get();}void Mul(){CComplex a1,a2,mul,f(0,0);cout<<"乘法计算"<<endl<<"最少输入两个复数,并以零结束"<<endl; cout<<"第一个复数"<<endl;cin>>a1;cout<<"第二个复数"<<endl;cin>>a2;mul=a1*a2;cout<<"第三个复数"<<endl;cin>>a1;int i=4;while(!(a1==f)){mul=mul*a1;cout<<"第"<<i<<"个复数"<<endl;cin>>a1;i++;}cout<<"结果:"<<mul<<endl;cout<<"按任意键继续"<<endl;//cout.flush();cin.get();}void Div(){CComplex a1,a2,div,f(0,0);cout<<"除法计算"<<endl<<"最少输入两个复数,并以零结束"<<endl; cout<<"第一个复数"<<endl;cin>>a1;cout<<"第二个复数"<<endl;cin>>a2;div=a1/a2;cout<<"第三个复数"<<endl;cin>>a1;int i=4;while(!(a1==f)){div=div/a1;cout<<"第"<<i<<"个复数"<<endl;cin>>a1;i++;}cout<<"结果:"<<div<<endl;cout<<"按任意键继续"<<endl;//cout.flush();cin.get();}void Compare(void){cout<<" 复数模比较"<<endl;CComplex a1,a2;cout<<"输入两个复数:"<<endl;cout<<"第一个复数:";cin>>a1;cout<<"第二个复数";cin>>a2;if(a1==a2)cout<<"这两个复数相等"<<endl;else if(a1>a2)cout<<a1<<"的模大于"<<a2<<"的模"<<endl;else if(a1<a2)cout<<a1<<"的模小于"<<a2<<"的模"<<endl;cout<<"按任意键继续"<<endl;cin.get();}istream& operator>>(istream&is,CComplex&){ //重载输入,可以输入a+bi,也可以输入a+b*ichar s[100];is>>s; //字符串s用于接收复数int len=strlen(s);int n=0,sign=1; //n为当前从字符串中提取出来的数字,初始化为0;sign为n的符号,初始化为正.Image=.Real=0;if(len==4){for(int k=0;k<len;k++) //判断字符串是否合法{if((s[k]<'0'||s[k]>'9')&&(s[k]!='+'&&s[k]!='-'&&s[k]!='i')){cout<<"Error"<<endl; //若字符串不是1~9的数字或“+”、“-”、“=”则错误,输出Errorreturn is;}}for(k=0;k<len;) //依次识别字符串中和字符{if(n!=0&&(s[k]=='-'||s[k]=='+')) //判断是否为符号位{.Real=sign*n; //是符号,且n!=0,n已被赋值,当前读取的是虚部的符号n=0; //将sign*n的值赋给实部,然后n清零,准备接受虚部的值}if(s[k]=='-'){sign=-1;k++; //给符号标志赋值}if(s[k]=='+'){sign=1;k++; //给符号标志赋值}if(s[k]=='i') //若当前字符为i{if(k!=len-1) //判断i是否为最后一个字符cout<<"error\n"; //若不是,则复数输入格式错误else.Image=sign*n;//是最后一个字符,复数对象已接收完毕,用sign*n给虚部赋值break;}while(s[k]>='0'&&s[k]<='9') //当字符在0~9之间是,将数字字符转化为数字数值{n=n*10+s[k]-'0';k++;}}if(s[len-1]!='i'&&n!=0) //如果最后一个字符不是i,表示复数只有实部,没有虚部.Real=n*sign;return is;}else{for(int k=0;k<len;k++) //依次识别字符串中和字符{if((s[k]<'0'||s[k]>'9')&&(s[k]!='+'&&s[k]!='-'&&s[k]!='i'&&s[k]!= '*'))//若字符串不是1~9的数字或“+”、“-”、“=”、“*”则错误,输出Error{cout<<"Error"<<endl;return is;}}for(k=0;k<len;) //依次识别字符串中和字符{if(n!=0&&(s[k]=='-'||s[k]=='+')) //判断是否为符号位{.Real=sign*n;n=0;}if(s[k]=='-'){sign=-1;k++; //给符号标志赋值}if(s[k]=='+'){sign=1;k++; //给符号标志赋值}if(s[k]=='*') //若当前字符为*{k++;.Image=sign*n;}if(s[k]=='i') //若当前字符为i{if(k!=len-1) //判断i是否为最后一个字符cout<<"error\n"; //若不是,则复数输入格式错误//else//.Image=sign*n;break;}while(s[k]>='0'&&s[k]<='9') //当字符在0~9之间是,将数字字符转化为数字数值{n=n*10+s[k]-'0';k++;}}if(s[len-1]!='i'&&n!=0) //如果最后一个字符不是i,表示复数只有实部,没有虚部.Real=n*sign;return is;}}ostream&operator<<(ostream&os,CComplex&) //重载输出{if(fabs(.Image)<Z) //如果虚部为零os<<.Real; //只输出实部;else if((fabs(.Real)<Z)) //如果实部为零os<<.Image<<"i"; //只输出虚部else if(.Image>0)os<<.Real<<"+"<<.Image<<"i"; //虚部为正,用“+”连接实部与虚部elseos<<.Real<<.Image<<"i"; //虚部为负,虚部的符号连接实部与虚部 return os;}void Test(void){double real1,real2,real3,real4,image1,image2,image3,image4;CComplex answer,f5;int score=0;char op;for(int i=1;i<=10;i++){real1=rand()%200-100; //产生随机的两位数,可正可负 image1=rand()%200-100;real2=rand()%200-100;image2=rand()%200-100;CComplex f1(real1,image1),f2(real2,image2);//用随机产生的两位数初始化类对象real3=rand()%20-10;//产生随机的一位数image3=rand()%20-10;real4=rand()%20-10;image4=rand()%20-10;CComplex f3(real3,image3),f4(real4,image4);//用随机产生的一位数初始化类对象op=rand()%3; //随即产生3种运算符cout<<"第"<<i<<"题:";switch(op){case 0:answer=f1+f2;cout<<f1<<"加上"<<f2<<"等于";break;case 1:answer=f1-f2;cout<<f1<<"减去"<<f2<<"等于";break;case 2: //乘法用实部、虚部都是一位的对象answer=f1*f2;cout<<f1<<"乘以"<<f2<<"等于";break;}cin>>f5;if(answer==f5){ //判断结果是否正确cout<<"此题做对了"<<'\n';cout<<"加十分:"<<'\n';score+=10;} //正确,加十分else{cout<<"此题做错了"<<'\n';cout<<"不得分:"<<'\n'; //错误,不得分}}cout<<"你的最后得分为:"<<score<<endl;}void main(void) //输出程序主菜单,并接收用户选择{char input;CComplex a,b,c,d,e,f,g;system("cls");cout<<"\t这是一个复数计算器程序,拥有以下功能,请按照菜单选择进入功能。