C课程设计复数计算器_第1页
C课程设计复数计算器_第2页
C课程设计复数计算器_第3页
C课程设计复数计算器_第4页
C课程设计复数计算器_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、C+课程设计实验报告姓名学号班级合作者学号班级任课教师时间教师指定题目复数计算器评定难易级别A级实验报告成绩复数计算器程序功能设计12 程序功能的总体结构复数计算器的程序总体功能可设计成如图1所示, 可以看出,复数计算 器的各种功能都用菜单选项列出,用户可以根据需要选择相应的菜单 项,从而执行不同的子程序以完成相应的功能。2课程设计要求(1)(2)一开始运行程序,要有详细的菜单选项界面,用户不选择退出就可以 反复运算。(3)( 4)可以进行多个操作数的复数运算,输入 00i 时为止。(5)(6)编写可以对输入的复数求模的成员函数。(7)(8)编写具有测试功能的函数, 即计算机能够自动出题, 并

2、要求用户计算, 同时计算机判断用户计算的对错并打分,要求十题为一个单元,每题 一个运算符,运算符包括,三种,参与加减运算实部虚部为一位数。(9) (10)重载输入输出运算符,对复数的输入既可米用实部虚部分开提示输入,也可直接输入诸如a+或a+ib这种形式,对复数的输出要考虑实部虚部的正负号,通过判断给出的输出结果。4 程序设计思想1)类的封装程序中将复数形式的数据定义成一个复数类CComplex, 重载了加法及减法等运算符 ,使函数的加减等运算像一般数据一样方便 .每个运算符重载都用 一个函数去实现。参考类的定义如下:class CComplexprivate:double Real,Imag

3、e;public:CComplex(double real=0,double image=O) -. I 等形式。重载输入 运算符应该能识别这样形式多样的复数。 所以在重载输入函数时要综合考虑 上述各种输入形式。可行的处理方式是:在重载输入函数中,设计用(3)设计的任务要求 23.在程序中设计一个复数运算的测试函数Test (),其功能是让计算机随机出10道运算题,用户给出答案,同时计算机实时判断对错并可 以打分。这个函数的关键是让计算机随机产生复数对象和运算符,计算机内部有一个随机数发生器,可以产生一个固定顺序的整型随机数 序列,调用语句为“ int a = rand ();”这时,a就是该

4、随机数发生器 产生的随机数。由于产生的随机书数在整数范围内,为测试方便,按程序设计要求,产生的随机复数对象实部和虚部在 100以内,运算符只有加减两 种。因此,需要对产生的随机数进行进一步的处理,用随机数模除以除以100,产生出100以内的随机整数;同样,用随机数模除以 3, 可以产生出0、 1、3三个随机数据,定义0为加法,1为减法,2 为乘法,这样就可以产生出随机的复数对象的加减乘运算了。可以参见图2测试子程序Test ()结构框图。产生8个100前两个随机数后两个随机数产生$以内的用两个随机数最后两个随机数NYYoYY是否判别完字符N当前字符为字符串是否存在非法字符最后一个字符不(4)设

5、计的任务要求3在程序中重载了 运算符,其功能是让用户能够直接输入a+bi,a+b*i两种形式的复数,其结构框图如图3所示以字符串的形式N复数对象只有实部,前面输出错误信 息,函数返回当前字符是5.6. 程序界面开始界面运行结果界面4.程序源代码及详细注解:# in clude# in clude# in clude# in clude#defi ne Z 1e-6class CComplexprivate:double Real,lmage;public:CComplex(double real=0,double image=0) / 构造函数Real=real;Image=image;fri

6、end istream&operator(istream&is,CComplex&com); /重载输入friend ostream&operator(CComplex&com);int operator(CComplex&com)/ 重载“”运算符,比较复数的模if(Module()()return 1;/ 大于,则返回 1elsereturn 0;int CComplex: operator(CComplex&com)/重载“”运算符,比较复数的模if(Module()a1;float t;t=sqrt(Real*Real+Image*Image);return t;/ ();/ ();i

7、nt CComplex:operator=(CComplex&com)/重载“ =”运算符,分别判断两个复数对象的实部与虚部if(Real=&Image=return 1;/实部与虚部分别相等返回 1else return 0;void Add()CComplex a1,a2,sum,f(0,0);coutvv加法计算endlvv最少输入两个复数,并以零结束endl;cout第一个复数a1;cout第二个复数a2;sum=a1+a2;int i=4;while(!(a1=f)sum=sum+a1;cout第i个复数a1;i+;cout结果vvsumvve ndl;cout按任意键继续endl;

8、/();();void Sub()CComplex a1,a2,sub,f(0,0);endl;coutvv减法计算endlvv最少输入两个复数,并以零结束cout第一个复数a1;cout第二个复数a2;sub=a1-a2;int i=4;while(!(a1=f)sub=sub-a1;cout第i个复数a1;i+;cout结果:vvsubvvendl;cout按任意键继续endl;/();();void Mul()CComplex a1,a2,mul,f(0,0);endl;coutvv乘法计算endlvv最少输入两个复数,并以零结束cout第一个复数a1;cout第二个复数a2;mul=a

9、1*a2;int i=4;while(!(a1=f)mul=mul*a1;cout第i个复数a1;i+;cout结果:vvmulvvendl;cout按任意键继续endl;/();();void Div()CComplex a1,a2,div,f(0,0);endl;coutvv除法计算endlvv最少输入两个复数,并以零结束cout第一个复数a1;cout第二个复数a2;div=a1/a2;cout第三个复数a1;int i=4;while(!(a1=f)div=div/a1;cout第i个复数a1;i+;cout结果:vvdivvvendl;cout按任意键继续endl;/();();vo

10、id Compare(void)复数模比较coutendl;CComplex a1,a2;cout输入两个复数:a1;cout第二个复数;cina2;if(a1=a2)coutvv这两个复数相等a2)couta1的模大于a2的模endl;else if(a1a2)coutvvalvv的模小于a2的模endl;cout按任意键继续(istream&is,CComplex&com)/重载输入,可以输入a+bi,也可以输入a+b*ichar s100;iss;/字符串 s 用于接收复数int len=strlen(s);int n=0,sign=1;/n 为当前从字符串中提取出来的数字,初始化为0;

11、sign为n的符号,初始化为正=0;if(len=4)for(int k=0;klen;k+)/判断字符串是否合法if(sk9)&(sk!=+&sk!=-&sk!=i)coutErrorendl;/若字符串不是 19 的数字或“ +”、“-”、“ =”则错误,输出 Errorreturn is;for(k=0;klen;)/依次识别字符串中和字符if(n!=0&(sk=-|sk=+)/判断是否为符号位=sign*n;/是符号,且 n!=0,n 已被赋值,当前读取的是虚部的符号n=0; /将 sign*n 的值赋给实部,然后 n 清零,准备接受虚部的值if(sk=-)sign=-1;k+; /给

12、符号标志赋值if(sk=+)sign=1;k+;/ 给符号标志赋值if(k!=len-1)/判断 i 是否为最后一个字符cout=0&sk=9) /当字符在 09 之间是,将数字字符转化 为数字数值n=n*10+sk-0;k+;if(sle n-1!=i&n !=0)如果最后一个字符不是i,表示复数只有实部,没有虚部=n*sign;return is;elsefor(int k=0;klen;k+)/依次识别字符串中和字符if(sk9)&(sk!=+&sk!=-&sk!=i&sk!=*)/若字符串不是 19 的数字或“ +”、“-”、“=”、“* ”则错误,输出 ErrorcoutErrore

13、ndl;return is;for(k=0;klen;) /依次识别字符串中和字符if(n!=0&(sk=-|sk=+) / 判断是否为符号位=sign*n;n=0;if(sk=-)sign=-1;k+; /给符号标志赋值if(sk=+)sign=1;k+; /给符号标志赋值if(sk=*)/若当前字符为 *k+;=sign*n;if(sk=i) /若当前字符为 iif(k!=len-1)/判断 i 是否为最后一个字符cout=0&sk=9)/当字符在 09 之间是,将数字字符转化为数字数值n=n*10+sk-0;k+;if(slen-1!=i&n!=0)/如果最后一个字符不是 i ,表示复数

14、只有实部,没有虚部=n*sign;return is;ostream&operator(ostream&os,CComplex&com) /重载输出if(fabsZ)/如果虚部为零os; / 只输出实部;else if(fabsZ) / 如果实部为零os0)os+i;/虚部为正,用“ +”连接实部与虚部elseosi; /虚部为负,虚部的符号连接实部与虚部 return os;void Test(void)double real1,real2,real3,real4,image1,image2,image3,image4;CComplex answer,f5;int score=0;char

15、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(r

16、eal4,image4);/用随机产生的一位数初始化类对象op=rand()%3; / 随即产生 3 种运算符coutvv第vvivv题:;switch(op)case 0:answer=f1+f2;coutvvflvv加上vvf2vv等于;break;case 1:answer=f1-f2;coutvvflvv减去vvf2vv等于;break;case 2:/乘法用实部、虚部都是一位的对象answer=f1*f2;coutvvflvv乘以f2f5;if(answer=f5)/ 判断结果是否正确coutvv此题做对了 n;coutvv加十分:n;score+=10;/正确,加十分elsecou

17、tvv此题做错了 vn;coutvv不得分:vvn;/错误,不得分coutvv你的最后得分为:vvscorevve ndl;char input;CComplex a,b,c,d,e,f,g;system(cls);coutt 这是一个复数计算器程序,拥有以下功能,请按照菜单选择进入功 能。 endlendlendl;cout=MENU= =endl;cout1: 复数求模 endl;cout2:多复数连加运算endl;cout3:多复数连减运算endl;cout4:多复数连乘运算endl;cout5: 多复数连除运算 endl;cout6:进入复数计算测试(一次十题)e ndl;cout7:复数比较:endl;cout8:退出endl;cout请选择input;/接受用户选择cout;cout=endl;switch(input)用switc

温馨提示

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

评论

0/150

提交评论