版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.实验报告(数据结构)班级:..课题一 运动会分数统计任务: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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某家具厂质量管控细则
- 2026年武汉市汉南区公务员人员招聘考试参考试题与答案详解
- 2026年江苏省苏州市事业单位人员招聘笔试备考题库与答案详解
- 2026年江西省新余市公务员人员招聘考试参考题库与答案详解
- 2026年聊城市东昌府区公务员人员招聘笔试参考试题与答案详解
- 2026湖北鄂州人才集团招聘派往鄂州市国企工作10人笔试模拟试题及答案解析
- 2026南安市劳务派遣有限公司派驻南安市妇幼保健院招聘1人考试备考题库及答案解析
- 某服装厂生产调度准则
- 2026惠州市中心人民医院公开招聘工作人员(第二次)确认笔试备考试题及答案解析
- 2026年广东省东莞市事业单位人员招聘考试试题与答案详解
- 2026广东河源市龙川县恩波药械有限公司招聘8人考试备考试题及答案解析
- 2026年党支部书记党务工作培训练习题及答案
- 2026年中石化笔试题库(含答案)
- 高中美术必修《中国书法和中国画的密切关系》教学设计
- 2026秋沪科版(五四学制)八年级物理上册全册每课知识点清单
- 2026中银数字服务(南宁)有限公司招聘笔试模拟试题及答案详解
- RoHS 3.0 指令 2024-1020-EU 中文版(完整译文 + 新旧对比 + 2027 年实施时间表)
- 交管12123学法减分题库500题(含标准答案+解析2026全国)
- 高中入团积极分子考试题库
- 思想政治教育方法论考题
- 免疫规划知识普及课件
评论
0/150
提交评论