数据结构课程设计报告运动会分数统计

上传人:仙*** 文档编号:34983071 上传时间:2021-10-25 格式:DOC 页数:29 大小:1.65MB
返回 下载 相关 举报
数据结构课程设计报告运动会分数统计_第1页
第1页 / 共29页
数据结构课程设计报告运动会分数统计_第2页
第2页 / 共29页
数据结构课程设计报告运动会分数统计_第3页
第3页 / 共29页
点击查看更多>>
资源描述
实验报告(数据结构)学院:信息科学与技术学院班级:姓名:日期:课题一 运动会分数统计任务:参加运动会有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) 可以按项目编号查询取得前三或前五名的学校。需求分析:本演示程序中,用户可以对运动会的的成绩一不同的方式进行输入输出等操作。首先由用户输入运动会的成绩及相关的信息,然后程序会自动将输入的信息进行统计处理。用于测试程序的数据如下所示:学校数据校名东华大学上海交大复旦大学同济大学华东师范大学编号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_sumscore();学校总分排序输出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=0Schooli.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; /男子项目个数 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 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 *)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); Schooli.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=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,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-) 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); 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)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); printf( 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,在编译过程中使用了结构体来存储航班和客户的相关信息,注意到使用结构体可以定义自己需要的类型,同时还可以对其成员进行各种操作,有效地解决了数据的建立和修改;2,在编程时建立了文件,将自己输入的文件和系统内部存入文档,有效地实现了大容量数据的操作;3,运用菜单功能,是程序和实际生活中的情况更加接近,有利于程序的广泛利用;4,在编程中学习到了编程的很多好的习惯,养成了添加注释的习惯。5,注意编程的细节,如:printf输出语句后记得加上“;”等。运行结果:1、初始用户界面2、用户首先输入在各个项目中各个学校获得的名次,系统自动统计后,得到如下的DPS界面:其中项目1-5取前五名,6-10取前三名3、输入选择编号输入选择编号1,按学校编号排序输出:输入选择编号2,按学校总分排序输出:输入选择编号3,按男团总分排序输出:输入选择编号4,按女子团体总分输出:选择编号5,按学校编号查询某个项目的情况:选择编号6,按项目编号查询前三名或前五名的学校:选择编号7,退出系统:课题三 迷宫问题求解问题描述:迷宫问题是取自心理学的一个古典实验。实验中,把一只老鼠从一个没有顶的大盒子的门放入,在盒中设置了许多墙,对行进的方向形成了多处阻挡。盒子仅仅有一个出口,在出口处放置了一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。重复对老鼠进行上述实验,看老鼠能在多久找到出口。请设计一个算法实现迷宫问题求解。需求分析:要求设计程序输出如下:(1) 建立一个大小为mn的任意迷宫(迷宫数据可由用户输入或由程序自动生成),并在屏幕上显示出来;(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 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(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=-1; /开始为-1 Push(S1,elem); while(!StackEmpty(S1) /栈不为空 有路径可走 Pop(S1,elem); i=elem.x; j=elem.y; d=elem.d+1; /下一个方向 while(d(%d,%d),e.x,e.y); if(e.d=0)printf(右移);else if(e.d=1)printf(下移);else if(e.d=2)printf(左移);else if(e.d=3)printf(上移);else if(e.d=88)printf(到达目的地,走出迷宫n); return; /跳出两层循环,本来用break,但发现出错,exit又会结束程序,选用return还是不错滴 if(mazeab=0) /找到可以前进的非出口的点 mazeab=2; /标记走过此点 elem.x=i; elem.y=j; elem.d=d; Push(S1,elem); /当前位置入栈 i=a; /下一点转化为当前点 j=b; d=-1; d+; printf(没有找到可以走出此迷宫的路径n); /*建立迷宫*/ void initmaze(int mazeMN,int m,int n) /*手动建立函数*/ int i,j; /迷宫行,列 /M printf(n请输入迷宫的各行各列:n用空格隔开,0代表路,1代表墙n,m,n); for(i=1;i=m;i+) for(j=1;j=n;j+) scanf(%d,&mazeij); printf(你建立的迷宫为(最外圈为墙).n); if(maze11=1|mazemn=1)printf(输入有误);for(i=0;i=m+1;i+) /加一圈围墙 mazei0=1; mazein+1=1; for(j=0;j=n+1;j+) maze0j=1; mazem+1j=1; for(i=0;i=m+1;i+) /输出迷宫 for(j=0;j=n+1;j+) if(mazeij=0)printf( ); else if(mazeij=1) printf();printf(n); void initauto(int mazeMN,int m,int n) /*自动建立迷宫函数*/ int i,j; for(i=1;i=m;i+)for(j=1;j=n;j+)mazeij=rand()%2;maze11=0;mazemn=0;printf(你建立的迷宫为(最外圈为墙).n); for(i=0;i=m+1;i+) /加一圈围墙 mazei0=1; mazein+1=1; for(j=0;j=n+1;j+) maze0j=1; mazem+1j=1; for(i=0;i=m+1;i+) /输出迷宫 for(j=0;j=n+1;j+) if(mazeij=0)printf( ); else if(mazeij=1) printf();printf(n); void result_maze(int mazeMN,int m,int n,int x,int y)int i,j;mazexy=2;for(i=0;i=m+1;i+) /加一圈围墙 mazei0=1; mazein+1=1; for(j=0;j=n+1;j+) maze0j=1; mazem+1j=1; printf(n迷宫走过的路径(用表示)如下所示:nt);for(i=0;i=m+1;i+)printf(n); for(j=0;j=n+1;j+) if(mazeij=0) printf( ); else if(mazeij=1) printf(); else if(mazeij=2) printf(); printf(n);void exit()printf(退出系统请按任意键两下,谢谢!n);void main() int stoMN,i,m,n; struct mark start,end; /start,end入口和出口的坐标 int add42=0,1,1,0,0,-1,-1,0;/行增量和列增量 方向依次为东西南北 /M printf(*n); printf( 欢迎进入迷宫求解系统n); printf( n); printf(*n); printf( 手动生成迷宫 请按:1n); printf( 自动生成迷宫 请按:2n); printf( 退出 请按:3nn); printf(*n); printf(n); printf(请选择你的操作:n); scanf(%d,&i); switch(i) case 1: printf(请输入迷宫的行数 m=); scanf(%d,&m); printf(请输入迷宫的列数 n=); scanf(%d,&n); initmaze(sto,m,n);/建立迷宫 start.x=1;start.y=1;end.x=m;end.y=n;MazePath(start,end,sto,add); /find path result_maze(sto,m,n,end.x,end.y); break; case 2: printf(请输入迷宫的行数 m=); scanf(%d,&m); printf(请输入迷宫的列数 n=); scanf(%d,&n); initauto(sto,m,n);/建立迷宫 start.x=1;start.y=1;end.x=m;end.y=n;MazePath(start,end,sto,add); /find path result_maze(sto,m,n,end.x,end.y);break; case 3:exit(); system(PAUSE); 运行结果:菜单栏:选择1,手动输入0-1迷宫,生成实际迷宫生成迷宫路径和通路: 选择2,自动创建迷宫,生成迷宫路径和通路:选择3,退出系统:
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!