实验十七 多种排序算法实现成绩统计排序问题
·学生数据结构成绩管理系统
一、实验目的
1.掌握各种排序算法基本思想的实现。 2.通过实现算法效率对比分析。
二、实验环境
⒈ 硬件:每个学生需配备计算机一台。操作系统:DOS或Windows; ⒉ 软件:DOS或Windows操作系统+Turbo C;
三、实验要求 [基本要求]
(1)学生信息及成绩的录入 要求包括的学生信息有:学号,姓名,性别,出生日期,民族 及数据结构成绩(具体内容可自行假设,至少录入10名以上学生). (2)学生成绩的查询
要求根据提供的学号完成学生成绩的查询
(3)学生成绩的分段统计和排序输出 统计出各分数段学生人数(60分以下,60~70,71~80,...) ,将学生成绩从高到低排序输出. 四、实验内容
1.在自己的U盘的“姓名+学号”文件夹中创建“实验16”文件夹,本次实验的所有程序和数据都要求存储到本文件夹中。
2.设计随机数生成学生成绩来测试排序算法运行时间的程序,其中可以通过修改RANDNUM的值来更改测试的数据量。具体参考如下:
#define RANDNUM 10 //随机数的个数 for(i=0;i {//产生1万个随机数 iRandNum[i]=rand()%RANDNUM; } 3.对随机数据进行排序算法实现。 4.对各种排序算法效率,进行测试与比较分析,记录运行时间及排序移动次数;把需排序的数改为50,进行同样测试,并比较测试结果。 五、报告要求 1.认真书写实验报告,字迹清晰,格式规范。报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验要求。 2.报告中应书写主要源程序,且源程序中要有注释。 3.报告最后包含实验总结和体会。 30 综合实践:数据结构课程设计 实验预备知识: 1.能够运用C语言或其它高级语言熟练进行程序设计。 2.熟练运用流程图描述算法。 3.能够运用数据结构知识解决实际问题。 4.具有较强的实践动手能力。 5.具备较强的程序纠错能力和测试能力。 目的及意义 通过课程设计的综合训练,旨在帮助学生进一步系统的掌握数据结构这门课的主要内容,并进一步培养学生分析问题和解决问题的能力,主要体现在能够让学生针对实际问题有效地组织数据,选择合适的数据结构,并进行正确和高效的算法设计,并用程序实现算法。该课的课程设计是一个良好的程序设计技能训练的过程使学生能够: 1.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; 2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; 3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 4.训练用系统的观点和软件开发一般规范进行软件开发,培养计算机科学与技术专业学生所应具备的科学的工作方法和作风。 二、内容及时间分配 序号 1 2 3 4 合计 内容 系统分析与设计阶段 程序编制与调试阶段 总结报告和书写说明书阶段 答辩与考核阶段 时间 1天 2天 1天 1天 5天 三、设计要求 课程设计题目由课程设计指导教师在课程设计的前2周分配给课程设计小组,每个课程小组原则不能超过4人,各个课程设计小组题目原则不能相同。学生应端正学习态度,勤于思考、刻苦钻研,按照要求独立分析、解决问题,按计划完成课程设计任务;注意在课程设计中自觉培养创新意识和创新能力;必须独立完成课程设计任务,不得抄袭或找人代做,否则成绩以不及格记,并不能补考。 参考题目如下: 【问题描述】 处于对不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则希望旅费尽可能省,而老年旅客则要求中转次数最少。编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。 【基本要求】 (1)提供对城市信息进行编辑(如:添加或删除)的功能。 (2)城市之间有两种交通工具:火车和飞机。提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。 31 (3)提供两种最优决策:最快到达或最省钱到达。全程只考虑一种交通工具。 (4)旅途中耗费的总时间应该包括中转站的等候时间。 (5)咨询以用户和计算机的对话方式进行。由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地 四、课程设计参考题目 1.运动会分数统计(限1 人完成) 任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20) 功能要求: 1)可以输入各个项目的前三名或前五名的成绩; 2)能统计各学校总分, 3)可以按学校编号或名称、学校总分、男女团体总分排序输出; 4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 5)数据存入文件并能随时查询 6)规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称 输出形式:有合理的提示,各学校分数为整形 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构; 测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明; 2.飞机订票系统(限1 人完成) 任务:通过此系统可以实现如下功能: 录入: 可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定) 查询: 可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓); 可以输入起飞抵达城市,查询飞机航班情况; 订票:(订票情况可以存在一个数据文件中,结构自己设定) 可以订票,如果该航班已经无票,可以提供相关可选择航班; 退票: 可退票,退票后修改相关数据文件; 客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。 修改航班信息: 当航班信息改变可以修改航班数据文件 要求: 根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能; 32 3.文章编辑(限1 人完成) 功能:输入一页文字,程序可以统计出文字、数字、空格的个数。 静态存储一页文章,每行最多不超过80个字符,共N行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。 存储结构使用线性表,分别用几个子函数实现相应的功能; 输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。 输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出\全部字母数\、\数字个数\、\空格个数\、\文章总字数\(3)输出删除某一字符串后的文章; 4.宿舍管理查询软件(限1 人完成) 1)任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求: A.采用交互工作方式 B.建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种) 2)查询菜单: (用二分查找实现以下操作) A.按姓名查询 B.按学号查询 C.按房号查询 3)打印任一查询结果(可以连续操作) 5.校园导航问题(限1 人完成) 设计要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。 6.教学计划编制问题(限1 人完成) 设计要求:针对计算机系本科课程,根据课程之间的依赖关系(如离散数学应在数据结构之前开设)制定课程安排计划,并满足各学期课程数目大致相同。 7.散列法的实验研究(限1 人完成) 散列法中,散列函数构造方法多种多样,同时对于同一散列函数解决冲突的方法也可以不同。两者是影响查询算法性能的关键因素。对于几种典型的散列函数构造方法,做实验观察,不同的解决冲突方法对查询性能的影响。 8.图书借阅管理系统(限1 人完成) 主要分为两大功能: 1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书); 2)会员管理(增加会员、查询会员、删除会员、借书信息); 9.学生成绩管理(限1 人完成) 33 实现功能:输入、输出、插入、删除、查找、追加、读入、显示、保存、拷贝、排序、索引、分类合计、退出。 10.活期储蓄帐目管理(限1 人完成) 活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求: 1)能比较迅速地找到储户的帐户,以实现存款、取款记账; 2)能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。 11.二叉排序树的实现(限1 人完成) 用顺序和二叉链表作存储结构 1)以回车('\\n')为输入结束标志,输入数列L,生成一棵二叉排 序树T; 2)对二叉排序树T作中序遍历,输出结果; 3)输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”; 12.最小生成树问题(限1 人完成) 设计要求:在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。存储结构采用多种。求解算法多种。 13.通讯录的制作(限1 人完成) 设计目的:用〈〈数据结构〉〉中的双向链表作数据结构,结合C语言基本知识。编写一个通讯录管理系统。以把所学数据结构知识应用到实际软件开发中去。 设计内容:本系统应完成一下几方面的功能: 1)输入信息——enter(); 2)显示信息———display( ); 3)查找以姓名作为关键字 ———search( ); 4)删除信息———delete( ); 5)存盘———save ( ); 6)装入———load( ) ; 设计要求: 1)每条信息至包含 :姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项 2)作为一个完整的系统,应具有友好的界面和较强的容错能力 3)上机能正常运行,并写出课程设计报告 14.哈夫曼编码/译码器(限1 人完成) 【问题描述】 设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。 【基本要求】 1)将权值数据存放在数据文件(文件名为data.txt,位于执行程序的当前目录中) 2)分别采用动态和静态存储结构 3)初始化:键盘输入字符集大小n、n个字符和n个权值,建立哈夫曼树; 4)编码:利用建好的哈夫曼树生成哈夫曼编码; 5)输出编码; 34