《C专业课程设计复数计算器.doc》由会员分享,可在线阅读,更多相关《C专业课程设计复数计算器.doc(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C+课程设计试验汇报姓名 学号 班级 合作者 学号 班级 任课老师 时间 老师指定题目 复数计算器 评定难易等级 A级 试验汇报成绩 复数计算器程序功效设计1 程序功效总体结构复数计算器程序总体功效可设计成图所表示,能够看出,复数计算器多种功效全部用菜单选项列出,用户能够依据需要选择对应菜单项,从而实施不一样子程序以完成对应功效。2课程设计要求(1) 一开始运行程序,要有具体菜单选项界面,用户不选择退出就能够反复运算。(2) 能够进行多个操作数复数运算,输入00i时为止。(3) 编写能够对输入复数求模组员函数。(4) 编写含有测试功效函数,即计算机能够自动出题,并要求用户计算,同时计算机判定用
2、户计算对错并打分,要求十题为一个单元,每题一个运算符,运算符包含,三种,参与加减运算实部虚部为一位数。(5) 重载输入输出运算符,对复数输入既可采取实部虚部分开提醒输入,也可直接输入诸如或这种形式,对复数输出要考虑实部虚部正负号,经过判定给出输出结果。开始输出菜单及提醒信息输入选择是否做加法 N是否做减法 N Y是否进行测试 N加法子程序Add() Y . . . . . . 减法子程序 Y测试子程序是否退出 N Y结束 2 程序设计思想1)类封装程序中将复数形式数据定义成一个复数类CComplex,重载了加法及减法等运算符,使函数加减等运算像通常数据一样方便.每个运算符重载全部用一个函数去实
3、现。参考类定义以下:class CComplexprivate:double Real,Image;public:CComplex(double real=0,double image=0) /结构函数Real=real;Image=image;friend istream&operator(istream&is,CComplex&com); /重载输入friend ostream&operator(CComplex&com);int operator运算符,其功效是让用户能够直接输入a+bi,a+b*i两种形式复数,其结构框图图3所表示。 以字符串形式接收复数对象求字符串长度初试化目前数值n
4、=0,字符变量 sign=1字符串是否存在非法字符 Y输犯错误信息,函数返回是否判别完字符串中全部字符 N Y最终一个字符不是i且n!=0目前字符为+、号,同时n!=0 N复数对象只有实部,前面取出数值赋给实部 N前面取出数值赋给实部,n=0 N结束目前字符是否是+ NSign=1,k+目前字符是否是 NSign=1,k+目前字符是否是为i i是否是最终一个字符 N YYN输犯错误信息,函数返回 目前字符是否是数字字符NN将字符转变为数值NY3 程序界面开始界面运行结果界面4程序源代码及具体注解:# include# include# include# include#define Z 1e-
5、6class CComplexprivate:double Real,Image;public:CComplex(double real=0,double image=0) /结构函数Real=real;Image=image;friend istream&operator(istream&is,CComplex&com); /重载输入friend ostream&operator(CComplex&com);int operator(CComplex&com) /重载“”运算符,比较复数模if(Module()com.Module()return 1; /大于,则返回1else return
6、 0;int CComplex: operator(CComplex&com) /重载“”运算符,比较复数模if(Module()com.Module()return 1; /小于,则返回1else return 0;float CComplex:Module()float t;t=sqrt(Real*Real+Image*Image);return t;/cin.get();/cin.get();int CComplex:operator=(CComplex&com) /重载“=”运算符,分别判定两个复数对象实部和虚部if(Real=com.Real&Image=com.Image)retu
7、rn 1; /实部和虚部分别相等返回1else return 0;void Add()CComplex a1,a2,sum,f(0,0);cout加法计算endl最少输入两个复数,并以零结束endl;cout第一个复数a1;cout第二个复数a2;sum=a1+a2;cout第三个复数a1;int i=4;while(!(a1=f) sum=sum+a1; cout第i个复数a1;i+;cout结果sumendl;cout按任意键继续endl;/cout.flush();cin.get();void Sub()CComplex a1,a2,sub,f(0,0);cout减法计算endl最少输入
8、两个复数,并以零结束endl;cout第一个复数a1;cout第二个复数a2;sub=a1-a2;cout第三个复数a1;int i=4;while(!(a1=f) sub=sub-a1; cout第i个复数a1;i+;cout结果:subendl;cout按任意键继续endl;/cout.flush();cin.get();void Mul()CComplex a1,a2,mul,f(0,0);cout乘法计算endl最少输入两个复数,并以零结束endl;cout第一个复数a1;cout第二个复数a2;mul=a1*a2;cout第三个复数a1;int i=4;while(!(a1=f) m
9、ul=mul*a1; cout第i个复数a1;i+;cout结果:mulendl;cout按任意键继续endl;/cout.flush();cin.get();void Div()CComplex a1,a2,div,f(0,0);cout除法计算endl最少输入两个复数,并以零结束endl;cout第一个复数a1;cout第二个复数a2;div=a1/a2;cout第三个复数a1;int i=4;while(!(a1=f) div=div/a1; cout第i个复数a1;i+;cout结果:divendl;cout按任意键继续endl;/cout.flush();cin.get();void
10、 Compare(void)cout 复数模比较 endl; CComplex a1,a2;cout输入两个复数:endl;couta1;couta2;if(a1=a2)cout这两个复数相等a2)couta1模大于a2模endl;else if(a1a2)couta1模小于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;sign为n符号,
11、初始化为正com.Image=com.Real=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=+) /判定是否为符号位com.Real=sign*n; /是符号,且n!=0,n已被赋值,目前读取是虚部符号 n=0; /将sign*n值赋给实部,然后n清零,准备接收虚部值 if(sk=-)sign=-
12、1;k+; /给符号标志赋值 if(sk=+)sign=1;k+; /给符号标志赋值 if(sk=i) /若目前字符为i if(k!=len-1) /判定i是否为最终一个字符cout=0&sk=9) /当字符在09之间是,将数字字符转化为数字数值n=n*10+sk-0;k+;if(slen-1!=i&n!=0) /假如最终一个字符不是i,表示复数只有实部,没有虚部com.Real=n*sign;return is;elsefor(int k=0;klen;k+) /依次识别字符串中和字符if(sk9)&(sk!=+&sk!=-&sk!=i&sk!=*) /若字符串不是19数字或“+”、“-”、
13、“=”、“*”则错误,输出ErrorcoutErrorendl;return is;for(k=0;klen;) /依次识别字符串中和字符if(n!=0&(sk=-|sk=+) /判定是否为符号位com.Real=sign*n;n=0; if(sk=-)sign=-1;k+; /给符号标志赋值 if(sk=+)sign=1;k+; /给符号标志赋值 if(sk=*) /若目前字符为*k+;com.Image=sign*n; if(sk=i) /若目前字符为i if(k!=len-1) /判定i是否为最终一个字符cout=0&sk=9) /当字符在09之间是,将数字字符转化为数字数值n=n*10
14、+sk-0;k+;if(slen-1!=i&n!=0) /假如最终一个字符不是i,表示复数只有实部,没有虚部com.Real=n*sign;return is;ostream&operator(ostream&os,CComplex&com) /重载输出if(fabs(com.Image)Z) /假如虚部为零 oscom.Real; /只输出实部; else if(fabs(com.Real)Z) /假如实部为零 oscom.Image0) oscom.Real+com.Imagei; /虚部为正,用“+”连接实部和虚部else oscom.Realcom.Imagei; /虚部为负,虚部符号
15、连接实部和虚部 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); /用
16、随机产生两位数初始化类对象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;coutf1加上f2等于;break; case 1:answer=f1-f2;coutf1减去f2等于;break;case 2: /乘法用实部、虚部全部
17、是一位对象 answer=f1*f2;coutf1乘以f2f5;if(answer=f5) /判定结果是否正确cout此题做对了n; cout加十分:n;score+=10; /正确,加十分elsecout此题做错了n; cout不得分:n; /错误,不得分cout你最终得分为:scoreendl;void main(void) /输出程序主菜单,并接收用户选择char input;CComplex a,b,c,d,e,f,g;system(cls);coutt这是一个复数计算器程序,拥有以下功效,请根据菜单选择进入功效。endlendlendl;cout=MENU=endl;cout1:复数
18、求模endl; cout2:多复数连加运算endl; cout3:多复数连减运算endl; cout4:多复数连乘运算endl;cout5:多复数连除运算endl; cout6:进入复数计算测试(一次十题)endl; cout7:复数比较:endl; cout8:退出endl;cout请选择input; /接收用户选择cout;cout=endl;switch(input) /用switch-case实现功效多项选择case1:cout 复数求模 endl;couta;couta.Module()endl;break;case2:Add();break; case3:Sub();break;case4: Mul();break; case5:Div();break; case6:Test(); break;case7:Compare();break;case8:exit(-1); break;default:coutBad input输入错误,请按任意键后重新输入endl;break;while(input!=8);/若不输入8,则能够不退出一直使用复数计算器