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)、取栈顶元素的值(
18、top)、弹出栈顶元素(pop)、清空栈(empty)、判断栈是否为空(isEmpty)。(2) 编写一段主程序,要求主程序中生成整型、浮点型、字符型的栈实例各一个并分别测试其功能。问题描述:写一个简单的栈模板,在主函数中测试。问题分析:根据要求实现栈模板内各个函数的功能。【算法设计】(1)设计思想:top是栈模板内的一个数据成员,构造函数中将top初始化为-1,表示栈内有多少个元素。还有一个list数组,大小是固定的,这里设为50。push函数的功能是向栈中压入一个元素:参数设置为T的常成员,函数中将top加1,再将常成员的值存到数组list中。top1函数的功能是取栈顶元素的值:判断top
19、不等于-1时直接返回listtop,若等于-1则输出“栈为空!”。pop函数的功能是弹出栈顶元素:返回listtop后让top自减。empty函数的功能是清空栈:让top等于初始值-1。isEmpty函数的功能是判断栈是否为空:若top等于-1则返回真。(2)设计表示:TStack-listSIZE:T-top:int+Stack()+push(t:const T &): void+top1():const T &+pop():T+empty():void+isEmpty():bool【调试报告】未出现错误。【附录】源程序清单:#include stdafx.h#includeusing na
20、mespace std;#ifndef STACK_H#define STACK_Htemplateclass StackT listSIZE;int top;public:Stack();void push(const T &t);/向栈中压入一个元素const T &top1();/取栈顶元素的值T pop();/弹出栈顶元素void empty();/清空栈bool isEmpty();/判断栈是否为空;templateStack:Stack()top=-1;templatevoid Stack:push(const T &t)top+;listtop=t;templateconst T
21、 &Stack:top1()if(top=-1)cout栈为空!endl;return -1;elsereturn listtop;templateT Stack:pop()return listtop-;templatevoid Stack:empty()top=-1;templatebool Stack:isEmpty()return top=-1;#endifint _tmain(int argc, _TCHAR* argv)/主程序中生成整型、浮点型、字符型的栈实例各一个并分别测试其功能。cout-整型-endl;StackINT;if(INT.isEmpty()cout整型栈为空!e
22、ndl;elsecout整型栈不为空!endl;INT.push(123);INT.push(456);if(INT.isEmpty()cout整型栈为空!endl;elsecout整型栈不为空!endl;coutINT.top1()endl;coutINT.pop()endl;coutINT.top1()endl;INT.empty();if(INT.isEmpty()cout整型栈为空!endl;elsecout整型栈不为空!endl;cout-浮点型-endl;StackFLOAT;if(FLOAT.isEmpty()cout浮点型栈为空!endl;elsecout浮点型栈不为空!end
23、l;FLOAT.push(123.1);FLOAT.push(456.1);if(FLOAT.isEmpty()cout浮点型栈为空!endl;elsecout浮点型栈不为空!endl;coutFLOAT.top1()endl;coutFLOAT.pop()endl;coutFLOAT.top1()endl;FLOAT.empty();if(FLOAT.isEmpty()cout浮点型栈为空!endl;elsecout浮点型栈不为空!endl;cout-字符型-endl;StackCHAR;if(CHAR.isEmpty()cout字符型栈为空!endl;elsecout字符型栈不为空!end
24、l;CHAR.push(a);CHAR.push(b);if(CHAR.isEmpty()cout字符型栈为空!endl;elsecout字符型栈不为空!endl;coutCHAR.top1()endl;coutCHAR.pop()endl;coutCHAR.top1()endl;CHAR.empty();if(CHAR.isEmpty()cout字符型栈为空!endl;elsecout字符型栈不为空!endl;return 0;运行结果:实习题目六【需求规格说明】6、编写一个程序实现文件读写操作、排序、查找、删除等操作。 要求:a将“a.txt”文件中将学生成绩记录按照总分的由高到低方式排列
25、,并将结果输出到“b.txt”。总分相同的情况下,按照数学成绩的由高到低排列。 b输入一个学生姓名,查找并输出他/她的信息。若无,则提示“无此人”。 c输入一个学生学号,查找并删除文件中他/她的记录。若无,则提示“无此人”。 d增加一个学生信息到记录中,并保持文件中学生记录仍然有序,不可重复。问题描述:把a.txt文件中的数据读出来,排序后输入到b.txt中。在b中进行查找、删除、添加操作。问题分析:可以用选择排序法进行排序,用结构体数组存放学生信息,实现排序和查找功能。用vector存储学生信息,实现删除和添加功能。【算法设计】(1)设计思想:用结构体数组存储学生信息,每一行对应一个结构体对
26、象。调用排序函数进行排序。将学生信息存储在结构体类型的容器中,用迭代器进行删除操作。删除后,再将容器中的信息从头开始重新输入到b中,此时b中就没有删除学生的信息了,顺序也没有乱。再定义一个结构体对象,由用户输入数据,用新增学生的总分和容器中每一个总分相比较,总分相同是比较数学成绩,将迭代器定在合适的位置,用insert函数将新增的对象从迭代器所指的地方插入,再重新输入到文件b中,完成插入功能。(2)设计表示:selectSort开始从文件a中读出数据,依次存放到Studenti中排序完成后输入文件b中输入一个名字用于查找在结构体数组中找到相同的姓名?输出学生信息无此人!是否将数据存入容器s中定
27、义迭代器p将容器中剩余数据输入b中输入一个学号在容器中找到相同的学号?通过调用erase()进行删除无此人!新增一个结构体变量,由用户输入和b中现有成员进行排序for循环确定p的位置调用insert()将新增成员插入容器中将容器中所有数据写入b中结束beginvectorsStudent0Student1Student2vector:iterator pStudent314个Student11Student12Student13【调试报告】(1) 用选择排序法排序时没有将所有对应信息都交换,在排序函数中调用6次交换函数后解决。(2) 调用交换函数排序时,函数没有放在循环里面,调用次数不对,输出
28、结果有误。将函数放在循环内部,问题解决。(3) 当查找不到学生信息需要输出“无此人”时控制条件使用的不对。通过观察发现如果循环结束时还没有找到对应的学生,i值和容器的大小都为14,问题解决。(4) 用迭代器曾经发生过越界。修改逻辑错误后解决。【附录】源程序清单:#include stdafx.h#include#include#include#include#includeusing namespace std;struct student string StudentNum;string StudentName;string Class;float Math;float English;fl
29、oat Physics;float Sum;Student14; /定义结构体数组存放学生信息,共14个#ifndef HEADER_9_12_H#define HEADER_9_12_Htemplatevoid Swap(T &a,T &b)/交换函数模板T temp=a;a=b;b=temp;#endifvoid selectSort(student Student,int n) /选择排序法for(int i=0;in-1;i+)int biggest=i;for(int j=i+1;jStudentbiggest.Sum)biggest=j;Swap(Studenti.StudentN
30、um, Studentbiggest.StudentNum);Swap(Studenti.StudentName, Studentbiggest.StudentName);Swap(Studenti.Class, Studentbiggest.Class);Swap(Studenti.Math, Studentbiggest.Math);Swap(Studenti.English, Studentbiggest.English);Swap(Studenti.Physics, Studentbiggest.Physics);Swap(Studenti.Sum, Studentbiggest.Su
31、m);else if(Studentj.Sum=Studentbiggest.Sum)/当总分相等时按照数学成绩排序if(Studentj.MathStudentbiggest.Math)biggest=j;Swap(Studenti.StudentNum, Studentbiggest.StudentNum);Swap(Studenti.StudentName, Studentbiggest.StudentName);Swap(Studenti.Class, Studentbiggest.Class);Swap(Studenti.Math, Studentbiggest.Math);Swap
32、(Studenti.English, Studentbiggest.English);Swap(Studenti.Physics, Studentbiggest.Physics);Swap(Studenti.Sum, Studentbiggest.Sum);int _tmain(int argc, _TCHAR* argv) ifstream file(D:a.txt);int i=0;while(iStudenti.StudentNumStudenti.StudentNameStudenti.ClassStudenti.MathStudenti.EnglishStudenti.Physics
33、;Studenti.Sum=Studenti.Math+Studenti.English+Studenti.Physics;i+;file.close();ofstream _file(D:b.txt);for(i=0;i14;i+)selectSort(Student,14);/调用排序函数,然后输出到b.txt中_fileStudenti.StudentNum Studenti.StudentName Studenti.Class Studenti.Math Studenti.English Studenti.Physics Studenti.Sumendl;_file.close();/
34、-输入姓名查找-string name;coutname;for(i=0;i14;i+)if(Studenti.StudentName=name)/找到符合条件的学生并将他的信息输出cout学生信息:Studenti.StudentNum Studenti.StudentName Studenti.Class Studenti.Math Studenti.English Studenti.Physics Studenti.Sumendl;break;if(i=14)/如果进行完以上循环都没有找到这个人,跳出循环时i=14,输出“无此人”cout无此人!endl;/-定义容器s用于存储学生信息-
35、 vectors;vector:iterator p=s.begin();s.reserve(14);/确保s至少有14的容量for(i=0;i14;i+)s.push_back(Studenti);/将数据存到容器s中/-输入学号删除-string num;coutnum;_file.open(D:b.txt);for(p=s.begin();p!=s.end();p+)if(p-StudentNum=num)/找到符合条件的学生并将他的信息删除coutStudentNum StudentName Class Math English Physics Sum 已删除!endl;s.erase(p);for(p=s.begin();ps.end();p+)_fileStudentNum StudentName Class Math English Physics Sumendl;_file.close();break;if(s.size()=14)/如果容器里还是14个元素,输出“无此人”cout无此人!endl;/-添加一个学生信息-string _class;float math,english,physics,sum;cout请输入要增加的学生信息:endlnum;coutname;cout_class;coutmath;coutenglish;coutphysics;
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922