




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
此文档收集于网络,如有侵权,请联系网站删除数据结构课程设计设计题目 运动会分数统计任务:参加运动会有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 可以按项目编号查询取得前三或前五名的学校。需求分析本程序中,当运行时,由用户自己定义是取前三名还是取前五名,然后进入相应主界面来选择自己所需要的功能,每个学校的参赛获奖项目数可由每个学校的输入不同项目得分情况而决定。对于每个学校总分、排序和查询等功能可以通过选择菜单中不同的编号来实现。概要设计typedef struct people/人员char name20; /人的名字int i; /名次 struct people *next;people;typedef struct program/项目int i; /项目编号char name20; /项目名称 people *L; /该项目的人员链表头指针program;typedef struct school/学校 int i; /学校编号char name20; /学校名称program proPro; /学校的各个项目int man_sum; /该学校男子总分int women_sum; /该学校女子总分school;void init_school(school *p) /初始化所有学校void input_in1(school *p) /输入各个项目的前三名的成绩void input_in2(school *p) / 输入各个项目前五名的成绩void sum(school *p) /计算各学校总分=男子总分+女子总分void Search_out3(school *p) /排序输出int Search_out4(school p) /按学校编号查询学校某个项目的情况int pro_sum(people *L,int style)/计算各链表中获奖人员的总分 void Search_out5(school p,int style) /按项目编号查询取得前style名的学校程序调用关系如下: 主程序模块 运用链表初始化 运用链表输入模块 链表排序输出模块 查询模块详细设计#includestdafx.h#includestring.h#includestdlib.hchar a520=东华大学,上海交大,复旦大学,同济大学,华东师范大学;char b1020=男子米,男子米,男子米,男子跳高,男子跳远,女子跳高,女子跳远,女子铅球,女子米,女子米;int c13=5,3,2; /取前三名次得分int c25=7,5,3,2,1;/取前五名得分typedef struct people/参赛人员char name20; /人的名字int i; /名次 struct people *next;/结构指针people;typedef struct program/项目int i; /项目编号char name20; /项目名称 people *L; /该项目的人员链表头指针program;typedef struct school/学校 int i; /学校编号char name20; /学校名称program pro10; /学校的各个项目int man_sum; /该学校男子总分int women_sum; /该学校女子总分school;void init_school(school *p) /初始化所有学校 int n,m;for(n=0;n5;n+)/建立循环,Sch个学校 pn.i=n+1; /初始化学校编号strcpy(,an); /初始化学校名字for(m=0;mnext=NULL;pn.women_sum=pn.man_sum=0; /初始化学校的男女总分void input_in1(school *p) /输入各个项目的前三名的成绩int n,d,m,j;char f20;people *q,*s; while(1)printf(请输入你要输入的项目编号:); /选择要输入的项目编号scanf(%d,&n); for(j=0;j3;j+) /为输入前三名的信息而建的循环 printf(请输入项目%d.%s的第%d名的学校编码:,n,bn-1,j+1); scanf(%d,&d); printf(及获奖人的名字:); scanf(%s,&f);/把编号和获奖人的名字分别赋给d和f for(m=0;m=5)printf(输入的学校编码有误!n请重新输入!n);j-; else /在该校的该项目的链表中中插入数据 q=n-1.L;/q等于链表的表头指针 while(q-next) /依次下去该链表,知道到链表尾 q=q-next; if(!(s=(people *)malloc(sizeof(people)exit(0);/申请s结点 strcpy(s-name,f);/把获奖人的名字赋给s结点处 s-i=j+1;/s节点处的编号 s-next=q-next;/修改指针来实现插入 q-next=s; if(n5)/依次把此次循环男子获得的分数加到该校男子项 pm.man_sum+=c1j; elsepm.women_sum+=c1j;/依次把此次循环女子获得的分数加到该校女子项 printf( 是否继续输入项目数据.(y/n); /判定是否跳出 getchar();/输入 if(getchar()=n)break;/当为no时跳出循环 getchar(); printf(按任意键(除去)回到主菜单.或按退出程序.);if(getchar()=6)exit(0);system(cls);/清屏void input_in2(school *p) /输入各个项目的前五名的成绩int n,d,m,j;char f20;people *q,*s; while(1)printf(请输入你要输入的项目编号:); /选择要输入的项目编号scanf(%d,&n); for(j=0;j5;j+) printf(请输入项目%d.%s的第%d名的学校编码:,n,bn-1,j+1); scanf(%d,&d); printf(及获奖人的名字:); scanf(%s,&f); for(m=0;m=5)printf(输入的学校编码有误!n请重新输入!n);j-; else /在该校的该项目的链表中中插入数据 q=n-1.L; while(q-next) q=q-next; if(!(s=(people *)malloc(sizeof(people)exit(0); strcpy(s-name,f); s-i=j+1; s-next=q-next; q-next=s; if(n5)pm.man_sum+=c2j; elsepm.women_sum+=c2j; printf( 是否继续输入项目数据.(y/n); /判定是否跳出 getchar(); if(getchar()=n)break; getchar(); printf(按任意键(除去)回到主菜单.或按退出程序.);if(getchar()=6)exit(0);system(cls);void sum(school *p) /计算各学校总分=男子总分+女子总分int m;printf(各学校总分:n);for(m=0;m5;m+)printf(%d.%s: %dn,pm.i,,pm.man_sum+pm.women_sum);/第m+1个学校的名字和总分printf( 男子总分:%d 女子总分:%dn,pm.man_sum,pm.women_sum); getchar(); printf(按任意键(除去)回到主菜单.或按退出程序.);if(getchar()=6)exit(0);system(cls);void Search_out3(school *p) /按学校编号、学校总分、男女团体总分分别排序输出int n,e,j=0,d5;printf(按学校编号排序:n);for(n=0;n5;n+)printf(%d%s%d n ,+j,,pn.man_sum+pn.women_sum);printf(n);printf(按学校总分排序:n);for(n=0;n5;n+)/找出各学校总分的顺序储存在数组dSch中e=0;for(j=0;j5;j+)if(pn.man_sum+pn.women_sum)(pj.man_sum+pj.women_sum)e+;/找到第n+1各学校总分小于几个学校dn=e;/标记哪个学校分数小于几个for(n=0;n5;n+)/根据数组dSch中的值确定输出顺序for(j=0;j5;j+)if(dj=n)printf(%s%dn,,pj.man_sum+pj.women_sum);/根据上面小于几个数来输出信息,小于数越小越先输出printf(n);printf(按学校男子总分排序:n);for(n=0;n5;n+)/找出各学校男子总分的顺序储存在数组dSch中e=0;for(j=0;j5;j+)if(pn.man_sumpj.man_sum)e+;dn=e;for(n=0;n5;n+)for(j=0;j5;j+)/根据数组dSCH中的值确定输出顺序if(dj=n)printf(%s%dn,,pj.man_sum);printf(n);printf(按学校女子总分排序:n);for(n=0;n5;n+)/找出各学校女子总分的顺序储存在数组dSch中e=0;for(j=0;j5;j+)if(pn.women_sumpj.women_sum)e+;dn=e;for(n=0;n5;n+)for(j=0;j5;j+)if(dj=n)printf(%s%dn,,pj.women_sum);printf(n);getchar();printf(按任意键(除去)回到主菜单.或按退出程序.);if(getchar()=6)exit(0);system(cls);int Search_out4(school p) /按学校编号查询学校某个项目的情况int d,e;people *q;printf(请输入学校编号和项目编号:); scanf(%d %d,&d,&e);if(d5)printf(输入的学校编码有误!n);getchar();printf(按任意键(除去)回到主菜单.或按退出程序.);system(cls);return 0;if(e10)printf(输入的项目编码有误!n);getchar();printf(按任意键(除去)回到主菜单.或按退出程序.);system(cls);return 0;printf(%s%s:n,,);if(q=e-1.L-next)=NULL)printf(在该项目无获奖n);else while(q-next) /找出该学校在该项目所有的获奖人员,并输出 printf( %9s 第%d名n,q-name,q-i); q=q-next; printf( %9s 第%d名n,q-name,q-i); getchar();printf(按任意键(除去)回到主菜单.或按退出程序.);if(getchar()=6)exit(0);system(cls);return 1;int pro_sum(people *L,int style) /计算各链表中所有获奖人员的总分int sum=0;people *p;if(p=L-next)=NULL)return sum;while(1) if(style=3)sum+=c1p-i; if(p=p-next)=NULL)return sum; else if(style=5) sum+=c1p-i;if(p=p-next)=NULL)return sum;void Search_out5(school p,int style) /按项目编号查询取得前style名的学校int e,n,j,m,d5; printf(请输入项目编号:);scanf(%d,&m);for(n=0;n5;n+)/找出各学校在该项目名次顺序储存在数组dSch中e=0;for(j=0;j5;j+) if(pro_sum(m-1.L,style)pro_sum(m-1.L,style)e+;dn=e;m=0;for(n=0;n3;n+) for(j=0;j=3)break;if(m=3)break;printf(n);getchar();printf(按任意键(除去)回到主菜单.或按退出程序.);if(getchar()=6)exit(0);system(cls);void main() int d,style,t=1;school a5; init_school(a); printf(t 运动会分数统计 n); printf(请输入比赛是取前几名:);scanf(%d,&style);if(style!=3)style=5;system(cls);while(t)printf(n);printf(t 菜单 n);printf(t 1. 输入各个项目的前%d名信息 n,style);printf(t 2. 统计各学校总分 n);printf(t 3. 按学校编号、学校总分、男女团体总分排序输出n);printf(t 4. 按学校编号查询学校某个项目的情况 n);printf(t 5. 按项目编号查询取得前%d的学校 n,style);printf(t 6. 退出 n);printf(tn);printf(t请输入所要操作的编号:);scanf(%d,&d); if(style=3)switch(d)case 1: input_in1(a);break;case 2: sum(a);break;case 3: Search_out3(a);break;case 4: Search_out4(a);break;case 5: Search_out5(a,3);break;case 6: t=0;break;default:printf(代码错误!);exit(0);else switch(d)case 1: input_in2(a);break;case 2: sum(a);break;case 3: Search_out3(a);break;case 4: Search_out4(a);break;case 5: Search_out5(a,5);break;case 6: t=0;break;default:printf(代码错误!);exit(0); 调试分析1、本题中的难点是建立学校和项目表以及之间的相互访问等较为复杂也容易出错,后经仔细的分析及改善得到成功。2、 本题中的排序,本是用经典比较法来实现,但中间出现了逻辑上的错误后改进为用了把一个数据与其他数据进行比较,如小于几个数,然后输出时小于的数越小越先输出。3、 在某个学校的某个项目的排名中运用到了链表指针修改的问题,在运行过程出现了差错,主要是插入位置等的错误。用户手册(1) 演示程序的运行环境为Windows 8系统,Microsoft Visual C+ 2005 Express Edition中运行。执行文件为:运动会.exe(2) 进入演示程序后即显示DOS形式的界面: (3) 、根据选择比赛是取前几名可以进入相应的界面(4)、进入相应界面接受其他命令后即执行相应功能。测试结果输入取前三名得到下面界面输入取前五名得到下面界面操作编号:1操作编号:2操作编号:3操作编号:4操作编号:5操作编号:6设计题目迷宫问题求解任务迷宫问题是取自心理学的一个古典实验。实验中,把一只老鼠从一个没有顶的大盒子的门放入,在盒中设置了许多墙,对行进的方向形成了多处阻挡。盒子仅仅有一个出口,在出口处放置了一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。重复对老鼠进行上述实验,看老鼠能在多久找到出口。功能要求:请设计一个算法实现迷宫问题求解。测试数据:0表示可以行走的区域,1表示不可行走的区域。入口1000101101011011011001011110出口需求分析 该程序的实现需要用到栈,用栈来储存正确的步骤。首先要建立一个迷宫,用数组来实现。然后通过规定的放向依次探索,一步步找到正确的路径。概要设计typedef struct StackElem int x; int y; int f; StackElem;/定义栈typedef struct StackElem * base; StackElem * top; int StackSize;Stack;/初始化栈void StackInit(Stack *s)/向栈中添加元素void Push(Stack *s,StackElem e)/获得栈顶元素StackElem GetTop(Stack *s)/删除栈顶元素void Pop(Stack *s)/判断当前位置是否走过(下一位置与Path中所有位置从栈顶至栈底依次比较)int unPass(Stack Path,StackElem Step/右边相邻的位置StackElem Right(StackElem Step,int m,int n)(一共8个向函数类似)/获得下一个可通行的位置,逐个方向试探StackElem GetNext(StackElem Step,int m,int n)int GetMazePath(int m,int n)/获得迷宫路径/打印迷宫路径void PrintMazePath(Stack *s)void main()int i,j;printf(*迷宫*n);printf(0 是通路n1 是墙n);printf(请输入行数(=100):);scanf(%d,&m);printf(请输入列数(=100):);scanf(%d,&n);printf(请输入迷宫数据(按行来):n);for(i=0;im;i+)for(j=0;jn;j+)scanf(%d,&mazeij);printf(迷宫:n);for(i=0;im;i+)for(j=0;jbase = (StackElem *)malloc(STACK_INIT_SIZE * sizeof(StackElem); if (!s-base) printf(内存分配失败!n);exit(OVERFLOW);/内存分配失败 s-top = s-base; s-StackSize = STACK_INIT_SIZE;/向栈中添加元素void Push(Stack *s,StackElem e) if (s-top - s-base = s-StackSize) /栈满,增加空间s-base=(StackElem *)realloc(s-base, (STACK_INIT_SIZE+STACKINCREMENT) * sizeof(StackElem);if (!s-base) printf(内存分配失败.n );exit(OVERFLOW);/内存分配失败s-top=s-base+s-StackSize;/分配空间后重置栈顶指针s-StackSize += STACKINCREMENT;/空间再分配完成 *(s-top+) = e;/将新元素加到栈顶/获得栈顶元素StackElem GetTop(Stack *s) if (s-top=s-base) printf(没有路径可以走出迷宫!n);exit(ERROR);else return *(s-top - 1);/删除栈顶元素void Pop(Stack *s) /若栈不为空,则删除s的栈顶元素 if (s-top = s-base) printf(没有路径可以走出迷宫!n);exit(ERROR); else -(s-top);/迷宫求解/构造两个栈,Path用来保存探索中的全部路径,RealPath用来保存有效路径Stack RealPath,Path;/判断当前位置是否走过(下一位置与Path中所有位置从栈顶至栈底依次比较)int unPass(Stack Path,StackElem Step) int Mark = 1; while(Path.top!=Path.base)/非空 StackElem e=*(Path.top - 1);/栈顶if (e.x=Step.x& e.y = Step.y)Mark = 0;(Path.top)-; return Mark;/右边相邻的位置StackElem Right(StackElem Step,int m,int n) if(Step.y!=n-1) Step.y+;Step.f=mazeStep.xStep.y; return Step;/ 当y=n-1时返回它本身/下面相邻的位置StackElem Down(StackElem Step,int m,int n) if(Step.xm-1) Step.x+;Step.f=mazeStep.xStep.y;return Step;/ 当x=m-1时返回它本身/左边相邻的位置StackElem Left(StackElem Step,int m,int n) if(Step.y!=0) Step.y-;Step.f = mazeStep.xStep.y;return Step;/ 当y=0时返回它本身/上面相邻的位置StackElem Up(StackElem Step,int m,int n) if(Step.x!=0) Step.x-; Step.f=mazeStep.xStep.y;return Step;/ 当Step.x=0时返回它本身/左上相邻的位置StackElem LU(StackElem Step,int m,int n) if(Step.x!=0&Step.y!=0) Step.x-;Step.y-;Step.f=mazeStep.xStep.y;return Step;/ 当x=0&y=0时返回它本身/右上相邻的位置StackElem RU(StackElem Step,int m,int n) if(Step.x!=0&Step.yn-1) Step.x-;Step.y+;Step.f=mazeStep.x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 蒸吸工岗位现场作业技术规程
- 公司纸盒制作工岗位合规化技术规程
- 2025湖北天门市顺达劳务有限公司招聘劳务派遣制药剂科调剂药师1人考前自测高频考点模拟试题及答案详解(名校卷)
- 2025年福建泉州市华侨大学分析测试中心招聘实验技术系列人员(4月)模拟试卷及答案详解(新)
- 公司涂料生产工工艺技术规程
- 电极丝制造工供应商评价配合考核试卷及答案
- 镀层工设备操作合规性考核试卷及答案
- 药芯焊丝成型工安全隐患排查考核试卷及答案
- 灯具装配工物料基本识别考核试卷及答案
- 飞机雷达安装调试工职业健康、安全、环保技术规程
- 冬季四防培训课件
- 新生儿喉罩应用技术规范
- 建筑公司研发管理制度
- Python编程基础(第3版)(微课版)-教学大纲
- 第三节集装箱吊具一集装箱简易吊具二集装箱专用吊具课件
- 她力量自有光课件-高二下学期三八妇女节主题班会
- 2025年高级人工智能训练师(三级)理论考试题库-含答案
- 突发事件应急指挥与领导能力培养
- 2025年乡村干部个人工作总结模版(二篇)
- 《矿井机电》课件:深入了解矿业领域的机电技术
- 管理百年知到智慧树章节测试课后答案2024年秋南昌大学
评论
0/150
提交评论