C++课程设计报告.docx
《C++课程设计报告.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告.docx(40页珍藏版)》请在沃文网上搜索。
1、 C+课程设计报告 学院:信息工程学院姓名:班级:学号:指导老师: 实习题目一【需求规格说明】1、福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE * ? = EDCBA。他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”华生:“我猜也是!”。于是,两人沉默了好久,还是没有算出合适的结果来。请你利用编程技术,找到破解的答案。问题描述:ABCDE代表一个五位数,EDCBA代表这个五位数倒过来输出,用一个五位数乘以一个个位数等于这个五位数倒序输出。问题分析:ABCDE从最小的符合条件的五位数开始遍历,j从1开始遍历,用两个循环控制。【算法设计】(1)设计思想:写一个整型
2、函数InvertedOrder,功能是将一个五位数倒序输出,方便下面if语句判断条件的编写。用for循环从最小的、最后一位不是零且没有重复数字的五位数开始,每循环一次加1,内部套一个for循环,控制?代表的数字从1开始,每次加1。若不符合题设条件继续执行下一次循环,如果符合条件,就用if语句控制跳出循环,最后输出想要的等式。(2)设计表示:InvertedOrder传入参数(一个五位数)ABCDE分开存入数组n中n5=A,B,C,D,E返回倒序后的数InvertedOrdered=EDCBA开始ABCDE=10234;ABCDE10000;ABCDE+ABCDE*j=EDCBA?输出ABCDE
3、*j=EDCBA结束是否j=1;j10;j+否【调试报告】未出现错误。【附录】源程序清单:#include stdafx.h#includeusing namespace std;int n5;int InvertedOrder(int num) /将一个5位数倒序输出int i,m;n4=num%10;m=num/10;for(i=3;i=0;i-) /将5位数的每一位分开,依次储存在整型数组n中ni=m%10;m=m/10;int InvertedOrdered=n4*10000+n3*1000+n2*100+n1*10+n0;/倒序输出return InvertedOrdered;int
4、 _tmain(int argc, _TCHAR* argv)int i,j;for(i=10234;i100000;i+) /从最小的没有重复数字的五位数开始循环for(j=1;j10;j+)if(i*j=InvertedOrder(i)&n0!=n1&n0!=n2&n0!=n3&n0!=n4&n1!=n2&n1!=n3&n1!=n4&n2!=n3&n2!=n4&n3!=n4)break; /符合题目给的条件就跳出循环if(i*j=InvertedOrder(i)&n0!=n1&n0!=n2&n0!=n3&n0!=n4&n1!=n2&n1!=n3&n1!=n4&n2!=n3&n2!=n4&n
5、3!=n4)break; /接着上个跳出继续跳出couti*j=i*jendl;/输出题目要求的等式return 0;运行结果:实习题目二【需求规格说明】2、小明带两个妹妹参加元宵灯会。别人问她们多大了,她们调皮地说:“我们俩的年龄之积是年龄之和的6倍”。小明又补充说:“她们可不是双胞胎,年龄差肯定也不超过8岁啊。” 请你写出:小明的较小的妹妹的年龄。问题描述:设两个人的年龄分别为s、l,s代表年龄较小的妹妹,l代表年龄较大的妹妹。两人的年龄符合s*l=6*(s+l)和l+s8,即可解得s和l的值。问题分析:s和l都从1开始遍历,用两个循环控制。【算法设计】(1)设计思想:用for循环控制s从
6、1开始,每循环一次加1,内部套一个for循环,控制l从1开始,每次加1。若不符合题设条件继续执行下一次循环,如果符合条件,就用if语句控制跳出循环,最后输出想要的等式。(2)设计表示:开始s=1;s100;s+l=s+1;l8+s;l+(s+l)*6=s*l输出s的值是否否【调试报告】未出现错误。【附录】源程序清单:#include stdafx.h#includeusing namespace std;int _tmain(int argc, _TCHAR* argv)int s,l;/s代表年龄较小的妹妹,l代表年龄较大的妹妹for(s=1;s100;s+)/从s=1岁开始循环,最大到99
7、for(l=s+1;l8+s;l+) /用l8+s作为循环控制条件if(s+l)*6=s*l) /满足这个条件就跳出循环break;if(s+l)*6=s*l)/接着上个跳出继续跳出break;cout妹妹的年龄为s岁endl;/得到符合条件的s的值return 0;运行结果:实习题目三【需求规格说明】3、(a+b)的n次幂的展开式中各项的系数很有规律,对于n=2,3,4时分别是:1 2 1, 1 3 3 1,1 4 6 4 1。这些系数构成了著名的杨辉三角形: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1试计算给定n对应的杨辉三角形,输出到文件中。问
8、题描述:计算杨辉三角中的每一个数,按格式输出到文件中。n由用户输入。问题分析:根据排列组合计算(a+b)的n次幂的展开式中各项的系数,需要调用计算阶乘的函数。【算法设计】(1)设计思想:编写函数Factorial计算n的阶乘,调用这个函数在主函数中进行计算,每算出一个就输出到文件中,设置空格和域宽。(2)设计表示:FactorialN=1i=1;i=n;i+N=n*i开始第i行:输出域宽为5的n-1个空格输出计算结果,域宽为5输出空格,域宽为5返回N输入ni=0;i=n;i+结束第i行末尾输出换行n【调试报告】一开始每个需要空的地方只输出了一个空格,因为数字位数不同导致三角形是歪的。设置域宽为
9、5后解决。【附录】源程序清单:#include stdafx.h#include#include#includeusing namespace std;inline double Factorial(int n) /计算n的阶乘double N=1;for(int i=1;i=n;i+)N=N*i;return N;int _tmain(int argc, _TCHAR* argv)ofstream fout(D:YanghuiTriangle.txt);int n;coutn;for(int i=0;i=n;i+) /控制输出n+1行for(int k=1;k=n-i;k+)/控制第i行前面
10、空出n-i个空foutsetw(5) ;/域宽设置为5for(int j=0;j=i;j+)/依次输出第i行的数字foutsetw(5)Factorial(i)/(Factorial(j)*Factorial(i-j)setw(5) ;/杨辉三角的第i行依次为(a+b)(i-1)的系数,根据数学知识计算并输出foutendl;/每一行的末尾输出换行fout.close();cout请打开D:YanghuiTriangle.txt查看输出结果endl;return 0;运行结果:实习题目四【需求规格说明】4、假设图书馆的图书包含书名、编号、作者属性;读者包含姓名和借书证属性;每位读者最多可借5本
11、书,编写程序列出某读者的借书情况。 提示:设计一个基类CObject,从它派生出书类CBook和读者类CReader,在CReader类中有一个rentbook()成员函数用于借阅图书。基类和测试代码已经给出,请完成CBook,CReader类。问题描述:根据基类和给出的测试代码写两个派生类,完成要求的功能。问题分析:在不同的类中通过函数的相互调用,实现借阅功能。【算法设计】(1)设计思想:写CBook类和CReader类,分别用于存放书籍和读者的信息。CBook类新增string型的变量author,用于储存书籍作者的名字。CReader类新增int型的变量bookquantity,用于存储
12、读者借书的数量,CObject类的对象数组BOOK,大小为5,存储读者借的书。另外CReader类还新增rentbook函数和showreader函数,分别用于借书和显示读者信息。rentbook函数的参数设置为CBook类对象,在函数中判断bookquantity的大小,如果小于4就借书,将这个对象赋给成员BOOKbookquantity,如果大于4就提示已达到上限,实现了控制借阅数量的功能。showreader函数中直接调用基类的show函数可以显示当前读者的姓名和编号信息,再用一个for循环,循环中用BOOKi调用show函数,显示所借书籍的书名和编号。(2)设计表示:CObject-n
13、ame20:char-no:int+ CObject ()+CObject(na:char, n:int)+show():voidCBook-author :string+CBook()+CBook(na:char,n:int,auth:string):CObject(na,n)CReader-bookquantity :int-BOOK5 : CBook+CReader(na:char,n:int):CObject(na,n)+showreader():void+rentbook(b:CBook):void【调试报告】一开始不知道如何控制借阅数量,新增一个数据成员后解决。【附录】源程序清单:
14、#include stdafx.h#include#includeusing namespace std;class CObjectprivate:char name20; /用于储存名字信息int no; /用于储存编号信息public:CObject() CObject(char na,int n) strcpy_s(name,na);no=n; void show() coutname(no)endl;class CBook:public CObjectpublic:CBook()CBook(char na,int n,string auth):CObject(na,n)auth=aut
15、hor;private:string author;/用于存储作者的名字信息;class CReader:public CObjectint bookquantity;/给读者加一个数据成员用于存储所借书的总数CBook BOOK5;/定义一个CBook类的对象数组,大小为5public:CReader(char na,int n):CObject(na,n)bookquantity=0;/将对象的bookquantity初始化为0void showreader();void rentbook(CBook b);void CReader:showreader ()cout读者:;show();
16、/调用基类的show函数以输出名字信息cout所借图书:endl;for(int i=0;ibookquantity;i+)couti+1:;/i+1代表第几本书BOOKi.show();/输出第i+1本书的名字信息void CReader:rentbook(CBook b)if(bookquantity5) /当借的书不足5本时(此时bookquantity4)BOOKbookquantity=b; /把对象b的值赋给对象数组中的BOOKbookquantitybookquantity+; /然后让bookquantity自增else /当借的书达到5本时(此时bookquantity=4)
17、输出警告cout您借的书已达上限!endl;int _tmain(int argc, _TCHAR* argv)CBook b1(面向对象程序设计,100,郑莉),b2(数据结构,110,严蔚敏); CReader r1(王华,1234); r1.rentbook(b1); r1.rentbook(b2); r1.showreader(); return 0;运行结果:实习题目五【需求规格说明】5、栈模板及其实例的使用:(1)利用类模板实现一个通用的栈模板。要求这个栈模板能够完成一般栈的基本操作(栈元素为基本数据类型,不包括指针、数组以及对象):向栈中压入一个元素(push)、取栈顶元素的值(
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 报告