c“加”“加”动态数组加无限内存人员管理系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

“信息与计算科学”专业《C++语言程序设计》课程设计班级计算科学姓名学号指导教师设计日期2016·春·19周~20周(一)、设计菜单选择程序。菜单是应用程序的界面,通过控制语句改变程序执行的顺序,设计菜单是程序设计的基础。本设计分两步:第一步:设计一个菜单程序。1.菜单内容:程序运行后,给出3个菜单项的内容和输入提示,如下:1)利用克莱姆法则求解线性方程组2)统计一篇英文文章的单词数3)退出程序第二步:为上述菜单项配上相应的功能。1.流程图:开始选择运算求解线性方程组求解单词的个数退出结束2.程序优缺点:优点:采用了动态开辟二维数组,传递不知道大小的二维数组,程序规范,可读性强。缺点:采用递归算法,增加了程序的时间复杂度。3.代码段:#includeiostream#includestring#includestdlib.h#includewindows.husingnamespacestd;double**open_up(introw,intline);doublePrice(introw,intline,double*a);voidHead();voidCramer();voidStatis_Words();intmain(){charch;//选择变量while(1){Head();cout\t\t选择要进行的程序:endl;ch=cin.get();coutendl;switch(ch){case'1':system(cls);Cramer();break;case'2':system(cls);Statis_Words();break;case'3':system(cls);cout退出程序endl;exit(0);break;default:system(cls);cout\t\t输入有误endl;}cin.get();}return0;}voidHead(){cout\t\t菜单选择程序endl;cout\t\tendl;cout\t\tendl;cout\t\t1.克莱姆法则解线性方程组endl;cout\t\t2.统计英语文章单词数endl;cout\t\t3.结束endl;cout\t\tendl;cout\t\tendl;}voidCramer(){intm=0,n=0,i=0,k=0,j=0,h=0;doubleQuit=0.0,l=0.0;double**a=open_up(15,15);//动态开辟二维数组double**e=open_up(15,15);//动态开辟二维数组double**T=open_up(15,15);//动态开辟二维数组double**W=open_up(15,15);//动态开辟二维数组doubleP[15]={0.0},d[15]={0.0};cout\t\t克莱姆法则计算矩阵的值endl;cout输入所求线性方程组的系数矩阵;cout输入行数m和列数nendl;cinmn;cout输入矩阵endl;for(i=0;im;i++){for(j=0;jn;j++){cina[i][j];}}coutendl;Quit=Price(n,n,(double*)a);cout系数矩阵的值为:Quitendl;cout输入方程组的解矩阵endl;for(i=0;in;i++){cind[i];}for(i=0;im;i++){for(j=0;jn;j++){e[i][j]=a[i][j];}}for(j=0;jn;j++){for(i=0;im;i++){a[i][j]=d[i];}for(i=0;im;i++){P[j]=Price(n,n,(double*)a)/Quit;//强制类型转换}coutx[j]=P[j]endl;for(h=0;hm;h++)//重置矩阵{a[h][j]=e[h][j];}}}voidStatis_Words(){charch='\0';intcount=0,word=0;cout输入一片英语文章以零结尾\nendl;while((ch=cin.get())!='0'){if((ch=0&&ch=64)||(ch=91&&ch=96)||(ch122&&ch127))//判断是否为{word=0;}else{if(0==word){word=1;count++;}}}cout文章一共有count个单词endl;}doublePrice(introw,intline,double*a)//求矩阵行列式的递归函数{inti=0,j=0,c=0,p=0,q=0;doublesum=0;double**ele=open_up(row,line);//动态开辟二维数组if(row==1){return*a;}for(i=0;irow;i++)//递归法求解行列式的值{for(c=0;crow;c++){if(ci){p=0;}else{p=1;}for(j=0;jrow-1;j++){ele[c][j]=*(a+row*(c+p)+(j+1));}}if(i%2==0){q=1;}else{q=-1;}sum+=*(a+i*row+0)*q*Price(row-1,row-1,(double*)ele);}returnsum;}double**open_up(introw,intline)//动态开辟二维数组{double**ele=newdouble*[row];for(inti=0;irow;i++){ele[i]=newdouble[line];}returnele;}4.程序运行截图:(二)、有理数的四则运算。有理数就是两个整数的比率,通常表示为/ab,分母b不能为0。本设计要求设计一个Rational(有理数)类,实现有理数的四则运算,该类型的对象使用起来要像使用基本类型的对象一样自然。具体要求如下:1.抽象Ration类,包含两个数据成员(分子、分母),比如有理数1/2可以用对象r表示为(1,2)r。2.如果分子分母有公约数,应该约分,例如4/6应表示为2/3。根据需要,有时要将1/2表示为0.5,或者将0.5表示为1/2重载相应的运算符(输入、输出、加、减、乘、除)。比如,要计算1/41/23/4,希望像普通加法一样操作,1(1,4)r和2(1,2)r相加得(3,4)r,算数表达式为12rrr。又如,想使用如下形式直接输入分子分母cinr;1/6//输入coutr;1/6//输出则需要重载这两个流运算符。1.流程图:2.程序优缺点:优点:采用了友元函数实现运算符重载,使用windows命名规则程序规范,可读性强,使用外部接口让程序更安全。缺点:部分函数为类的友元函数,破坏了类的完整性。开始创建分数对象执行加法执行除法执行乘法执行减法开始创建分数对象执行除法执行加法执行乘法开始创建分数对象执行除法小数转换转换结束执行减法执行加法执行乘法开始创建分数对象执行除法3.代码段:#includeiostream#includestdlib.husingnamespacestd;intgcd(inta,intb);classRation{public:Ration(inta=0,intb=0):numer(a),denom(b){}voiddecide();voidtrans();voidinput();friendRationoperator-(Rationc1,Rationc2);friendRationoperator+(Rationc1,Rationc2);friendRationoperator*(Rationc1,Rationc2);friendRationoperator/(Rationc1,Rationc2);friendintgcd(inta,intb);friendistream&operator(istream&in,Ration&c);friendostream&operator(ostream&out,Ration&c);private:intnumer;intdenom;};voidRation::trans()//转变为小数{decide();doublec=(double)numer/(double)denom;cout小数形式为cendl;}voidRation::decide()//判别是否可以写成分数{if(0==denom){cout分母不能为零;exit(0);}}Rationoperator+(Rationc1,Rationc2){c1.decide();c2.decide();Rationc3;if(c1.denom==c2.denom){c3.denom=c2.denom;c3.numer=c1.numer+c2.numer;}else{c3.denom=c1.denom*c2.denom/gcd(c1.denom,c2.denom);c3.numer=c1.numer*c3.denom/c1.denom+c2.numer*c3.denom/c2.denom;}returnc3;}Rationoperator-(Rationc1,Rationc2){c1.decide();c2.decide();Rationc3;if(c1.denom==c2.denom){c3.denom=c2.denom;c3.numer=c1.numer-c2.numer;}else{c3.denom=c1.denom*c2.denom/gcd(c1.denom,c2.denom);c3.numer=c1.numer*c3.denom/c1.denom-c2.numer*c3.denom/c2.denom;}returnc3;}Rationoperator*(Rationc1,Rationc2){c1.decide();c2.decide();Rationc3;c3.denom=c1.denom*c2.denom;c3.numer=c1.numer*c2.numer;returnc3;}Rationoperator/(Rationc1,Rationc2){c1.decide();c2.decide();Rationc3;c3.numer=c1.numer*c2.denom;c3.denom=c1.denom*c2.numer;returnc3;}istream&operator(istream&in,Ration&c){//c.decide();cout输入分子分母\n;inc.numer;cin.get();inc.denom;returnin;}ostream&operator(ostream&out,Ration&c){//c.decide();if(c.numer!=0){intGCD=gcd(c.numer,c.denom);if(GCD=1){outc.numer/c.denomendl;}else{outc.numer/GCD'/'c.denom/GCDendl;}}else{out'0''\n';}returnout;}intgcd(inta,intb)//求最小公倍数{intn=b;intc=a%b;while(c!=0){a=b;b=c;c=a%b;}returnb;}intmain(){RationA;RationB;Rationc;cout请输入分数Aendl;cinA;cout请输入分数Bendl;cinB;coutB=B;coutA=A;c=B/A;coutc=B/A=cen

1 / 60
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功