还剩27页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
C++课程设计实验报告姓名学号班级一合作者学号班级—任课教师时间教师指定题目^数计算器评定难易级别A级实验报告成绩复数计算器程序功能设计程序功能的总体结构复数计算器的程序总体功能可设计成如图1所示,可以看出,复数计算器的各种功能都用菜单项选择项列出,用户可以根据需要选择相应的菜单项,从而执行不同的子程序以完成相应的功能课程设计要求
(1)一开始运行程序,要有详细的菜单项选择项界面,用户不选择退出就可以反复运算
(2)可以进行多个操作数的复数运算,输入0+0*i时为止
(3)编写可以对输入的复数求模的成员函数
(4)编写具有测试功能的函数,即计算机能够自动出题,并要求用户计算,同时计算机判断用户计算的对错并打分,要求十题为一个单元,每题一个运算符运算符包括+—,大三种,参与加减运算实部虚部为一位数
(5)重载输入输出运算符,对复数的输入既可采用实部虚局部开提示输入,也可直接输入诸如a+i火b或a+ib这种形式对复数的输出要考虑实部虚部的正负号,通过判断给出的输出结果程序中将复数形式的数据定义成一个复数类CComplex重载了加法及减法等运算符使函数的加减等运算像一般数据一样方便.每个运算符重载都用一个函数去实现参考类的定义如下:classCComplex{private:doub1eRealImage;public:CComplexdoublereal=0doubleimage=0算符应该能识别这样形式多样的复数所以在重载输入函数时要综合考虑上述各种输入形式可行的处理方式是在重载输入函数中,设计用3设计的任务要求2在程序中设计一个复数运算的测试函数Test其功能是让计算机随机出10道运算题,用户给出答案,同时计算机实时判断对错并可以打分这个函数的关键是让计算机随机产生复数对象和运算符,计算机内部有一个随机数发生器,可以产生一个固定顺序的整型随机数序列,调用语句为“inta二rand;”这时,a就是该随机数发生器产生的随机数由于产生的随机书数在整数范围内,为测试方便,按程序设计要求产生的随机复数对象实部和虚部在100以内,运算符只有加减两种因此需要对产生的随机数进行进一步的处理,用随机数模除以除以100产生出100以内的随机整数;同样,用随机数模除以3可以产生出
0、
1、3三个随机数据,定义0为加法,1为减法,2为乘法,这样就可以产生出随机的复数对象的加减乘运算了可以参见图2测试子程序Test结构框图N田两个位有用最后两个随土谿士中土谿士YY谿山山牡E仁峪山山上址仁rAZk~hn峪山M4设计的任务要求3在程序中重载了〉〉运算符,其功能是让用户能够直接输入a+bia+b*i两种形式的复数,其结构框图如图3所示以字符串的当前字符YY输出错误信程序界面开始界面运行结果界面程序源代码及详细注解includeOincludeOincludeOincludeO#defineZle~6classCComplexprivate:doubleRealImage;public:CComplexdoublereal=0doubleimage=0//构造函数{Real=real;Image二image;}friendistreamoperatoristreamisCComplexcom;//重载输入friendostreamoperatorostreamosCComplexcom;//重载输出CComplexoperator+CComplexcom;CComplexoperator-CComplexcom;//减法重载CComplexoperator*CComplexcom;//乘法重载CComplexoperator/CComplexcom;//除法重载intoperator==CComplexcom;intoperator!=CComplexcom;intoperatorCComplexcom;intoperatorCComplexcom;floatModulevoid;〃复数求模};CComplexCComplex::operator+CComplexcom//加法重载{CComplext;〃定义类对象=Real+;〃实部相加=Image+;//虚部相加returnt;}CComplexCComplex::operator-CComplexcom//减法重载{CComplext;//定义类对象=;〃实部相减=;//虚部相减returnt;}CComplexCComplex::operator^CComplexcom//乘法重载{CComplext;//定义类对象二Real*〃乘法实部二Real*+Image*;//乘法虚部returnt;CComplexCComplex::operator/CComplexcom//除法重载{CComplext;〃定义类对象=Real*+Iinage*/*+*;//除法实部=Image**/*+*;//除法虚部returnt;}/*intCComplex::operator!=CComplexcom//重载“!二”运算符,分别判断复数的实部与虚部{if*this二二comreturn0;elsereturn1;intCComplex::operatorCComplexcom{ifModulereturn1;〃大于,那么返回1else〃重载运算符,比拟复数的模return0;}intCComplex::operatorCComplexcom{ifModulereturn1;//小于,那么返回1else〃重载运算符,比拟复数的模return0;}floatCComplex::Module{floatt;t=sqrtReal*Real+Image*Image;returnt;//0;//0;}intCComplex::operator==CComplexcom个复数对象的实部与虚部{ifReal==Image==//重载“二二运算符,分别判断两return1;//实部与虚局部别相等返回1elsereturn0;}voidAdd{CComplexala2sumf00;cout〈〈〃加法计算〃<〈endl〈<〃最少输入两个复数,并以零结束〃〈<endl;cout〈<〃第一个复数z/<<endl;cinal;cout/z第二个复数,zendl;cina2;sum=al+a2;coutzz第三个复数z/endl;cinal;inti=4;while!al==fsum=sum+al;cout〃第〃个复数/zendl;cinal;i++;}cout/z结果z/sumendl;cout〈〃按任意键继续/z«endl;//;0;}voidSubCComplexala2subf00;cout/z减法计算〃〈〈endl〈〈〃最少输入两个复数,并以零结束,zendl;cout/z第一个复数/zendl;cinal;cout〈〃第二个复数z/endl;cina2;sub二al-a2;cout〈〈〃第三个复数/zendl;cinal;inti=4;while!al==fsub=sub~al;cout〈〃第〃〈〈i«〃个复数,,«endl;cinal;i++;}cout〈〈〃结果/zsubendl;cout〈〈〃按任意键继续〃〈endl;//;0;}voidMui{CComplexala2mulf00;cout〈〃乘法计算//endl,最少输入两个复数,并以零结束〃〈endl;cout,z第一个复数z/endl;cinal;cout〈〈〃第二个复数/zendl;cina2;mul=al*a2;cout〈〃第三个复数/zendl;cinal;inti=4;while!al==f{mul=mul*al;cout〈〈〃第〃〈i〃个复数,zendl;cinal;i++;}cout〈〈〃结果〃〈〈mul〈endl;cout〈〃按任意键继续zzendl;//;0;}voidDiv{CComplexala2divf00;cout«/z除法计算〃endl〃最少输入两个复数,并以零结束〃endl;cout〈〈〃第一个复数z/endl;cinal;cout〈〃第二个复数z/endl;cina2;div=al/a2;cout/z第三个复数zzendl;cinal;inti=4;while!al==f{div=div/al;cout«/z第〃〈i〈〈〃个复数/z«endl;cinal;i++;}cout〈〃结果z/divendl;cout〃按任意键继续〃〈endl;//;0;}voidComparevoid{cout〈〃复数模比拟zzendl;CComplexala2;cout〈〃输入两个复数:/zendl;cout«,z第一个复数〃;cinal;cout«/z第二个复数〃;cina2;ifal==a2cout〈”这两个复数相等〃〈endl;elseifala2coutalz,的模大于〃a2〈〃的模z/endl;elseifala2coutalzz的模小于〃〈a2〈〃的模〃〈endl;cout/z按任意键继续〃〈〈endl;0;}istreamoperatoristreamisCComplexcom//重载输入,可以输入a+bi也可以输入a+b*ichars
[100];is»s;//字符串S用于接收复数intlen=strlens;intn=0sign=l;〃n为当前从字符串中提取出来的数字,初始化为0;sign为n的符号,初始化为正==0;iflen==4{forintk=0;klen;k++//判断字符串是否合法{ifs[k]〈O||s[k]9s[k]!=+s[k]!二-s[k]!二i{cout«/zErrorzz«endl;〃假设字符串不是广9的数字或“+“二”那么错误,输出Errorreturnis;}}fork=0;klen;〃依次识别字符串中和字符ifn!二0s[k]二二||s[k]=+//判断是否为符号位{二sign*n;//是符号,且n!=0n已被赋值,当前读取的是虚部的符号n=0;〃将sign*n的值赋给实部,然后n清零,准备接受虚部的值//给符号标志赋值//给符号标志赋值//假设当前字符为i//判断i是否为最后一个字符cout«/zerror\n/z;〃假设不是,那么复数输入格式错误else二sign*n;//是最后一个字符,复数对象已接收完毕,用sign*n给虚部赋值break;}whiles[k]二Os[k]〈二9〃当字符在0~9之间是,将数字字符转化为数字数值{n=n*10+s[k]-O;k++;}ifs[len-l]!=,in!=O//如果最后一个字符不是i表示复数只有实部,没有虚部二n*sign;returnis;}else{forintk=0;klen;k++//依次识别字符串中和字符ifs[k]〈O||s[k]9s[k]!=,+s[k]!=-s[k]!二is[k]!=*//假设字符串不是1〜9的数字或“+、“
二、*”那么错误,输出Errorcout,zError/zendl;returnis;}}fork=0;klen;〃依次识别字符串中和字符{ifn!=0s[k]二二-’||s[k]=+//判断是否为符号位{二sign*n;n=0;}ifs[k]==-sign=-l;k++;//给符号标志赋值}ifs[k]==+signal;k++;//给符号标志赋值ifs[k]==〃假设当前字符为*k++;二sign*n;ifs[k]=iifk!=len-l//判断i是否为最后一个字符cout/zerror\n/z;//假设不是,那么复数输入格式错误//else//二sign*n;break;}whiles[k]=0,s[k]=〃当字符在0〜9之间是,将数字字符转化为数字数值n二n*10+s[k]—O;k++;ifs[lenT]!=in!二0//如果最后一个字符不是i表示复数只有实部没有虚部二n*sign;returnis;ostreamoperatorostreamosCComplexcom〃重载输出iffabsZos;elseiffabsZos««/zi/z;elseif0os〈〈〈〃+〃〈〈〈〃i〃elseos〈〈〈〈〈〈〃i〃;〃虚部为负,虚部的符号连接实部与虚部returnos;}voidTestvoiddoublereallreal2real3real4imagelimage2image3image4;CComplexanswerf5;intscore=0;charop;forinti=l;i=10;i++reall=rand%200~100;//产生随机的两位数,可正可负imagel=rand%200T00;real2=rand%200~100;image2=rand%200~100;CComplexflreallimagelf2real2image2;〃用随机产生的两位数初始化类对象real3=rand%20~10;〃产生随机的一位数image3=rand%20-10;real4=rand%20~10;image4=rand%20-10;CComplexf3real3image3f4real4image4;//用随机产生的一位数初始化类对象op=rand%3;〃随即产生3种运算符cout〈〈〃第〃题〃;switchop{case0:answer=fl+f2;cout«fl«zz加上〃〈f2〈〃等于〃;break;case1:answer二fl-f2;cout«fl«/z减去/z«f2«/z等于〃;break;case2://乘法用实部、虚部都是一位的对象answer二fl*f2;cout«fl«/z乘以/z«f2«/z等于〃;break;}cinf5;ifanswer二二f5{//判断结果是否正确cout〃此题做对了\n;cout«zz加十分\n,;score+=10;}//正确,加十分else{cout«zz此题做错了〃〈〈’\n;cout〈〃不得分:〃〈\n;//错误不得分cout〈〈〃你的最后得分为〃score〈endl;charinput;CComplexabcdefg;systemz/cls/z;cout〈〈〃\t这是一个复数计算器程序,拥有以下功能,请按照菜单项选择择进入功能/zendlendlendl;cout«/z=================================MENU======================================//endl;cout〈〈〃l:复数求模〃〈endl;cout〈〃2:多复数连加运算/z«endl;cout〈〃3:多复数连减运算/zendl;cout/z4:多复数连乘运算/zendl;cout〈〈〃5:多复数连除运算z/endl;cout,z6:进入复数计算测试一次十题〃〈endl;cout〈〃7:复数比拟:〃〈endl;cout,z8:退出zzendl;cout〈〈〃请选择z/endl;do{cin»input;//接受用户选择cout〈〃〃;cout//===============================================================================//end1;switchinput//用switch-case实现功能的多项选择{case,r:{cout〈〃复数求模〃〈〈endl;coutz/请输入一个复数:〃;cina;coutendl;break;}case,2:{Add;break;}case3:Sub;break;}case,4:{Mui;break;case5’Div;break;case6:Test;break;case7:Compare;break;case8’:exit-1;break;default:{cout〈〈〃Badinput〃〈〈〃输入错误,请按任意键后重新输入z/endl;break;}whileinput!=8;〃假设不输入8那么可以不退出一直使用复数计算器。