还剩65页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《数据结构与算法分析》课程设计内容体系主要内容《数据结构课程设计》课程,可使学生深化理解书本知识,致力于用学过的理论知识和上机取得的实践经验,解决具体、复杂的实际问题,培养软件工作者所需的动手能力、独立解决问题的能力该课程设计侧重软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧、多人合作,以至一整套软件工作规范的训练和科学作风的培养
1、课程设计要求学生必须仔细阅读《数据结构与算法分析》课程设计方案,认真主动完成课程设计的要求有问题及时主动通过各种方式与教师联系沟通学生要发挥自主学习的能力,充分利用时间,安排好课程设计的时间计划,并在课程设计过程中不断检测自己的计划完成情况,及时的向教师汇报课程设计按照教学要求需要两周时间完成,两周中每天(按每周5天)至少要上3-4小时的机来调试C语言设计的程序,总共至少要上机调试程序30小时
2、数据结构课程设计的具体内容本次课程设计完成如下模块(共9个模块,学生可以在其中至少挑选6个功能块完成,但有**号的模块是必须要选择的)
(1)运动会分数统计**任务参加运动会有n个学校,学校编号为1……n比赛分成m个男子项目,和w个女子项目项目编号为男子1……m,女子m+1……m+w不同的项目取前五名或前三名积分;取前五名的积分分别为
7、
5、
3、
2、1,前三名的积分分别为
5、
3、2;哪些取前五名或前三名由学生自己设定(m=20n=20)功能要求可以输入各个项目的前三名或前五名的成绩;能统计各学校总分;可以按学校编号、学校总分、男女团体总分排序输出;可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校规定输入数据形式和范围20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)输出形式有中文提示,各学校分数为整形界面要求有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求存储结构学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;测试数据要求使用
1、全部合法数据;
2、整体非法数据;
3、局部非法数据进行程序测试,以保证程序的稳定测试数据及测试结果请在上交的资料中写明;
(2)订票系统任务通过此系统可以实现如下功能录入可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票可以订票(订票情况可以存在一个数据文件中,结构自己设定),如果该航班已经无票,可以提供相关可选择航班;退票可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号修改航班信息当航班信息改变可以修改航班数据文件要求根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;
(3)文章编辑**功能输入一页文字,程序可以统计出文字、数字、空格的个数静态存储一页文章,每行最多不超过80个字符,共N行;要求
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输出该次数;
(3)删除某一子串,并将后面的字符前移
(4)存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围可以输入大写、小写的英文字母、任何数字及标点符号输出形式
(1)分行输出用户输入的各行字符;
(2)分4行输出全部字母数、数字个数、空格个数、文章总字数
(3)输出删除某一字符串后的文章;
(4)约瑟夫环(Joseph)任务编号是1,2,……n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)一开始任选一个正整数作为报数上限值m从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止设计一个程序来求出出列顺序要求利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号测试数据m的初值为20,n=77个人的密码依次为3,1,7,2,4,7,4,首先m=6则正确的输出是什么?输入数据建立输入处理输入数据,输入m的初值,n,输入每个人的密码,建立单循环链表输出形式建立一个输出函数,将正确的输出序列
(5)猴子选大王**任务一堆猴子都有编号,编号是1,2,
3...m这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王输入数据输入mnmn为整数,nm输出形式中文提示按照m个猴子,数n个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能
(6)建立二叉树,层序、先序遍历(用递归或非递归的方法都可以)**任务要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数;
(7)赫夫曼树的建立任务建立建立最优二叉树函数要求可以建立函数输入二叉树,并输出其赫夫曼树在上交资料中请写明存储结构、基本算法(可以使用程序流程图)、输入输出、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
(8)纸牌游戏**任务编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,输出这时正面向上的牌有哪些?
(9)图的建立及输出任务建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网,学生可以任选两种类型),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵要求给出图的深度优先和广度优先遍历算法,并给出遍历过程的动态演示效果
3、上交相关内容要求上交的成果的内容必须由以下四个部分组成,缺一不可1.上交源程序学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中);2.上交程序的说明文件(保存在.txt中)在说明文档中应该写明上交程序所在的目录,上交程序的主程序文件名,如果需要安装,要有程序的安装使用说明;3.课程设计报告(保存在word文档中,文件名要求按照姓名-学号-课程设计报告起名,如文件名为张三-001-课程设计报告.doc)按照课程设计的具体要求建立的功能模块,每个模块要求按照如下几个内容认真完成;其中包括:需求分析在该部分中叙述,每个模块的功能要求概要设计在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义详细设计各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现)源程序要按照写程序的规则来编写要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释调试分析测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想
4.课设总结(保存在word文档中)总结可以包括:课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等内容《数据结构与算法分析》――课程内容体系主要内容教学单元模块具体教学内容绪论绪论部分是全书的预备知识,主要对ADL语言、数据结构与算法、算法分析基础、OOP、和C++做了简单介绍基本数据结构基本数据结构部分包括线性表、堆栈与队列、数组、字符串、整数集合类、树(包括AVL树、伸展树等)、图(包括网络流等问题的讨论)、散列(Hash)等典型算法典型算法部分主要介绍了若干典型算法的实现,并给出必要的复杂性分析和比较过程,具体包括递归、排序、查找和内存管理等复杂数据结构复杂数据结构部分主要包括优先级队列、不相交集合类和文件结构等算法设计技巧典型算法设计技巧的介绍,主要包括贪婪算法、分治算法、动态规划、回溯算法和随机化算法等应用应用部分是上述数据结构和典型算法的一些应用示例,具体包括事件驱动模拟、等价类、残缺棋盘和图象压缩等问题的讨论,在课时允许的情况下还会介绍摊还分析、红黑树等《数据结构与算法分析》课程实践内容体系主要内容实践教学单元模块实践教学基本要求实践教学具体内容趣味程序设计实践
1.熟悉编程环境
2.复习C语言程序设计的基本内容
1.开学第
一、二周布置若干趣味程序设计题目,如奇数阶幻阵算法、万年历算法、迷宫算法等并完成
2.随机产生n个整数,然后用一种排序算法将它们从小到大排序
3.试编一程序,用贪心法求解一般的着色问题链表应用实验
1.熟悉链表结构
2.掌握链表结构上的各种操作
3.学会运用链表结构求解问题
1.试将本章介绍的两种Josephus问题的求解过程在计算机中实现,实现时要求输出的不是整数,而是实际的人名
2.设A与B分别为两个带有头结点的有序循环链表(所谓有序是指链接点按数据域值大小链接,本题不妨设按数据域值从小到大排列),list1和list2分别为指向两个链表的指针请写出并在计算机上实现将这两个链表合并为一个带头结点的有序循环链表的算法栈与队列应用实验
1.熟悉栈和队列结构
2.掌握栈和队列结构上的各种操作
3.学会运用栈和队列结构求解问题
1.设计实现一个求解n阶Hanoi塔问题的算法提示将n个圆盘由A依次移到C,B作为辅助塔座当n=1时,可以直接完成否则,将塔座A顶上的n-1个圆盘移动到塔座B上,用塔座C作为辅助塔座;然后移第n个圆盘;最后将塔座B上的n-1个圆盘移到塔座C上,并用塔座A作为辅助塔座
2.根据书中介绍的思想,设计并实现一个对简化表达式求值的系统
3.在计算机上模拟实现农夫过河问题的解文本文件检索实验
1.熟悉字符串的操作
2.学会运用字符串的操作进行文本检索和查询
1.根据课堂介绍设计实现KMP算法
2.试设计一个简单的文本编辑器,使之具有对字符串的输入、输出、插入、删除、查找和替换等功能
3.设计实现一个通用的判定回文个数问题的算法程序稀疏矩阵和广义表实验1.熟悉稀疏矩阵和广义表结构2.掌握稀疏矩阵和广义表结构上的各种操作3.学会运用稀疏矩阵和广义表结构求解问题
1.设计实现两个普通矩阵相乘的算法
2.实现用三元组表示法实现稀疏矩阵相加及转置算法
3.设计实现两个N次一元多项式相加的算法程序树结构实验
1.熟悉树和二叉树结构
2.掌握树和二叉树结构上的各种操作
3.学会运用树和二叉树结构求解问题
1.设计一个程序,根据二叉树的先根序列和对称序序列创建一棵用左右指针表示的二叉树
2.根据哈夫曼算法创建哈夫曼树,并求树中每个外部结点的编码
3.设计一个程序,把中缀表达式转换成一棵二叉树,然后通过后序遍历计算表达式的值
4.设计实现一个完成对BST树进行插入、删除、查找操作的算法,并希望有部分同学能进一步把该算法改写为针对AVL树的相关算法图结构实验
1.熟悉图结构
2.掌握图结构上的各种操作
3.学会运用图结构求解问题采用两种不同的图的表示方法,实现拓扑排序和关键路径的求解过程使用实现的算法对于下图所示的AOE网,求出各活动的可能的最早开始时间和最晚开始时间输出整个工程的最短完成时间是多少哪些活动是关键活动说明哪项活动提高速度后能导致整个工程提前完成分析不同存储结构对于算法效率的影响散列表实验
1.熟悉散列表结构
2.掌握散列函数的生成方法掌握常规冲突处理办法
3.学会运用散列结构求解问题试根据全年级学生的姓名,构造一个散列表,选择适当的散列函数和解决碰撞方法,设计并实现插入、删除和查找算法,统计碰撞发生的次数(用拉链法解决碰撞时负载因子取2,用开地址法时取1/2)航班信息查询与检索实验设计
1.掌握查找与排序的各种算法
2.学会选用和设计实际问题所需的查找与排序算法对于直接插入排序、直接选择排序、起泡排序、Shell排序、快速排序和堆排序等六种算法进行上机实习要求
1.被排序的对象由计算机随机生成,长度分别取20,100,500三种
2.算法中增加比较次数和移动次数的统计功能
3.对实习的结果做比较分析
4.设计实现一个航班信息查询与检索系统课程实验参考教材魏开平等编著.数据结构辅导与实验.清华大学出版社,2006年第1版瞿有甜,《数据结构与算法分析》实验指导书,
2004.9实验1猴子选大王任务一堆猴子都有编号,编号是1,2,
3...m这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王输入数据输入mnmn为整数,nm输出形式中文提示按照m个猴子,数n个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能实验内容源程序#includestdio.h#includestdlib.htypedefstructnode{intdata;structnode*next;}ListNode;typedefListNode*LinkList;/*建立单循环链表函数*/LinkListInitRingintnLinkListR{ListNode*p*q;inti;R=q=ListNode*mallocsizeofListNode;fori=1;in;i++{p=ListNode*mallocsizeofListNode;q-data=i;q-next=p;q=p;}p-data=n;p-next=R;R=p;returnR;}/*选择函数*/LinkListDeleteDeathintnintkLinkListR{intij;ListNode*p*q;p=R;fori=1;i=n/2;i++{forj=1;j=k-1;j++p=p-next;q=p-next;p-next=q-next;printf%4dq-data;ifi%10==0printf\n;freeq;}R=p;returnR;}/*输出函数*/voidOutRingintnLinkListR{inti;ListNode*p;p=R;fori=1;i=n/2;i++p=p-next{printf%4dp-data;ifi%10==0printf\n;}printf\n;printf猴大王的号码\n;printf4%dp-next;}/*主函数*/voidmain{LinkListR;intnk;LinkListInitRingintnLinkListR;printf猴子的总数N:;scanf%dn;printf报到要被淘汰数字K:;scanf%dk;printf被淘汰的猴子\n;R=InitRingnR;R=DeleteDeathnkR;printf\n;OutRingnR;}实验结果实验2订票系统任务通过此系统可以实现如下功能录入可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票可以订票(订票情况可以存在一个数据文件中,结构自己设定),如果该航班已经无票,可以提供相关可选择航班;退票可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号修改航班信息当航班信息改变可以修改航班数据文件要求根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;实验内容源程序#includestdio.h#includestdlib.h#includeconio.h#includeio.h#includemath.h#includestring.h#includectype.h#defineTRUE1#defineFALSE0typedefintBOOL;#defineNEWtypesizetype*mallocsizeoftype*sizetypedefstruct_date{/*日期*/intm_year;intm_month;intm_day;}DATE;typedefstruct_time{/*时间*/intm_hour;intm_min;}TIME;typedefstruct_flight{/*航班数据*/intm_fltno;/*航班号,若此成员为-1,则表示此航班未使用*/charm_szFrom
[30];/*起飞港*/charm_szPass
[30];/*途经港*/charm_szTo
[30];/*到达港*/TIMEm_start;/*起飞时间*/TIMEm_arrive;/*到达时间*/TIMEm_fly;/*飞行固定时间*/intm_people;/*乘客限额*/}FLIGHT*PFLIGHT;typedefstruct_passengernode{/*乘客数据*/charm_szName
[20];/*姓名*/charm_szCorp
[30];/*单位*/charm_szNumber
[19];/*身份证号,考虑到字母的情况,故使用字符串*/DATEm_Date;/*订票日期*/intm_fltno;/*航班号*/intm_seatno;/*座位号*/}PASSENGER*PPASSENGER;typedefstruct_psgnode{/*乘客结点*/PASSENGERm_psg;struct_psgnode*next;}NODE*PNODE;/*清空键盘缓冲区*/voidClearBuffervoid;/*读取航班数据*/voidReadFlightFLIGHTfltlist[];/*读取乘客数据*/voidReadPassengerPNODEpsglist;/*添加航班*/BOOLAddFlightFLIGHTfltlist[]PFLIGHTfltdata;/*删除航班*/voidDelFlightFLIGHTfltlist[]intindex;/*添加乘客*/voidAddPassengerPNODEpsglistPPASSENGERpsgdata;/*删除乘客*/BOOLDelPassengerPNODEpsglistintindex;/*清空乘客链表*/voidClearPsgListPNODEpsglist;/*取得乘客总数*/unsignedintGetPsgCountPNODEpsglist;BOOLdatecmpDATE*date1DATE*date2;voidBookFLIGHTfltlist[]PNODEpsglist;voidqueryFLIGHTfltlist[]PNODEpsglist;voidfltnumberFLIGHTfltlist[];voidpsgnamePNODEpsglist;voidfromtoFLIGHTfltlist[];voidfltdatFLIGHTfltlist[]PNODEpsglist;/*保存航班数据*/voidSaveFlightFLIGHTfltlist[];/*保存乘客数据*/voidSavePassengerPNODEpsglist;/*退出*/voidQuitFLIGHTfltlist[]PNODEpsglist;BOOLdatecmpDATE*date1DATE*date2{returndate1-m_year==date2-m_yeardate1-m_month==date2-m_monthdate1-m_day==date2-m_day;}BOOLtimecmpTIME*time1TIME*time2{returntime1-m_hour==time2-m_hourtime1-m_min==time2-m_min;}voidClearBuffervoid{getchar;}voidReadFlightFLIGHTfltlist[]{FILE*fp;iffp=fopenflight.datrb!=NULLfreadfltlistsizeofFLIGHT40fp;else{inti;fori=0;i40;i++fltlist[i].m_fltno=-1;}fclosefp;}voidReadPassengerPNODEpsglist{FILE*fp;iffp=fopenpsg.datrb==NULLpsglist-next=NULL;else{intin;freadnsizeofint1fp;fori=0;in;i++{PASSENGERpsg;freadpsgsizeofPASSENGER1fp;AddPassengerpsglistpsg;}}}BOOLAddFlightFLIGHTfltlist[]PFLIGHTfltdata{inti;BOOLbResult=FALSE;fori=0;i40;i++{iffltlist[i].m_fltno==-1{memcpyfltlist[i]fltdatasizeofFLIGHT;bResult=TRUE;break;}}returnbResult;}voidDelFlightFLIGHTfltlist[]intindex{fltlist[index].m_fltno=-1;}voidAddPassengerPNODEpsglistPPASSENGERpsgdata{PNODEpq;forp=psglist;p-next!=NULL;p=p-next;q=NEWNODE1;memcpyq-m_psgpsgdatasizeofPASSENGER;q-next=NULL;p-next=q;}BOOLDelPassengerPNODEpsglistintindex{inti=0;PNODEpq;forp=psglist-next;p-next!=NULL;p=p-nexti++;ifp!=NULLi==index-1{q=p-next;p-next=q-next;freeq;returnTRUE;}elsereturnFALSE;}voidClearPsgListPNODEpsglist{PNODEp=psglist-nextq;whilep!=NULLp-next!=NULL{q=p;p=p-next;freeq;}}unsignedintGetPsgCountPNODEpsglist{PNODEp;unsignedints=0;forp=psglist-next;p!=NULL;p=p-nexts++;returns;}voidBookFLIGHTfltlist[]PNODEpsglist{charc=y;BOOLb;whilec==y||c==Y{inti;PASSENGERpsg;printf请输入航班号;scanf%dpsg.m_fltno;whilepsg.m_fltno=10000||psg.m_fltno0{printf请重新输入;scanf%dpsg.m_fltno;}fori=0;i40;i++{iffltlist[i].m_fltno==psg.m_fltno{PNODEp;BOOL*q;intj;printf请输入订票日期yyyymmdd;q=NEWintfltlist[i].m_people;forj=0;jfltlist[i].m_people;j++q[j]=FALSE;forp=psglist-next;p!=NULL;p=p-next{ifdatecmpp-m_psg.m_Datepsg.m_Datepsg.m_fltno==p-m_psg.m_fltnoq[p-m_psg.m_seatno-1]=TRUE;}printf以下座位尚未有人订;forj=0;jfltlist[i].m_people;j++{if!q[j]printf%dj+1;}printf\n请输入订票座位号;scanf%dpsg.m_seatno;b=FALSE;do{intk;ifpsg.m_seatno0psg.m_seatno=fltlist[i].m_people+1{if!q[psg.m_seatno-1]{b=TRUE;break;}elseprintf这个座位有人了!;}elseprintf数据非法!;scanf%dpsg.m_seatno;}while!b;printf请输入乘客姓名;scanf%spsg.m_szName;printf请输入乘客单位;scanf%spsg.m_szCorp;printf请输入乘客身份证号;scanf%spsg.m_szNumber;AddPassengerpsglistpsg;printf您的订票已成功;freeq;}}c=getchar;}}voidqueryFLIGHTfltlist[]PNODEpsglist{for;;{charc;systemcls;printf航班查询\n;printf~~~~~~~~\n;printf
1.按航班号查询\n;printf
2.按姓名查询乘客\n;printf
3.按起飞、到达港查询\n;printf
4.按日期查询航班情况\n;printf
5.返回\n;printf\n请选择1-5;c=getchar;switchc{case1:fltnumberfltlist;break;case2:psgnamepsglist;break;case3:fromtofltlist;break;case4:fltdatfltlistpsglist;break;case5:break;default:continue;}ifc==5break;}}voidfltnumberFLIGHTfltlist[]{charc=y;whilec==y||c==Y{BOOLb=FALSE;intfltnoi;printf可以查询的航班号;fori=0;i40;i++{iffltlist[i].m_fltno!=-1{b=TRUE;printf%dfltlist[i].m_fltno;}}if!b{printf无\n按任意键返回;getch;return;}printf\n请输入要查询的航班号;scanf%dfltno;fori=0;i40;i++{iffltlist[i].m_fltno==fltno{printf%s--%s--%s\nfltlist[i].m_szFromfltlist[i].m_szPassfltlist[i].m_szTo;printf起飞时间%2d:%02d到达时间%2d:%02d飞行固定时间%2d:%02d\nfltlist[i].m_start.m_hourfltlist[i].m_start.m_minfltlist[i].m_arrive.m_hourfltlist[i].m_arrive.m_minfltlist[i].m_fly.m_hourfltlist[i].m_fly.m_min;printf乘客限额%d\nfltlist[i].m_people;break;}}printf继续查询吗?y/n;ClearBuffer;c=getchar;}}voidpsgnamePNODEpsglist{charc=y;whilec==y||c==Y{charname
[20];PNODEp;BOOLb=FALSE;printf请输入乘客姓名;scanf%sname;forp=psglist-next;p!=NULL;p=p-next{ifstrcmpp-m_psg.m_szNamename==0{b=TRUE;printf姓名%s单位%s身份证号%s\np-m_psg.m_szNamep-m_psg.m_szCorpp-m_psg.m_szNumber;printf航班号%d座位号%dp-m_psg.m_fltnop-m_psg.m_seatno;break;}}if!b{printf查无此人,按任意键退出;getch;return;}printf是否继续查询?y/n;ClearBuffer;c=getchar;}}voidfromtoFLIGHTfltlist[]{charc=y;whilec==y||c==Y{BOOLb=FALSE;charfrom
[30]to
[30];inti;printf请输入起飞港;scanf%sfrom;printf请输入到达港;scanf%sto;fori=0;i40;i++{ifstrcmpfltlist[i].m_szFromfrom==0{ifstrcmpfltlist[i].m_szToto==0{b=TRUE;break;}}}ifb{printf%s--%s--%s\nfltlist[i].m_szFromfltlist[i].m_szPassfltlist[i].m_szTo;printf起飞时间%2d:%02d到达时间%2d:%02d飞行固定时间%2d:%02d\nfltlist[i].m_start.m_hourfltlist[i].m_start.m_minfltlist[i].m_arrive.m_hourfltlist[i].m_arrive.m_minfltlist[i].m_fly.m_hourfltlist[i].m_fly.m_min;printf乘客限额%dfltlist[i].m_people;}elseprintf无此飞机;getch;printf是否继续查询?;ClearBuffer;c=getchar;}}voidfltdatFLIGHTfltlist[]PNODEpsglist{intpeople
[40]i;DATEdate;PNODEp;fori=0;i40;i++people[i]=0;printf请输入您要查询的日期yyyymmdd;scanf%d%d%ddate.m_yeardate.m_monthdate.m_day;forp=psglist-next;p!=NULL;p=p-next{ifdatecmpdatep-m_psg.m_Date{fori=0;i40;i++{iffltlist[i].m_fltno==p-m_psg.m_fltnopeople[i]++;}}}fori=0;i40;i++{ifpeople[i]0{printf%d%s--%s--%s人数%dfltlist[i].m_fltnofltlist[i].m_szFromfltlist[i].m_szPassfltlist[i].m_szTopeople[i];}}getch;}voidAddFLIGHTfltlist[]{charc=y;whilec==y||c==Y{FLIGHTflt;BOOLb;printf请输入航班号1-10000;scanf%dflt.m_fltno;printf请输入起飞港;scanf%sflt.m_szFrom;printf请输入途经港;scanf%sflt.m_szPass;printf请输入到达港;scanf%sflt.m_szTo;printf请输入起飞时间hh:mm;printf请输入到达时间hh:mm;printf请输入飞行固定时间hh:mm;printf请输入乘客限额;scanf%dflt.m_people;ClearBuffer;ifAddFlightfltlistfltprintf添加成功,;elseprintf添加失败,;printf继续添加航班吗Y/N?;c=getchar;}}voidDelFLIGHTfltlist[]{BOOLb=FALSE;intifltno;charc=y;whilec==y||c==Y{printf可以取消的航班号;fori=0;i40;i++{iffltlist[i].m_fltno!=-1{b=TRUE;printf%dfltlist[i].m_fltno;}}if!b{printf无\n按任意键返回;getch;return;}printf\n请输入要取消的航班号;scanf%dfltno;fori=0;i40;i++{iffltlist[i].m_fltno==fltno{DelFlightfltlisti;break;}}printf继续删除吗y/n?;ClearBuffer;c=getchar;}}voidQueryFLIGHTfltlist[]{charc=y;whilec==y||c==Y{BOOLb=FALSE;intifltno;printf可以查询的航班号;fori=0;i40;i++{iffltlist[i].m_fltno!=-1{b=TRUE;printf%dfltlist[i].m_fltno;}}if!b{printf无\n按任意键返回;getch;return;}printf\n请输入要查询的航班号;scanf%dfltno;fori=0;i40;i++{iffltlist[i].m_fltno==fltno{printf%s--%s--%s乘客限额%d\nfltlist[i].m_szFromfltlist[i].m_szPassfltlist[i].m_szTofltlist[i].m_people;printf起飞时间%2d:%02d到达时间%2d:%02d飞行固定时间%2d:%02d\nfltlist[i].m_start.m_hourfltlist[i].m_start.m_minfltlist[i].m_arrive.m_hourfltlist[i].m_arrive.m_minfltlist[i].m_fly.m_hourfltlist[i].m_arrive.m_min;break;}}printf继续查询吗y/n?;ClearBuffer;c=getchar;}}voidOneDayFLIGHTfltlist[]PNODEpsglist{charc=y;whilec==y||c==Y{DATEdate;intpeople
[40]i;PNODEp;fori=0;i40;i++people[i]=0;printf请输入您要管理的日期yyyymmdd;scanf%d%d%ddate.m_yeardate.m_monthdate.m_day;forp=psglist-next;p!=NULL;p=p-next{ifdatecmpp-m_psg.m_Datedate{fori=0;i40;i++{iffltlist[i].m_fltno==p-m_psg.m_fltnopeople[i]++;}}}fori=0;i40;i++{iffltlist[i].m_fltno!=-1{printf%d%s--%s--%s人数%d\nfltlist[i].m_fltnofltlist[i].m_szFromfltlist[i].m_szPassfltlist[i].m_szTopeople[i];}}printf继续管理吗?y/n;ClearBuffer;c=getchar;}}voidMultiDayFLIGHTfltlist[]PNODEpsglist{charc=y;whilec==y||c==Y{DATEdate
[7];intnij;intpeople
[40]
[7];PNODEp;printf请输入要查询的天数1-7;do{scanf%dn;ifn7||n1printf输入非法,请重新输入;}whilen7||n1;fori=0;in;i++{printf请输入第%d个日期yyyymmdd i;scanf%d%d%ddate[i].m_yeardate[i].m_monthdate[i].m_day;}fori=0;i40;i++forj=0;j7;j++people[i][j]=0;forp=psglist-next;p!=NULL;p=p-next{forj=0;jn;j++{ifdatecmpdate[j]p-m_psg.m_Date{fori=0;i40;i++{iffltlist[i].m_fltno==p-m_psg.m_fltnopeople[i][j]++;}}}}fori=0;i40;i++{iffltlist[i].m_fltno!=-1{printf%d%s--%s--%sfltlist[i].m_fltnofltlist[i].m_szFromfltlist[i].m_szPassfltlist[i].m_szTo;forj=0;jn;j++printf%dpeople[i][j];printf\n;}}printf继续查询吗?y/n;ClearBuffer;c=getchar;}}voidManageFLIGHTfltlist[]PNODEpsglist{for;;{charc;systemcls;printf航班管理\n;printf~~~~~~~~\n;printf
1.查询航班基本情况\n;printf
2.对某天航班飞行情况管理\n;printf
3.近期航班飞行情况管理\n;printf
4.取消航班\n;printf
5.新增航班\n;printf
6.返回\n;printf\n请选择1-6;c=getchar;switchc{case1:Queryfltlist;break;case2:OneDayfltlistpsglist;break;case3:MultiDayfltlistpsglist;break;case4:Delfltlist;break;case5:Addfltlist;break;case6:break;default:continue;}ifc==6break;}}voidSaveFlightFLIGHTfltlist[]{FILE*fp;iffp=fopenflight.datwb==NULL{printf不能打开flight.dat文件,航班数据无法保存\n;fclosefp;return;}fwritefltlist
[0]sizeofFLIGHT40fp;fclosefp;printf航班数据已保存至flight.dat文件\n;}voidSavePassengerPNODEpsglist{FILE*fp;PNODEp;intn=GetPsgCountpsglist;unlinkpsg.dat;ifn==0return;iffp=fopenpsg.datwb==NULL{printf不能打开psg.dat文件,乘客数据无法保存\n;fclosefp;return;}fwritensizeofint1fp;forp=psglist-next;p!=NULL;p=p-nextfwritep-m_psgsizeofPASSENGER1fp;fclosefp;printf乘客数据已保存至psg.dat文件\n;}voidQuitFLIGHTfltlist[]PNODEpsglist{SaveFlightfltlist;SavePassengerpsglist;}voidmainvoid{FLIGHTfltlist
[40];NODEpsglist;ReadFlightfltlist;ReadPassengerpsglist;for;;{charc;systemcls;printf飞机订票系统\n;printf~~~~~~~~~~~~\n;printf---主菜单---\n;printf
1.订票\n;printf
2.退票\n;printf
3.航班管理\n;printf
4.查询\n;printf
5.退出\n;printf\n请选择1-5;c=getchar;switchc{case1:Bookfltlistpsglist;break;case2:/*c_ticketfltlistpsglist;*/break;case3:Managefltlistpsglist;break;case4:queryfltlistpsglist;break;case5:Quitfltlistpsglist;break;default:continue;}ifc==5break;}ClearPsgListpsglist;}实验3约瑟夫环(Joseph)任务编号是1,2,……n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)一开始任选一个正整数作为报数上限值m从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止设计一个程序来求出出列顺序要求利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号测试数据m的初值为20,n=77个人的密码依次为3,1,7,2,4,7,4,首先m=6则正确的输出是什么?输入数据建立输入处理输入数据,输入m的初值,n,输入每个人的密码,建立单循环链表输出形式建立一个输出函数,将正确的输出序列实验内容:实验源程序:#includeiostreamusingnamespacestd;#defineN7typedefstructnode{intdata;intsercet;structnode*next;}ListNode;typedefListNode*LinkList;//建立单循环链表函数LinkListInitRingintnLinkListRinta[N]{ListNode*p*q;inti;R=q=ListNode*mallocsizeofListNode;fori=0;in-1;i++{p=ListNode*mallocsizeofListNode;q-data=i+1;q-sercet=a[i];q-next=p;q=p;}p-data=n;p-sercet=a[n-1];p-next=R;R=p;returnR;}//删除被数到的人LinkListDeleteintnLinkListRintk{intij;ListNode*p*q;p=R;fori=1;in;i++{forj=1;jk;j++p=p-next;q=p-next;p-next=q-next;coutq-data;k=q-sercet;freeq;}R=p;coutthelastis:p-data;returnR;}voidmain{LinkListR;intnim;coutinputthenumberoftheman:;cinn;coutinputm:;cinm;inta[N];coutinputtheserect:endl;fori=0;in;i++cina[i];cout被删除的顺序是;R=InitRingnRa;R=DeletenRm;coutendl;}实验结果:实验4纸牌游戏任务编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,输出这时正面向上的牌有哪些?实验内容:实验源程序:#includeiostreamusingnamespacestd;voidPcout1intiintj{switchi{case0:cout3;break;case1:cout4;break;case2:cout5;break;case3:cout6;break;case4:cout7;break;case5:cout8;break;case6:cout9;break;case7:cout10;break;case8:coutJ;break;case9:coutQ;break;case10:coutK;break;case11:coutA;break;case12:cout2;break;}switchj{case0:cout草花endl;break;case1:cout黑桃endl;break;case2:cout红心endl;break;case3:cout方块endl;break;}}intmain{intt=1x=2;intija
[13]
[4];fori=0;i13;i++forj=0;j4;j++a[i][j]=t;whilex53{fori=0;i13;i++{forj=0;j4;j++ifi*4+j+1%x==0{ift==1t=0;elset=1;a[i][j]=t;}}x++;}cout\n\n这时正面向上的牌有endl;fori=0;i13;i++{forj=0;j4;j++ifa[i][j]==1Pcout1ij;}}实验结果分三次截图:实验5赫夫曼树的建立任务建立建立最优二叉树函数要求可以建立函数输入二叉树,并输出其赫夫曼树在上交资料中请写明存储结构、基本算法(可以使用程序流程图)、输入输出、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;实验内容源程序includestdio.h#includestdlib.h#includemalloc.h#definem100structptree/*definethetypeofbanarytree*/{intw;structptree*lchild;structptree*rchild;};structpforest/*definethetypeofchainbelt*/{structpforest*link;structptree*root;};intWTL=0;voidmain{structptree*hafmintw[m]intn;voidtravelstructptree*headintn;structptree*head;intniw[m];printfpleaseinputthesumofnode\n;scanf%dn;printfpleaseinputweightofeverynode\n;fori=1;i=n;i++scanf%dw[i];head=hafmwn;travelhead0;printfThelengthofthebestpathisWTL=%dWTL;}voidtravelstructptree*headintn{structptree*p;p=head;ifp!=NULL{ifp-lchild==NULLp-rchild==NULL{printf%dp-w;printfthehopsofthenodeis:%d\nn;WTL=WTL+n*p-w;}travelp-lchildn+1;travelp-rchildn+1;}}structptree*hafmintw[m]intn{structpforest*inforeststructpforest*fstructptree*t;structpforest*p1*p2*f;structptree*ti*t*t1*t2;inti;f=structpforest*mallocsizeofstructpforest;f-link=NULL;fori=1;i=n;i++/*producentreesthathaveonlyrootnode*/{ti=structptree*mallocsizeofstructptree;ti-w=w[i];ti-lchild=NULL;ti-rchild=NULL;f=inforestfti;}whilef-link-link!=NULL/*atleasthavetwobinarytrees*/{p1=f-link;p2=p1-link;f-link=p2-link;/*takeoutfrontaltwotrees*/t1=p1-root;t2=p2-root;freep1;freep2;t=structptree*mallocsizeofstructptree;t-w=t1-w+t2-w;/*weightbeadded*/t-lchild=t1;t-rchild=t2;/*producethenewbinarytree*/f=inforestft;}p1=f-link;t=p1-root;returnt;}structpforest*inforeststructpforest*fstructptree*t{structpforest*p*q*r;structptree*ti;r=structpforest*mallocsizeofstructpforest;r-root=t;q=f;p=f-link;whilep!=NULL/*lookforthepositiontobeinserted*/{ti=p-root;ift-wti-w{q=p;p=p-link;}elsep=NULL;/*forceexitthecycle*/}r-link=q-link;q-link=r;returnf;}实验结果1.2.实验6二叉树的建立与遍厉任务要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数;实验内容:实验源程序:#includemalloc.hstructTREE#includestdio.h{intdata;TREE*L*R;};voidNewNodeintvalue;voidInsertTREE*RootTREE*Node;voidpreorderTREE*Node;voidinorderTREE*Node;voidpostorderTREE*Node;voidfloororderTREE*Node;TREE*pRoot;//定义根结点intmain{intnt;pRoot=NULL;printf输入节点个数:;scanf%dn;ifn{printf输入各个节点值:;whilen--{scanf%dt;NewNodet;}}ifpRoot==NULLprintfEmptytree\n;else//如果树非空输出各种遍历{printf先序遍历:;preorderpRoot;printf\n;printf中序遍历:;inorderpRoot;printf\n;printf后序遍历:;postorderpRoot;printf\n;printf层序遍历:;floororderpRoot;}return0;}voidNewNodeintvalue//向树中加入一个新结点{TREE*pNode=structTREE*mallocsizeofTREE;//为待插入结点分配内存单元pNode-data=value;pNode-L=NULL;pNode-R=NULL;InsertpRootpNode;//将该结点插入到二叉树中}voidInsertTREE*RootTREE*Node//结点插入过程{ifRoot==NULL//如果根结点为空{Root=Node;//将结点插入到根结点return;//返回}else{ifRoot-data=Node-data//如果Node结点数据小于等于根结点数据InsertRoot-LNode;//插入左子树elseInsertRoot-RNode;//否则插入右子树}}voidpreorderTREE*Node//输出前序遍历{ifNode!=NULL{printf%dNode-data;preorderNode-L;preorderNode-R;}}voidinorderTREE*Node//输出中序遍历{ifNode!=NULL{inorderNode-L;printf%dNode-data;inorderNode-R;}}voidpostorderTREE*Node//输出后序遍历{ifNode!=NULL{postorderNode-L;postorderNode-R;printf%dNode-data;}}voidfloororderTREE*Node//宽度优先搜索输出层序遍历{ifNode==NULLreturn;//如果树为空返回TREE*p
[100];intq1q2q3i;p
[0]=Node;q1=q2=0;whileq1=q2{q3=q2+1;fori=q1;iq3;i++{printf%dp[i]-data;ifp[i]-L!=NULLp[++q2]=p[i]-L;ifp[i]-R!=NULLp[++q2]=p[i]-R;}q1=q3;}printf\n;}实验7运动会分数统计任务参加运动会有n个学校,学校编号为1……n比赛分成m个男子项目,和w个女子项目项目编号为男子1……m,女子m+1……m+w不同的项目取前五名或前三名积分;取前五名的积分分别为
7、
5、
3、
2、1,前三名的积分分别为
5、
3、2;哪些取前五名或前三名由学生自己设定(m=20n=20)功能要求可以输入各个项目的前三名或前五名的成绩;能统计各学校总分;可以按学校编号、学校总分、男女团体总分排序输出;可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校规定输入数据形式和范围20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)输出形式有中文提示,各学校分数为整形界面要求有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求存储结构学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;测试数据要求使用
1、全部合法数据;
2、整体非法数据;
3、局部非法数据进行程序测试,以保证程序的稳定测试数据及测试结果请在上交的资料中写明;实验内容:实验源程序:typedefstructcMenu{//菜单的结构定义intID;char*Name;}Menu;//voidShowMenuchar*MenuNameMenu*mintMenu_Num;//菜单的绘制//intSelectMenuID;//菜单项的选择程序Menu*objMenu;//用来保存当前菜单对象char*objMenuName;//用来保存当前菜单对象_名称intobjMenu_Num;//用来保存当前菜单对象_选择项计数voidShowMenuchar*MenuNameMenu*pintMenu_Num{//菜单的绘制objMenu=p;//保存当前菜单指针objMenuName=MenuName;//保存菜单名称objMenu_Num=Menu_Num;//保存菜单最大选项systemcls;//清屏调用系统shell命令inti;intx0=0;intx1=10;intX=10;//屏幕的X坐标coutsetwX;fori=1;i=60;i++{//绘制菜单头--标题intMenuNameLen=strlenMenuName;ifi==30-MenuNameLen/2//在**********的中间打印文字{coutMenuName;//打印菜单标题i=i+MenuNameLen+2;//设置偏移位置}else{cout*;//菜单头绘制完成!}}cout\n;coutsetwX*setw59*\nsetwX;fori=1;i=Menu_Num;i++{ifx0==0{cout*setwx1i.p[i].Name;x0=strlenp[i].Name;}else{//ifm[i].Name
[0]!=#ifi!=10coutsetw31-x1-x0i.p[i].Name;elsecoutsetw31-x1-x0+
10.p[i].Name;coutsetw60-31-x0-3*\nsetwX;x0=0;}}coutsetwX*setw59*\nsetwX;fori=1;i60;i++cout*;cout\n\n;coutsetwX\t请输入你选择的项1---Menu_Num\n\n;}intSelectMenuID{//菜单项选择输入程序chart
[50];//临时数组,用来保存用户输入的选项interr_t=0;//错误次数while1//选择项的输入{cout\n请输入数字[0--9]:;cint;ift
[0]=0t
[0]=9strlent==1//防止输入错误!{switcht
[0]{case0:return0;case1:return1;case2:return2;case3:return3;case4:return4;case5:return5;case6:return6;case7:return7;case8:return8;case9:return9;}}else{cerr警告输入只能是0--9这几个数字!\n;err_t++;iferr_t3{ShowMenuobjMenuNameobjMenuobjMenu_Num;err_t=0;}continue;}}return-1;}//////////////////////////////////////////////////////////////typedefstructxm_table{intitem;//项目编号charname
[20];intcount;//该项目得分人的数量}XM_TABLE;structSTUDENT{charname
[20];//姓名intscore;//得分成绩intrange;//得分名次intitem;//得分项目intsex;//性别};typedefstructSchoolStruct//参赛学校{intcount;//计算实际运动员个数intserial;//学校编号charName
[20];intmenscore;//男子团体总分intwomenscore;//女子团体总分inttotalscore;//团体总分intjifeng;//学校积分structSTUDENTstudents
[10];//参赛运动员structSchoolStruct*next;//参赛学校}SCHOOLSTRUCT;voidCreat_Shool_LinkSCHOOLSTRUCT*head;//建立链表voidAdd_Student_linkSCHOOLSTRUCT*head;//添加获奖学生voidTj_FXSCHOOLSTRUCT*head;//成绩统计voidFind_Xm_IDSCHOOLSTRUCT*headintxm_ID;//按项目编号查询取得前三或前五名的学校voidFind_School_XmSCHOOLSTRUCT*headintSchool_IDintXM_ID;//按学校编号查询学校某个项目voidOutPut_LinkSCHOOLSTRUCT*head;//向屏幕输出数据void_SetArgs;//参数设置void_SetXmInfor;//项目资料voidAddStudentSCHOOLSTRUCT*SchoolTable;//添加学生数据intSchoolCount=0;//学校总数intboyCount=0;//男生项目总数intgirlCount=0;//女生项目总数intxm_Count=0;//项目总数XM_TABLExm_T
[41];//项目表intSportmeeting{//函数入口Menup
[9];p
[1].Name=参数设置;p
[2].Name=添加学生;p
[3].Name=统计;p
[4].Name=学校查询;p
[5].Name=项目查询;p
[6].Name=返回;SCHOOLSTRUCT*h*head*SchoolTable;//=newSCHOOLSTRUCT;intID=1;while1{ShowMenu数据结构--运动会成绩统计m6;//显示菜单ID=SelectMenuID;//获取选中的菜单IDswitchID{case1:{_SetArgs;_SetXmInfor;Creat_Shool_LinkSchoolTable;h=head=SchoolTable;//InitKey;break;}case2:{AddStudentSchoolTable;break;}case3:{Tj_FXh;OutPut_Linkh;break;}case4:{intm_school_id;intm_xm_id;cout\n请输入学校编号1--SchoolCountSchoolID=;cinm_school_id;cout\n请输入项目编号1--xm_CountXMID=;cinm_xm_id;Find_School_Xmhm_school_idm_xm_id;//InitKey;break;}case5:{intm_xm_i;cout\n请输入项目编号ID=;cinm_xm_i;Find_Xm_IDh1;//InitKey;}case6:return0;}}return0;}voidCreat_Shool_LinkSCHOOLSTRUCT*head{//建立链表//创建链表SCHOOLSTRUCT*p;p=newSCHOOLSTRUCT;head=p;forinti=1;i=SchoolCount;i++{p=p-next=newSCHOOLSTRUCT;cout请输入学校名称\n;cout学校编号SchoolID=iendl;coutSchoolName=;p-serial=i;p-jifeng=0;//设置积分为0p-totalscore=0;p-womenscore=0;p-menscore=0;cinp-Name;p-count=0;//置运动员数为0;}p-next=NULL;head=head-next;}voidAdd_Student_linkSCHOOLSTRUCT*head{//添加获奖学生SCHOOLSTRUCT*h*p;intSchool_ID;//学校IDcharStudent_name
[20];//学生姓名intsex;//性别intXM_ID;intscore;intrange;//得分名次cout请输入学生学校ID1---SchoolCountID=;cinSchool_ID;cout请输入学生姓名Name=;cinStudent_name;cout请选择学生性别[0=女1=男]sex=;cinsex;ifsex==0cout\n请输入项目编号ID1---girlCountID=;ifsex==1cout\n请输入项目编号ID1---boyCountID=;cinXM_ID;cout\n请输入该项目得分score=;cinscore;cout\n请输入得分名次range=;cinrange;//查找学校IDh=head;whileh{ifh-serial==School_ID{p=h;p-count=p-count+1;//运动员数+1strcpyp-students[p-count].nameStudent_name;//学生姓名p-students[p-count].item=XM_ID;//得分项目xm_T[XM_ID].count=xm_T[XM_ID].count+1;//该项目得分人数+1p-students[p-count].range=range;//得分名次p-students[p-count].score=score;//得分p-students[p-count].sex=sex;//性别break;}elseh=h-next;}}voidTj_FXSCHOOLSTRUCT*head{//成绩统计SCHOOLSTRUCT*h*p;p=h=head;//保存链表头指针intmenscore=0;//男子团体总分intwomenscore=0;//女子团体总分inttotalscore=0;//团体总分inti;intitem_i=0;intjf=0;//积分whilep{fori=1;i=p-count;i++{//计算分数totalscore=totalscore+p-students[i].score;//计算总分ifp-students[i].sex==0womenscore=womenscore+p-students[i].score;////女子团体总分elsemenscore=menscore+p-students[i].score;//男子团体总分//计算积分item_i=p-students[i].item;ifxm_T[item_i].count=5{//取前5名ifp-students[i].range==1jf=jf+7;elseifp-students[i].range==2jf=jf+5;elseifp-students[i].range==3jf=jf+3;elseifp-students[i].range==4jf=jf+2;elseifp-students[i].range==5jf=jf+1;}ifxm_T[item_i].count5{//取前3名ifp-students[i].range==1jf=jf+5;elseifp-students[i].range==2jf=jf+3;elseifp-students[i].range==3jf=jf+2;}//cout\nDEBUG:jf=jfendl;//cout\nDEBUGp-students[i].range:p-students[i].rangeendl;}p-jifeng=jf;//计算积分p-womenscore=womenscore;//保存女子总分p-menscore=menscore;//保存男子总分p-totalscore=totalscore;//保存总分jf=0;menscore=0;//男子团体总分womenscore=0;//女子团体总分totalscore=0;//总分p=p-next;//向后移动指针}}voidFind_Xm_IDSCHOOLSTRUCT*headintxm_ID{//按项目编号查询取得前三或前五名的学校SCHOOLSTRUCT*h*p;p=h=head;//保存链表头指针inti;cout\n按项目编号查询取得前三或前五名的学校\n;cout查询结果如下\n;whileh{//fori=1;i=h-count;i++{ifh-students[i].item==xm_ID{cout学校h-Name姓名h-students[i].name名次h-students[i].rangeendl;}}h=h-next;}}voidFind_School_XmSCHOOLSTRUCT*headintSchool_IDintXM_ID{//按学校编号查询学校某个项目SCHOOLSTRUCT*h*p;p=h=head;//保存链表头指针whileh{ifh-serial==School_ID{p=h;break;}h=h-next;}cout\n按学校编号查询学校某个项目\n;intxm_i=0;forinti=1;i=p-count;i++{ifp-students[i].item==XM_ID{cout查询结果如下endl;cout姓名p-students[i].name;xm_i=p-students[i].item;ifp-students[i].sex==0{cout性别女\n;xm_i=xm_i+20;}else{cout性别男\n;}cout项目编号p-students[i].item项目名称xm_T[xm_i].name;cout该项目得分p-students[i].score名次p-students[i].rangeendl;}}}voidOutPut_LinkSCHOOLSTRUCT*head{//向屏幕输出数据SCHOOLSTRUCT*h;h=head;inti;intxm_item;whileh{//遍历学校cout学校ID\nh-serial;cout学校名称h-Name;cout本次运动会积分h-jifeng\n;cout男子团体总分h-menscore;cout女子团体总分h-womenscore;cout总分h-totalscore\n;cout运动员数h-countendl;cout\n---------------------------------------\n;fori=1;i=h-count;i++{//输出该校学生运动员情况cout运动员名称h-students[i].name;cout性别h-students[i].sex\n;xm_item=h-students[i].item;ifh-students[i].sex==0xm_item=xm_item+20;//如果是女生则项目表向后移动20cout得分项目xm_T[xm_item].name;cout得分h-students[i].score;cout得分名次h-students[i].range\n;}cout\n--------------------------------------\n;h=h-next;//指针向后移动}cout\n--本次运动会的项目清单--\n;intxm_count_i;forxm_count_i=1;xm_count_i=boyCount;xm_count_i++{cout编号xm_T[xm_count_i].item名称xm_T[xm_count_i].name参与人数xm_T[xm_count_i].countendl;}forxm_count_i=1;xm_count_i=girlCount;xm_count_i++{cout编号xm_T[xm_count_i+20].item名称xm_T[xm_count_i+20].name参与人数xm_T[xm_count_i+20].countendl;}cout\n-------------------------\n;}void_SetArgs{//参数设置////设置参赛学校loop_1:cout请输入参赛学校n=2\nn=;cinSchoolCount;ifSchoolCount2{cout\n数据输入有误;gotoloop_1;}////////////////////////////loop_2:cout\n请输男生项目总数0n=20\nm=;cinboyCount;ifboyCount0||boyCount20{cout\n数据输入有误;gotoloop_2;}/////////////////////////////loop_3:cout\n请输女生项目总数0n=20\nw=;cingirlCount;ifgirlCount0||girlCount20{cout\n数据输入有误;gotoloop_3;}/////////////////////////////xm_Count=boyCount+girlCount;//项目总数}void_SetXmInfor{//项目资料inti;cout\n请输入男生项目信息endl;fori=1;i=boyCount;i++{cout项目i名称name=;xm_T[i].item=i;//项目编号xm_T[i].count=0;//该项目的参与人数cinxm_T[i].name;//项目名称}cout\n请输入女生项目信息endl;fori=1;i=girlCount;i++{cout项目i名称name=;xm_T[20+i].item=i;//项目编号cinxm_T[20+i].name;//项目名称}}voidAddStudentSCHOOLSTRUCT*SchoolTable{//添加学生数据intANW;Loop_4:Add_Student_linkSchoolTable;//添加学生数据cout\n是否继续添加学生数据?[0=No1=Yes]\n;cinANW;ifANW==1gotoLoop_4;}实验结果:。