C/C++数据结构实训任务(24题)[2023-12-08]

C/C++数据结构实训任务(24题)[2023-12-08]

第一部分 实训须知

一、课程实训的目的和要求
(一)实训目的
《数据结构实训》课程设计是在学完《数据结构》课程之后的实践教学环节。该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。要求学生在设计中逐步提高程序设计能力,培养科学的软件开发方法。学生通过《数据结构实训》课程设计在下述各方面得到锻炼:
1.能根据实际问题的具体情况,结合数据结构课程中的基本理论和算法,正确分析出数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。
2.提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
3.培养算法分析能力。分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。
(二)实训要求
1.选题: 每个选题1-3人,选题不允许重复。
2.课程设计中各任务的设计和调试要求独立完成,遇到问题可以讨论。学生必须仔细阅读《数据结构实训》课程设计指导书,认真主动完成课程设计的要求。
3.每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。学生要发挥自主学习的能力,充分利用时间,并在课程设计过程中不断检测自己的计划完成情况,及时向教师汇报。
4.课程设计按照教学要求需要四周时间(16课时内)完成,属课程设计安排上机时间段内学生不得缺席;如有特殊情况,请提前履行请假手续。

二.实训内容及步骤
1.分析问题,给出数学模型,设计相应的数据结构。
(1)分析问题的特点,用数学表达式或其它形式描述其数学模型。
(2)选择能够体现问题本身特点的逻辑结构。
(3)在逻辑结构确定的情况下,为算法的设计选择相应的存储结构,顺序存储结构和非顺序存储结构的不同存储方式,其对应的算法也不相同。
2.算法设计
在已经选择好数据结构的前提下,为解决问题设计算法。
(1)确定所需模块
对于稍复杂的程序设计,要充分利用模块化程序设计方法,自顶向下,逐步细化,在整体思路确定的情况下,考虑所需模块数,各模块完成功能以及模块之间的数据联系和调用关系。
(2)各子模块功能描述
给出主要模块的算法描述,用流程图或伪代码表示。
(3)模块之间的调用关系
给出算法各模块之间的关系图。
3. 编码实现
各个算法实现的源程序,对每个题目要有相应的源程序(每个功能模块采用不同的函数实现)。源程序要按照程序的规则来编写,要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。
程序能够运行,要有基本的容错功能,尽量避免出现操作失误时出现死循环。
4.算法分析
给出实现功能的一组或多组测试数据,经过上机调试,源程序运行正确,并且实现算法要求的功能,将按照此测试数据进行测试的结果列出来,解决课程设计题目中给出的问题后,分析各模块算法的时间复杂度和空间复杂度、每个模块设计和调试时存在问题的思考等(问题是哪些?问题如何解决?)。进一步体会:程序=数据结构+算法。
5. 课程总结
课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等内容。

三.上交相关材料要求
上交的成果的内容由以下两部分组成,缺一不可
1.源程序(电子版):按照课程设计的具体要求所开发的所有源程序及可执行文件。
2.课程设计报告(电子版):课程设计报告的编写顺序如下: 封面-----中文目录-----设计任务(题目要求)-----数据结构-----算法设计-----编码实现-----算法分析-----课设总结-----参考文献-----附录等(可选); 报告总页数控制在15页左右,报告中不能全是代码。
3. 文件夹命名方式:上交时文件的取名规则为:“课设题目(学号+姓名[,学号+姓名])”,如“资源管理系统的设计与实现(01号张三, 02号李四)”。

四、课程实训报告格式
封面-目录-正文-参考文献(见实训报告模板)。

五.课程设计的成绩评定
课程设计的总评成绩由平时成绩、设计质量、设计报告三部分组成。
六.其他说明
1、课程设计完成时间:第16周周五(12月22日)下午18:00之前,迟交无成绩。
2、课程设计阶段涉及到的程序代码、报告文档等,不得抄袭,一经发现,抄袭者与被抄袭者的本课程设计的最终成绩均按0分记。

第二部分 实训内容

源码联系UP主 -> https://space.bilibili.com/329101171

1、奥运会比赛分数统计系统
问题描述:
参加奥运会比赛的n个国家编号为1n。比赛分成m个男子项目和w个女子项目,项目编号分别为1m和m+1~m+w。由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。写一个统计程序产生各种成绩单和得分报表。
基本要求:
每个项目结束时,输入前三名或前五名的项目编号、选手姓名、国家名称和名次(成绩);
产生各国家的成绩单,内容包括各国家所取得的每项成绩的项目号、名次(成绩)、姓名和得分,并统计各国家总分;
产生团体总分报表,内容包括国家号、男子团体总分、女子团体总分和团体总分。

2、学生成绩管理系统
问题描述:
能够实现对学生成绩的常用管理功能。
基本要求:
⑴采用一定的存储结构对学生成绩进行管理;
⑵可以进行成绩的录入、查询、修改、删除等操作;
⑶可以查询某门课程的平均分,学生的排名,不同分数段的学生人数及学生信息等;
可以查询某学生的各课程分数,总分及学生的班级排名等;
⑸可以按学号排序输出全部学生的成绩信息、总分及班级排名等。

3、一元稀疏多项式计算器
问题描述:
设计一个一元稀疏多项式简单计算器。
基本要求:
一元稀疏多项式简单计算器的基本功能是:
(1)输入并建立多项式;
(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,cn,en,其中n是多项式的项数,ci和ei,分别是第i项的系数和指数,序列按指数降序排列;
(3)多项式a和b相加,建立多项式a+b;
(4)多项式a和b相减,建立多项式a-b;
(5)多项式a和b相乘,建立乘机多项式ab。

4、长整数的四则混合运算
问题描述:
设计一个实现任意长的整数进行四则混合运算的演示程序。
基本要求:
(1)利用双向循环链表实现长整数的存储,每个结点含一个整型变量。任何整型变量的范围是-(215-1)~(215-1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。
(2)实现长整数的四则混合运算;
(3)实现长整数的乘方和阶乘运算;
(4)整型量范围是-(2n-1)~(2n-1),其中,n是由程序读人的参量。输入数据的分组方法可以另行规定。

5、语言解释系统
问题描述:
有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:
(1)a→β1β2…βm
(2)(θδ1δ2…δn)→θδnθδn-1…θδ1θ
在这两种形式中,从左到右均表示解释。试写一个魔王语言的解释系统,他的话解释成人能听得懂的话。
基本要求:
用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。魔王语言可含人的词汇。
(1)B→tAdA
(2)A→sae

6、飞机订票系统
问题描述:
飞机订票系统的业务活动包括:查询航线、客票预订和办理退票等。
基本要求:
(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量):
(2)系统能实现的操作和功能如下:
①录入:可以录入航班情况,全部数据可以只放在内存中,最好存储在文件中:
②查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额:
③承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号:若己满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补:
④承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。

7、就医管理系统
问题描述:
编写一个程序实现就医管理。在病人就医过程中,主要发生三件事:
(1)预检,分科室,挂号。不同科室都是从1号开始挂号。如,内科1号,外科1号,五官科1号等:
(2)病人到达诊室,将病历本交给护士,排到等待队列中候诊。
(3)护士从等待队列中取出一位病人的病历,该病人进入诊室就诊。
基本要求:
要求程序采用菜单方式,其选项及功能说明如下:
(1)挂号预检,分科室,生成就诊号。
(2)排队—输入病人的就诊号,加入到病人排队队列中。
(3)就诊一一病人排队队列中最前面的病人就诊,并将其从队列中删除。
(4)查看排队–从队首到队尾列出所有的排队病人的病历号。
(5)下班
退出运行。

8、校园停车场管理系统
问题描述:
设校园停车场内只有一个可停放辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入:当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
基本要求:
要求以顺序栈模拟校园停车场,以链队列模拟通道;
从终端读入汽车到达或离去的数据,每组数据包括三个数据项:
汽车“到达”或“离去”信息
汽车牌照号码
“到达”或”离去”的时刻。
与每组输入信息相应的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。

9、迷宫问题
问题描述:
迷宫有两个门,一个叫做入口,一个叫做出口。把一个老鼠从一个无项盖的大盒子的入口赶进迷宫。迷宫中设置很多隔壁。对前进的方向形成了多处障碍,在迷宫的唯一出口处放置了一块奶酪,吸引老鼠在迷宫中寻找通路以达到出口。求解迷宫问题,即找从入口到出口的路径。
基本要求:
使用栈这种数据结构实现,二维迷宫可通过矩阵表示,从出发点开始,每个点按照四个邻域计算,按照右,上,左,下的顺序搜索下一落脚点,有路则进,无路即退回前点再从下一个方向搜索。

10、文学研究帮手
问题描述:
文学研究人员需要统计某篇英文小说中某些形容词的出现次数和位置,实现这一目标的文字统计系统,称为文学研究帮手。
基本要求:
英文小说存于一个文本文件中,待统计的词汇集合要一次性输入完毕,即统计工作必须在程序的一次运行后就全部完成,程序的输出结果是每个词的出现次数和出现位置所在行的行号,格式自行设计。

11、“导师制”系统
在高校的教学改革中,有很多学校实行了导师制。一个班级的学生被分给几个老师,每个老师带个学生,如果该老师还带研究生,那么研究生也可直接带本科生。本科生导师制问题中的数据元素具有如下形式:
导师带研究生
(老师,((研究生1,(本科生1,…,本科生m1)),(研究生2,(本科生1,…,本科生m2))…))
导师不带研究生
(老师,(本科生1,…,本科生m))
导师的自然情况只包括姓名、职称;研究生的自然情况只包括姓名、班级;本科生的自然情况只包括姓名、班级。
基本要求:
(1)插入:将某位本科生或研究生插入到广义表的相应位置:
(2)删除:将某本科生或研究生从广义表中删除;
(3)查询:查询导师、本科生(研究生)的情况:
(4)统计:某导师带了多少个研究生和本科生:
(5)输出:将某导师所带学生情况输出。

12、电文的加密和解密
问题描述:
随着信息时代的到来,如何采用有效的压缩技术和加密技术已越来越引起人们的关注,哈夫曼编码正是一种应用广泛且能有效加密和压缩的技术。要压缩和加密就要做到:加密人员要根据要加密的电文,统计出各字符出现的频率,然后构造哈夫曼树从而构造出哈夫曼编码;解密人员就要根据哈夫曼编码,还原出原来的电文。
基本要求:
具有数据输入功能,输入的数据能最终保存在文件中;
具有加密功能,在加密的时候,从文本文档中提取要加密的电文。待加密完成之后,不但要把密文显示在用户界面上,还要把密文保存在另一个文本文档中;
在加密的过程中,要根据电文字符的频率,构造出哈夫曼树,进而构造出哈夫曼编码;
具有解密功能,在解密的时候,在文本文档中读取要解密的密文,然后进行解密,要把解密之后的原电文通过用户界面显示出来;
解密是要根据哈夫曼编码进行解密;
其它功能(如计算压缩效率等)。

13、家谱管理系统
问题描述:
家谱是中国特有的文化遗产,是中华民族的三大文献之一,属珍贵的人文资料,对于历史学,民俗学,人口学,社会学和经济学的深入研究,均有不可替代的重要功能。设计并实现一个简单的家谱管理系统,以实现查看祖先和子孙个人信息、插入家族成员等功能。
基本要求:
(1)建立家族关系并能存储到文件中。
(2)实现家族成员的添加、删除功能。
(3)可以查询家族成员的双亲、祖先、兄弟、孩子和后代等信息。
(4)按某种顺序输出家谱信息(树的遍历操作)、以树型结构输出家谱资料等功能。
(5)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。

14、公园导航系统
问题描述:
设计一个公园导航系统,为来访的游客提供各种信息查询服务。
基本要求:
设计东莞旗峰公园的平面图,所含景点不少于10个。以图中顶点表示公园内各景点。
存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
为来访游客提供图中任意景点相关信息的查询。
为来访游客提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。

15、东莞地铁建设问题
问题描述:假设要在东莞各镇区之间修建地铁来加快经济发展,但由于建设地铁的费用昂贵,因此需要设计一个程序,合理安排地铁的建设路线,使乘客可以沿地铁到达各个镇区,并使总的建设费用最小。
基本要求:
(1)从包含各镇区的外部地图文件中读入镇区名称和各镇区间的直接距离。
(2)根据读入的各镇区的距离信息,计算出应该建设哪些镇区间的地铁路线。
(3)输出应该建设的地铁路线及所需要建设的总里程信息。

16、大学教学计划编制
问题描述:
大学的每个专业都要制订教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。
基本要求:
(1) 输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号;
(2) 允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀:二是使课程尽可能地集中在前几个学期中;
(3) 若根据给定的条件问题无解,则报告适当的信息:否则,将教学计划输出到用户指定的文件中。计划的表格格式自行设计。

17、通讯录管理系统
问题描述:
设计哈希表实现通讯录管理系统。
基本要求:
⑴设每个记录有下列数据项:电话号码、用户名、地址;
⑵从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表;
⑶ 采用一定的方法解决冲突;
显示信息:可以按照手机或联系人的姓名拼音排序显示;
查找:用名字和手机号码分别作为查找的依据,进行查找;
编辑信息;
删除信息。

18、公共机房机位预约系统
问题描述:
编写程序实现公共机房机位预约。
基本要求:
20台机器,从早8点到晚8点,每两个小时一个时间段。需要实现如下功能:
(1)查询,根据输入时间,输出机位信息:
(2)机位预定,根据输入的日期和时间段查询是否有空机位,若有则预约,若无则提供最近时间段的空机时间段。
另外,如果用户要求在非空时间上机,则将用户信息插入该时间段的等待列表。
(3)退出预定,根据输入的时间撤销该时间的预定。
(4)查询是否有等待信息,若有则按顺序显示联系方式,若无则显示提示信息。

19、校园歌手大赛
要求:
(1)在校园歌手大赛中,每位歌手演唱完,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。歌手的人数在大奖赛开始时确定。
(2)同时对评委评分进行裁判,即在10个评委中找出最公平(即评分最接近平均分)和最不公平(即与平均分的差距最大)的评委。
(3)建立数据文件,保存每位歌手比赛时的所有评委分数,包括最高分,最低分和最后得分,并对比赛结果进行排序输出:
(4)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。

20、图书管理系统
问题描述:
设计一个计算机管理系统完成图书管理基本业务。
基本要求:
⑴每种书的登记内容包括书号、书名、著作者、现存量和库存量;
⑵对书号建立索引表(线性表)以提高查找效率;
⑶系统主要功能如下:
①采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;
②借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;
③归还:注销对借阅者的登记,改变该书的现存量。

21、商品进销存管理系统
问题描述:
针对某一种行业的库房的商品进销存情况进行管理。
基本要求:
采用一定的存储结构对库房的商品及其数量进行分类管理;
可以进行商品类的添加、商品的添加、商品数量的添加;
能够查询库房每种商品的总量、进货日期、销出数量、销售时间等。

22、教师管理系统
问题描述:
每个教师的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。系统能够完成教师信息的查询、更新、插入、删除等功能。
基本要求:
查询:按特定条件查找教师;
更新:按编号对某个教师的某项信息进行修改;
插入:加入新教师的信息;
删除:按编号删除已离职的教师信息。

23、积分管理系统
问题描述:
针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。
基本要求:
(1)采用一定的存储结构进行客户信息的存储:
(2)对客户的信息可以进行修改、删除、添加:
(3)能够根据消费情况进行客户积分的累加:
(4)根据积分情况,对客户实行不同程度的打折优惠。

24、英语词典系统
问题描述:
设计与实现一个系统,要求模拟电子词典的功能,即实现单词查询。
基本要求:
(1)英文单词及意义保存于一输入文件,格式自行设定;
(2)能根据输入的音词查询其意思;
(3)如果查询不成功,可以添加该单词及意思;
(4)能对即定的单词进行编辑修改。

源码联系UP主 -> https://space.bilibili.com/329101171

  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用 C++ 语言实现本科生导师制的示例代码: ```cpp #include <iostream> #include <vector> using namespace std; class Student { public: string name; vector<Student*> students; }; class Teacher { public: string name; vector<Student*> students; vector<Student*> graduateStudents; }; int main() { // 初始化学生和老师 Student* s1 = new Student{"Alice"}; Student* s2 = new Student{"Bob"}; Student* s3 = new Student{"Charlie"}; Student* s4 = new Student{"David"}; Teacher* t1 = new Teacher{"Emily"}; Teacher* t2 = new Teacher{"Frank"}; // 建立导师与学生的关系 t1->students.push_back(s1); t1->students.push_back(s2); t2->students.push_back(s3); t2->students.push_back(s4); // 建立研究生与学生的关系 Student* s5 = new Student{"Eva"}; Student* s6 = new Student{"Frank"}; t1->graduateStudents.push_back(s5); t2->graduateStudents.push_back(s6); // 查询导师和学生的关系 for (auto t : {t1, t2}) { cout << t->name << " has " << t->students.size() << " students: "; for (auto s : t->students) { cout << s->name << " "; } cout << endl; } // 查询研究生和学生的关系 for (auto t : {t1, t2}) { cout << t->name << " has " << t->graduateStudents.size() << " graduate students: "; for (auto s : t->graduateStudents) { cout << s->name << " "; } cout << endl; } // 释放内存 delete s1; delete s2; delete s3; delete s4; delete s5; delete s6; delete t1; delete t2; return 0; } ``` 在这个示例代码中,我们定义了两个类 `Student` 和 `Teacher`,分别代表学生和老师。每个学生对象有一个名字和一个 `vector` 成员变量 `students`,用于存储该学生的导师和研究生。每个老师对象有一个名字和两个 `vector` 成员变量 `students` 和 `graduateStudents`,分别用于存储该老师的本科生和研究生。在 `main()` 函数中,我们创建了四个学生对象和两个老师对象,并将它们之间的关系建立起来。最后,我们查询了每个老师对象的本科生和研究生,并释放了所有对象的内存。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值