《数据结构课程设计报告运动会分数统计大学论文.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计报告运动会分数统计大学论文.doc(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验报告(数据结构)学院:信息科学与技术学院班级:姓名:日期:课题一 运动会分数统计任务:参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些项目取前五名或前三名由学生自己设定。(m=20,n=20)功能要求:1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分;3) 可以按学校编号、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;5) 可以按项目编号查询取得前三或前五名的学校。需
2、求分析:本演示程序中,用户可以对运动会的的成绩一不同的方式进行输入输出等操作。首先由用户输入运动会的成绩及相关的信息,然后程序会自动将输入的信息进行统计处理。用于测试程序的数据如下所示:学校数据校名东华大学上海交大复旦大学同济大学华东师范大学编号12345项目数据:项目编号项目名称项目编号项目名称1男子100米6女子跳高2男子200米7女子跳远3男子400米8女子铅球4男子跳高9女子100米5男子跳远10女子400米概要设计:void Scanf(); 输入学校运动会成绩 void Grade(); 查询成绩void Show(); 输出void Rank(); 查询名次void Show_s
3、umscore();学校总分排序输出void Show_boyscore();男团总分排序输出void Show_girlscore();女团总分排序输出void Show_num(); 学校编号排序输出void Menu(); 总菜单程序图:主函数 开始 输出学校、项目 Init()Scanf()Menu()结束Scanf输入函数开始输入项目前三名或前五名的成绩统计女生团体总分统计男生团体总分统计学校总分开始Init初始化函数 j10j=j+1Schooli.eventj=0j=1Schooli.num=i+1Schooli.girlscore=0Schooli.boyscore=0Scho
4、oli.sumscore=0InitList_Sq()ini=0,j Y N 结束 i=i+1 N Menu总菜单开始choose 1 2 3 4 5 6 7按项目编号查询前三名或前五名的学校按学校编号查询项目情况按女生团体总分排序输出按学校编号排序输出按男生团体总分排序输出按学校总分排序输出 退出 详细设计:#include#include#define LIST_INIT_SIZE 100 /线性表存储空间的初始分配量 #define LISTINCREMENT 10 /线性表存储空间的分配增量const int n=5; /参加运动会的学校个数 const int m=5; /男子项目个
5、数 const int w=5; /女子项目个数 void Init();/初始化学校总分、男女团体总分 void Scanf();/输入学校运动会成绩 void Grade();/查询成绩void Show();/输出void Rank();/查询名次void Show_sumscore();/学校总分排序输出void Show_boyscore();/男团总分排序输出void Show_girlscore();/女团总分排序输出void Show_num();/学校编号排序输出void Menu(); /总菜单typedef struct char *event; int num; int
6、 sumscore; int boyscore; int girlscore; int length; int listsize; /当前分配的存储容量 SqList;/ 初始化自定大小的线性表Lvoid InitList_Sq(SqList &L,int LIST_SIZE) L.event=(char *)malloc(LIST_SIZE* sizeof(char); if(!L.event) exit (0); L.length=0; L.listsize=LIST_SIZE;/初始化默认大小的线性表L void InitList_Sq(SqList &L) L.event=(char
7、*)malloc(LIST_INIT_SIZE* sizeof(char); if(!L.event)exit (0); /存储分配失败 L.length=0; /空表长度为0 L.listsize=LIST_INIT_SIZE; /初始存储容量 void ShowList_Sq(SqList &L,int Lenth) int i; for (i=0;iLenth;i+) printf(项目%d 成绩:%dn,i+1,L.eventi);SqList Schooln;void Init() int i,j; for(i=0;in;i+) InitList_Sq(Schooli,m+w); S
8、chooli.sumscore=0; Schooli.boyscore=0; Schooli.girlscore=0; Schooli.num=i+1; for(j=0;jm+w;j+) Schooli.eventj=0; void Scanf() int i,j,x; int a3=5,3,2; int b5=7,5,3,2,1; int c10,d10; printf(nn 输入各个项目的前三名或前五名的成绩nnn); for(i=0;im+w;i+) if(im) for(j=1;jn|xn|x=0);Schoolx-1.eventi=bj-1; else for(j=1;jn|xn|x
9、=0); Schoolx-1.eventi=aj-1; printf(n);/统计各校总分 for(i=0;in;i+) for(j=0;jm+w;j+) Schooli.sumscore+=Schooli.eventj; /统计男子总分 for (i=0;in;i+) for(j=0;jm;j+) Schooli.boyscore+=Schooli.eventj; /统计女子总分 for(i=0;in;i+) for(j=m;jn|kn|km+w|tm+w|t=0); int i=0; while(Schooli+.num!=k); printf(第%d个学校 项目%d 积分为:%dn,k,
10、t,School-i.eventt-1);void Show() for(int i=0;im+w|tm+w|t=0;i-) for(j=0;ji;j+) if(Schoolj.eventt-1Schooli.eventt-1) SqList temp=Schooli; Schooli=Schoolj; Schoolj=temp; /冒泡排序 if(t=m) printf(项目%d 前五名:n,t); for(i=0;im&t=m+w) printf(项目%d 前三名:n,t); for(i=0;i=0;i-) for(j=0;ji;j+) if(Schoolj.sumscore=0;i-)
11、for(j=0;ji;j+) if(Schoolj.boyscore=0;i-) for(j=0;ji;j+) if(Schoolj.girlscore=0;i-) for(j=0;jSchooli.num) SqList temp=Schooli; Schooli=Schoolj; Schoolj=temp; printf(按学校编号排列:nn); Show();void Menu() /菜单函数 int choose; while(1) printf( 运动会统计系统nn); printf(*n); printf( 1、按学校编号排序输出n); printf( 2、按学校总分排序输出n);
12、 printf( 3、按男团总分排序输出n); printf( 4、按女团总分排序输出n); printf( 5、按学校编号查询学校某个项目的情况n); printf( 6、按项目编号查询取得前三名或前五名的学校n); printf( 7、退出n); printf(*n); printf(nn -选择编号-n); scanf(%d,&choose); if(choose=1)Show_num(); if(choose=2)Show_sumscore(); if(choose=3)Show_boyscore(); if(choose=4)Show_girlscore(); if(choose=5
13、)Grade(); if(choose=6)Rank(); if(choose=7)break; int main() int i=0; for(i=0;i80;i+) printf(*); printf(n 编号 运动会项目 n); printf( 1 男子100米 n); printf( 2 男子200米 n); printf( 3 男子400米 n); printf( 4 男子跳高 n); printf( 5 男子跳远 n); printf( 6 女子跳高 n); printf( 7 女子跳远 n); printf( 8 女子铅球 n); printf( 9 女子100米 n); pri
14、ntf( 10 女子400米 nn); for(i=0;i80;i+) printf(*); printf(n); printf( 编号 参与运动会的学校 n); printf( 1 东华大学 n); printf( 2 上海交大 n); printf( 3 复旦大学 n); printf( 4 同济大学 n); printf( 5 华东师范大学 nn); for(i=0;i80;i+) printf(*); printf(n); Init(); Scanf(); Menu(); return 0;调试分析:1,在编译过程中使用了结构体来存储航班和客户的相关信息,注意到使用结构体可以定义自己需
15、要的类型,同时还可以对其成员进行各种操作,有效地解决了数据的建立和修改;2,在编程时建立了文件,将自己输入的文件和系统内部存入文档,有效地实现了大容量数据的操作;3,运用菜单功能,是程序和实际生活中的情况更加接近,有利于程序的广泛利用;4,在编程中学习到了编程的很多好的习惯,养成了添加注释的习惯。5,注意编程的细节,如:printf输出语句后记得加上“;”等。运行结果:1、初始用户界面2、用户首先输入在各个项目中各个学校获得的名次,系统自动统计后,得到如下的DPS界面:其中项目1-5取前五名,6-10取前三名3、输入选择编号输入选择编号1,按学校编号排序输出:输入选择编号2,按学校总分排序输出
16、:输入选择编号3,按男团总分排序输出:输入选择编号4,按女子团体总分输出:选择编号5,按学校编号查询某个项目的情况:选择编号6,按项目编号查询前三名或前五名的学校:选择编号7,退出系统:课题三 迷宫问题求解问题描述:迷宫问题是取自心理学的一个古典实验。实验中,把一只老鼠从一个没有顶的大盒子的门放入,在盒中设置了许多墙,对行进的方向形成了多处阻挡。盒子仅仅有一个出口,在出口处放置了一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。重复对老鼠进行上述实验,看老鼠能在多久找到出口。请设计一个算法实现迷宫问题求解。需求分析:要求设计程序输出如下:(1) 建立一个大小为mn的任意迷宫(迷宫数据可由用户输入或
17、由程序自动生成),并在屏幕上显示出来;(2)找出一条通路的二元组(i,j)数据序列,(i,j)表示通路上某一点的坐标。(3)在屏幕上输出迷宫和通路;源代码:#include #include #define M 100#define N 100struct mark /定义迷宫内点的坐标类型 int x; int y; ; struct Element /链栈元素 int x,y; /x行,y列 int d; /d下一步的方向 ; typedef struct LStack /链栈 Element elem; struct LStack *next; *PLStack; /*栈函数*/ int
18、 InitStack(PLStack &S)/构造空栈 S=NULL; return 1; int StackEmpty(PLStack S)/判断栈是否为空 if(S=NULL) return 1; else return 0; int Push(PLStack &S, Element e)/压入新数据元素 PLStack p; p=(PLStack)malloc(sizeof(LStack); p-elem=e; p-next=S; S=p; return 1; int Pop(PLStack &S,Element &e) /栈顶元素出栈 PLStack p; if(!StackEmpty
19、(S) e=S-elem; p=S; S=S-next; free(p); return 1; else return 0; /*求迷宫路径函数*/ void MazePath(struct mark start,struct mark end,int mazeMN,int diradd42) int i,j,d;int a,b; Element elem,e; PLStack S1, S2; InitStack(S1); InitStack(S2); mazestart.xstart.y=2; /入口点作上标记 elem.x=start.x; elem.y=start.y; elem.d=-
20、1; /开始为-1 Push(S1,elem); while(!StackEmpty(S1) /栈不为空 有路径可走 Pop(S1,elem); i=elem.x; j=elem.y; d=elem.d+1; /下一个方向 while(d4) /试探东南西北各个方向 a=i+diraddd0; b=j+diraddd1; if(a=end.x & b=end.y & mazeab=0) /如果到了出口 elem.x=i; elem.y=j; elem.d=d; Push(S1,elem); elem.x=a; elem.y=b; elem.d=88; /方向输出为-1 判断是否到了出口 Push(S1,elem); printf(n0=东(右) 1=南(下) 2=西(左) 3=北(上) 88(byebye!)则为走出迷宫nn通路为:(行坐标,列坐标,方向)n);