数据结构课程设计报告-运动会分数统计_第1页
数据结构课程设计报告-运动会分数统计_第2页
数据结构课程设计报告-运动会分数统计_第3页
数据结构课程设计报告-运动会分数统计_第4页
数据结构课程设计报告-运动会分数统计_第5页
已阅读5页,还剩23页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.实验报告(数据结构)班级:..课题一 运动会分数统计任务:n1……nmw1~m,m+1~m+w。不同的项目取前五名或前三53132;(m<=20,n<=20)功能要求:可以输入各个项目的前三名或前五名的成绩;能统计各学校总分;可以按学校编号、学校总分、男女团体总分排序输出;可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。需求分析:本演示程序中,用户可以对运动会的的成绩一不同的方式进行输入输出等操作。首先由用户输入运动会的成绩及相关的信息,然后程序会自动将输入的信息进行统计处理。用于测试程序的数据如下所示:校名东华大学 上海交大 复旦大学 同济大学 华东师范大学校名东华大学 上海交大 复旦大学 同济大学 华东师范大学编号12345项目数据:项目编号项目名称项目编号项目名称1男子100米6女子跳高2男子200米7女子跳远3男子400米8女子铅球4男子跳高91005男子跳远10400概要设计:voidScanf(); 输入学校运动会成绩voidGrade(); 查询成绩voidShow(); 输出voidRank(); 查询名次voidShow_sumscore();学校总分排序输出voidShow_boyscore();男团总分排序输出voidShow_girlscore();女团总分排序输出voidShow_num();voidMenu();程序图:主函数

学校编号排序输出总菜单开始开始输出学校、项目InitInit()Scanf()Menu()结束结束Scanf输入函数开始输入项目前三名或前五名统计学校总分统计男生团体总分开始输入项目前三名或前五名统计学校总分统计男生团体总分统计女生团体总分开始Init初始化函数开始i=0,ji=0,jYNi<nInitList_Sq()结束School[i].sumscore=0School[i].boyscore=0Schooli].girlscore=0i=i+1School[i].num=i+1School[i].num=i+1j=1j<10School[i].event[j]=0j=j+1Menu总菜单按按按按项男女学目编生生校号查团团编询前体体号三名总总查或前分分询五名排排项的学序输出序输出目情况校开始choose开始choose1234567按学校编号排序输出按学校总分排序输出退出#include<stdio.h>#include<stdlib.h>#defineLIST_INIT_SIZE100 线性表存储空间的初始分配#defineLISTINCREMENT10 线性表存储空间的分配增量constintn=5; 参加运动会的学校个数constintm=5; 男子项目个数constintw=5; 女子项目个voidInit();//voidScanf();//输入学校运动会成绩voidGrade();//查询成绩voidShow();//输出voidRank();//查询名次voidShow_sumscore();//学校总分排序输出voidShow_boyscore();//男团总分排序输出voidShow_girlscore();//女团总分排序输出voidShow_num();//学校编号排序输出voidMenu();//总菜单typedefstruct{char*event;intnum;intsumscore;intboyscore;intgirlscore;intlength;intlistsize; 当前分配的存储容量}SqList;//初始化自定大小的线性表LvoidInitList_Sq(SqList&L,intLIST_SIZE){L.event=(char*)malloc(LIST_SIZE*sizeof(char));if(!L.event)exit(0);L.length=0;L.listsize=LIST_SIZE;}//初始化默认大小的线性表LvoidInitList_Sq(SqList{L.event=(char*)malloc(LIST_INIT_SIZE*sizeof(char));if(!L.event)exit(0); 存储分配失败L.length=0; 空表长度为0L.listsize=LIST_INIT_SIZE; 初始存储容}voidShowList_Sq(SqList&L,intLenth){inti;for(i=0;i<Lenth;i++)printf("项目%d 成绩:%d\n",i+1,L.event[i]);}SqListSchool[n];voidInit(){inti,j;for(i=0;i<n;i++){InitList_Sq(School[i],m+w);School[i].sumscore=0;School[i].boyscore=0;School[i].girlscore=0;School[i].num=i+1;for(j=0;j<m+w;j++){School[i].event[j]=0;}}}voidScanf(){inti,j,x;inta[3]={5,3,2};intb[5]={7,5,3,2,1};intc[10],d[10];printf("\n\n \n\n\n");for(i=0;i<m+w;i++){if(i<m){for(j=1;j<=5;j++){do{printf("项%d 第%d名 学校编:",i+1,j);scanf("%d",&x);printf("\n");if(x>n||x<=0)printf("输入错误,请重新输入!\n");}while(x>n||x<=0);School[x-1].event[i]=b[j-1];}}else{

for(j=1;j<=3;j++){do{

printf("项目%d 第%d名 校编:",i+1,j);scanf("%d",&x);printf("\n");if(x>n||x<=0)printf("输入错误,请重新输入!\n");}while(x>n||x<=0);School[x-1].event[i]=a[j-1];}}}printf("\n");//统计各校总分for(i=0;i<n;i++){for(j=0;j<m+w;j++){School[i].sumscore+=School[i].event[j];}}//统计男子总分for(i=0;i<n;i++){for(j=0;j<m;j++){School[i].boyscore+=School[i].event[j];}}//统计女子总分for(i=0;i<n;i++){for(j=m;j<m+w;j++){School[i].girlscore+=School[i].event[j];}}}voidGrade(){intk,t;do{printf("\n请输入需要查询的学校编号:");scanf("%d",&k);if(k>n||k<=0)printf("输入出错,请重新输入!\n\n");}while(k>n||k<=0);do{printf("\nscanf("%d",&t);printf("\n");if(t>m+w||t<=0)printf("输入出错,请重新输入!\n\n");}while(t>m+w||t<=0);inti=0;while(School[i++].num!=k);printf("第%d个学校 项%d 积分:%d\n",k,t,School[--i].event[t-1]);}voidShow(){for(inti=0;i<n;i++){printf("第%d个学校:\n\n",i+1);ShowList_Sq(School[i],m+w);printf("男子总分为:%d\n",School[i].boyscore);printf("女子总分为:%d\n",School[i].girlscore);printf("学校总分为:%d\n",School[i].sumscore);printf("\n\n");}}voidRank(){inti,j,t;do{printf(scanf("%d",&t);if(t>m+w||t<=0)printf("输入出错,请重新输入!\n\n");}while(t>m+w||t<=0);for(i=n-1;i>=0;i--){for(j=0;j<i;j++){if(School[j].event[t-1]<School[i].event[t-1]){SqListtemp=School[i];School[i]=School[j];School[j]=temp;}}}//冒泡排序if(t<=m){printf("项目%d 前五for(i=0;i<5;i++){printf("第%d个学校\n",School[i].num);}}elseif(t>m&&t<=m+w){printf("项目%d 前三for(i=0;i<3;i++){printf("第%d个学校\n",School[i].num);}}elseprintf("输入错误,请重新输入!\n");}voidShow_sumscore(){inti,j;for(i=n-1;i>=0;i--){for(j=0;j<i;j++){if(School[j].sumscore<School[i].sumscore){SqListtemp=School[i];School[i]=School[j];School[j]=temp;}}}printf("按学校总分排列:\n\n");Show();}voidShow_boyscore(){inti,j;for(i=n-1;i>=0;i--)for(j=0;j<i;j++)if(School[j].boyscore<School[i].boyscore){SqListtemp=School[i];School[i]=School[j];School[j]=temp;}printf("按男子总分排列:\n\n");Show();}voidShow_girlscore(){inti,j;for(i=n-1;i>=0;i--)for(j=0;j<i;j++)if(School[j].girlscore<School[i].girlscore){SqListtemp=School[i];School[i]=School[j];School[j]=temp;}printf("按女子总分排列:\n\n");Show();}voidShow_num(){inti,j;for(i=n-1;i>=0;i--)for(j=0;j<i;j++)if(School[j].num>School[i].num){SqListtemp=School[i];School[i]=School[j];School[j]=temp;}printf("按学校编号排列:\n\n");Show();}voidMenu()//菜单函数{intchoose;while(1){printf(" \n\n");printf("*****************************************************************\n");printf(" \n");printf(" \n");printf(" \n");printf(" \n");printf(" 、按学校编号查询学校某个项目的情\n");printf(" 、按项目编号查询取得前三名或前五名的学printf(" 、退\n");printf("*****************************************************************\n");printf("\n\n -------------选择编号 \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;}}intmain(){ inti=0;for(i=0;i<80;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("\n\n");10女子400 米for(i=0;i<80;i++)printf("*");printf("\n");printf("编号参与运动会的学校\n");printf("1东华大学\n");printf("2上海交大\n");printf("3复旦大学\n");printf("4同济大学\n");printf("5华东师范大学\n\n");for(i=0;i<80;i++)printf("*");printf("\n");Init();Scanf();Menu();return}调试分析:1,在编译过程中使用了结构体来存储航班和客户的相关信息,注意种操作,有效地解决了数据的建立和修改;2,在编程时建立了文件,将自己输入的文件和系统内部存入文档,有效地实现了大容量数据的操作;3,运用菜单功能,是程序和实际生活中的情况更加接近,有利于程序的广泛利用;4,在编程中学习到了编程的很多好的习惯,养成了添加注释的习惯。printf.运行结果:1、初始用户界面2、用户首先输入在各个项目中各个学校获得的名次,系统自动统计后,得到如下的DPS界面:其中项目1-5取前五名,6-10取前三名*;.3、输入选择编号输入选择编号1,按学校编号排序输出:*;.输入选择编号2,按学校总分排序输出:*;17327,

55,00. . ::

:绩2 3绩绩绩绩绩绩绩绩绩成成成成成成成成成成

_.为分为分总分分总总1234567891目顷男目顷男启蹋项顷项顷顷顷顷 女学启蹋527522032:

315310020:。:;

绩2782

; ,::

; 绩31251绩绩绩绩绩绩绩绩绩成

-

绩绩馈馈绩馈馈绩绩成::;为为分分子了为为分分子了校总总第2个学校:

成成成成成成成成成 为为为01于子校总总总第501于子校总总总第5个学校:123斗567891

123456789力分总力分总项项项项顷项项项项项男女学

目目目目目目目目目目项顷顷顷项顷顷项顷顷男女学成绩:了成绩成绩1成绩3成绩:了成绩成绩1成绩3成绩3成绩2成绩5成绩:3成错:2

530

3.男子总分为:21女子总分为15坚岭总分为:36.::绩.男子总分为:21女子总分为15坚岭总分为:36绩馈绩绩馈绩绩绩馈成:::第斗个学校:成成成成成成成成成 为为为第斗个学校:1212345678911个学校:子子校总总总执目子子校总总总执目1负目员目负目斗员目5员目6贡目7贞目8贞目9员目10.3,按男团总分排序输出:另子总分排列:*;顷项项项项项项顷.3,按男团总分排序输出:另子总分排列:*;

男女学项项320500:5320500:177.纤213为分总第3个学校:; .......n000绩绩绩绩绩馈绩绩绩成::成成成成成成177.纤213为分总第3个学校:分分总总'总总,123 斗567891子子校目目目目目目目目目目,。男女学项项项项项项项项项项。7313323;310020:.7 5 27313323;310020:.

:::

: 3 5,315绩156,315

::: ::t绩氧馈绩绩绩赞绩绩成213t

绩绩绩绩饿馈饿绩绩i::成成成成成成成成成:校学

::。0斗5678。0斗567891分分分子子校总总总123第5个学校:

成成成成成成成成成成为为为斗个,123 56789斗

子子蛉2 目目目目目目目目目目

目目目目目目目目目目。男女学。第 顷项项项项项项项项项男女学252155305:3252155305:

项项项项项项项项项项-51613-

: :;:;,,

27 82527522032-绩绩绩绩绩绩绩绩绩成527522032-成究成成成成成成成

:.为为为

绩绩绩绩绩绩绩绩绩成为为为为总总分分子子:

:;:分分分总总总子子校123456789分分分总总总子子校1234567891笫4个学校为分总.4,按女子团体总分输出:第为分总.4,按女子团体总分输出:第1个学校:*;顶顶项男女学

目目目目目目目目目目项项顷项项顷项项顷顷男女学..选择编号5,按学校编号查询某个项目的情况:青编入盂要查询的学校编号;2青渝入盂要查询的项目编号2个学校 项目2 积分为:5选择编号6,按项目编号查询前三名或前五名的学校:肖瑜人需要查奇的项目编号:2顷目2 前五名:1个学校第2个学校3个学校第4个学校5个学校选择编号7,退出系统:』;rossan9一::;一::一二圣编号------------』*;课题三 迷宫问题求解问题描述:出口。重复对老鼠进行上述实验,看老鼠能在多久找到出口。请设计一个算法实现迷宫问题求解。需求分析:要求设计程序输出如下:m×n(成,并在屏幕上显示出来;(i,j数据序列(i,j表示通路上某一点的坐标。在屏幕上输出迷宫和通路;源代码:#include<stdio.h>#include<stdlib.h>#defineM100#defineN100structmark//定义迷宫内点的坐标类型{intx;inty;};structElement//链栈元素{intx,y;//x行,y列intd;//d下一步的方向};typedefstructLStack//链栈{Elementelem;structLStack*next;..}*PLStack;/*************栈函数****************/intInitStack(PLStack&S)//构造空栈{S=NULL;return1;}intStackEmpty(PLStackS)//判断栈是否为空{if(S==NULL)return1;elsereturn0;}intPush(PLStack&S,Elemente)//压入新数据元素{PLStackp;p=(PLStack)malloc(sizeof(LStack));p->elem=e;p->next=S;S=p;return1;}intPop(PLStack&S,Element&e)//栈顶元素出栈{PLStackp;if(!StackEmpty(S)){e=S->elem;p=S;S=S->next;free(p);return1;}elsereturn}/***************求迷宫路径函数***********************/voidMazePath(structmarkstart,structmarkend,intmaze[M][N],intdiradd[4][2]){inti,j,d;inta,b;Elementelem,e;PLStackS1,S2;InitStack(S1);InitStack(S2);maze[start.x][start.y]=2;//入口点作上标记elem.x=start.x;elem.y=start.y;elem.d=-1;//开始为-1Push(S1,elem);while(!StackEmpty(S1))//栈不为空有路径可走{Pop(S1,elem);i=elem.x;j=elem.y;d=elem.d+1;//下一个方向while(d<4)//试探东南西北各个方向{a=i+diradd[d][0];b=j+diradd[d][1];if(a==end.x&&b==end.y&&maze[a][b]==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(上)88byeby)则为走出迷宫\n\n通路为:(行坐标,列坐标,方向)\n");while(S1)//逆置序列并输出迷宫路径序列{Pop(S1,e);Push(S2,e);}while(S2){Pop(S2,e);printf("\n走出迷宫下一步路径为:\n");printf("-->(%d,%d)",e.x,e.y);if(e.d==0)printf("右移");elseif(e.d==1)printf("下移");elseif(e.d==2)printf("左移");elseif(e.d==3)printf("上移");elseif(e.d==88)printf("到达目的地,走出迷宫\n");}return;//跳出两层循环,本来用break,但发现出错,exit又会结束程序,选用return还是不错滴}if(maze[a][b]==0)//找到可以前进的非出口的点{maze[a][b]=2;elem.x=i;elem.y=j;elem.d=d;Push(S1,elem);//当前位置入栈i=a;//下一点转化为当前点j=b;d=-1;}d++;}}printf("没有找到可以走出此迷宫的路径\n");}/*************建立迷宫*******************/voidinitmaze(intmaze[M][N],intm,intn)/*手动建立函数*/{inti,j;//迷宫行,列[/M]printf("\n:\n,0,1\n",m,n);for(i=1;i<=m;i++)for(j=1;j<=n;j++)scanf("%d",&maze[i][j]);printf("你建立的迷宫为(最外圈为墙)...\n");if(maze[1][1]==1||maze[m][n]==1)printf("输入有误");for(i=0;i<=m+1;i++)//加一圈围墙{maze[i][0]=1;maze[i][n+1]=1;}for(j=0;j<=n+1;j++){maze[0][j]=1;maze[m+1][j]=1;}for(i=0;i<=m+1;i++)输出迷宫{for(j=0;j<=n+1;j++)if(maze[i][j]==0)printf(" elseif(maze[i][j]==1)printf("▓");printf("\n");}}voidinitauto(intmaze[M][N],intm,intn)/*自动建立迷宫函数*/{inti,j;for(i=1;i<=m;i++)for(j=1;j<=n;j++)maze[i][j]=rand()%2;maze[1][1]=0;maze[m][n]=0;printf("你建立的迷宫为(最外圈为墙)...\n");for(i=0;i<=m+1;i++)//加一圈围墙{maze[i][0]=1;maze[i][n+1]=1;}for(j=0;j<=n+1;j++){maze[0][j]=1;maze[m+1][j]=1;}for(i=0;i<=m+1;i++)输出迷宫{for(j=0;j<=n+1;j++)if(maze[i][j]==0)printf(" elseif(maze[i][j]==1)printf("▓");printf("\n");}}voidresult_maze(intmaze[M][N],intm,intn,intx,inty){inti,j;maze[x][y]=2;for(i=0;i<=m+1;i++)//加一圈围墙{maze[i][0]=1;maze[i][n+1]=1;}for(j=0;j<=n+1;j++){maze[0][j]=1;maze[m+1][j]=1;}printf("\nfor(i=0;i<=m+1;i++){printf("\n");for(j=0;j<=n+1;j++){if(maze[i][j]==0)printf(" ");elseif(maze[i][j]==1)printf("▓");elseif(maze[i][j]==2)printf("☆");}}printf("\n");}voidexit(){printf("退出系统请按任意键两下,谢谢!\n");}voidmain(){intsto[M][N],i,m,n;structmarkstart,end;//start,end入口和出口的坐

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论