运动会分数统计系统 数据结构课程设计
![运动会分数统计系统 数据结构课程设计_第1页](https://file5.zhuangpeitu.com/fileroot5/2022-8/10/7db4f566-de50-49b8-ab73-70864aa25127/7db4f566-de50-49b8-ab73-70864aa251271.gif)
![运动会分数统计系统 数据结构课程设计_第2页](/images/s.gif)
![运动会分数统计系统 数据结构课程设计_第3页](/images/s.gif)
《运动会分数统计系统 数据结构课程设计》由会员分享,可在线阅读,更多相关《运动会分数统计系统 数据结构课程设计(19页珍藏版)》请在装配图网上搜索。
1、精品文档,仅供学习与交流,如有侵权请联系网站删除 石家庄经济学院 华信学院 课程设计报告 学 院: 专 业: 班 级: 学 号: 姓 名: 运动会分数统计系统的设计与实现 一.问题描述 大学作为一个提供学生全面发展的高等教育机构,不仅要培养学生的学习能力,而且更要注重学生的德智体美全面
2、发展。在大学中有很多丰富多彩的比赛和活动,例如运动会,演讲比赛,歌唱比赛,书法比赛等,在比赛和竞争中,我们的这些素质和能力更容易得到培养提升。但是比赛最后的分数统计和查询往往是举办者头疼的事情,分数的统计和查询需要快速准确,因此我们设计了这个运动会分数统计系统,以方便分数的统计查询。 参加运动会的n个学校编号为1~n。比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。写一个统计程序产生各种成绩单和得分报表。 二.需求分析 系统功能描述
3、:
(1)可以输入各个项目的前三名或前五名的成绩;
(2)能统计各学校总分;
(3)可以按学校编号或名称、学校总分、男女团体总分排序输出;
(4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
三.概要设计
3.1链表结构的ADT的定义
ADT List{
数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n≥0}
数据关系:R1={
4、 GetElem(L,i,&e) 初始条件:线性表L已存在,1≦i≦ListLength(L) 操作结果:用e返回L中第i个数据元素的值。 LocateElem(L,e,compare()) 初始条件:线性表L已存在,compare()是数据元素判定函数。 操作结果:返回L中第1个与e满足关系compare()的数据元素的位序。若这样的数据元素不存在,则返回值为0。 PriorElem(L,cur_e,&pre_e) 初始条件:线性表L
5、已存在。 操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败,pre_e无定义。 NextElem(L,cur_e,&next_e) 初始条件:线性表L已存在。 操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,否则操作失败,next_e无定义。 ListInsert(&L,I,e) 初始条件:线性表L已存在,1≦i≦ListLength(L)+1 操作结果:在L中第i个位
6、置之前插入新的元素e,L是表长度加1 ListTraverse(L,visit()) 初始条件:线性表L已存在。 操作结果:依次对L的每个数据元素调用函数visit()。一旦visit()失败,则操作失败。 }ADT List 3.2系统功能模块设计 运动会分数统计系统 输入各学校名称 输入男子运动项目 输入女子运动项目 输入男子项目的成绩 输入女子项目的成绩 查询某校各个项目的成绩 查询某校各个项目的成绩 图 3-1运动会分数统计系统功能模块图 main()
7、 womansports(LinkList &L,int n) 循环语句依次输入每个值 ListTraverse(L,visit()) schoolname(LinkList &L,int n) mansports(LinkList &L,int n) 循环语句依次输入每个值 ListTraverse(L,visit()) ListTraverse(L,visit()) ListTraverse(L,visit()) 3.3主要函数调用关系图 图 3-2系统函数调用关系图 3.4主界面设计 为了实现运动
8、会分数统计系统,需要设计一个含有多菜单项的主控菜单子程序,以链接系统中各个子项目的调用,为了方便用户使用本系统,本系统主控菜单的运行界面如图3-3所示。 图 3-3主菜单运行界面 四.详细设计 实现运动会分数统计系统的开发,采用链表结构类型存储运动会学校名称、男子女子运动项目以及男子女子项目成绩的信息。 4.1数据类型定义 //每一个学校的信息 typedef struct Lnode//结点 char data[20]; //学校名称 int da,d1,d2; //学校编号、学校总分、男女团体分 struct Lnode *next
9、; //指向下一学校 } Lnode,*LinkList; int sz[20]; //每一个项目的信息 存取 typedef struct Lnode1 char data[20],data1[20],data2[20],data3[20],data4[20],data5[20]; //该项目前五名学校的名称 int da1,da2,da3,da4,da5; //该项目前五名学校的编号 struct Lnode1 *next; //指向下一项目 } Lnode1,*LinkList1; 4.2 系统子程序详细设计 输入各学校名称的算法: //按从头到尾的顺序依次建立
10、线性链表L1共有n个节点 void schoolname(LinkList &L1,int n) int i; LinkList p,q; //输入头结点信息,即输入第一个学校的名字 L1=(LinkList)malloc(sizeof(Lnode));// malloc是动态开辟内存,函数返回为void型指针(指向开辟的内存空间);(LinkList)定义的指针的类型;(sizeof(Lnode)malloc开辟的内存空间的大小 printf("请输入这%d 个学校的名字:\n",n); p=(LinkList)malloc(sizeof(Lnode));//指向一个有意义的地
11、方 L1->next=p;//把p的值赋给next next指向实际的空间 p时指针 scanf("%s",&p->data);//修改空间的值,&取p的数据域的地址 //从第二个节点开始依次输入到第n个节点信息 for(i=2;i<=n;i++) //p是第一个,所以i=2从2开始 先指出第一个,然后第一个在指出剩下的 q=p; //q指向p开辟的空间 即 q指向p指向的地方 p=(LinkList)malloc(sizeof(Lnode));//给新开辟的空间赋值 开始 输入n个学校的名字 i=0 i>n 将第i个结点加入链表L 结束 N Y scanf
12、("%s",&p->data); q->next=p; 输入男子运动项目名字的算法: //按从头到尾的顺序依次建立线性链表L2共有n2个节点 void mansports(LinkList1 &L2,int n2) //输入第一个节点的信息,即第一个男子项目的名字 int i; LinkList1 r,s; L2=(LinkList1)malloc(sizeof(Lnode1)); printf("请输入这%d 个项目的名字:\n",n2); r=(LinkList1)malloc(sizeof(Lnode1)); //把新开辟的空间data1-5初始化 for(
13、int t=0;t<20;t++) r->data1[t] = '\0'; for( t=0;t<20;t++) r->data2[t] = '\0'; for( t=0;t<20;t++) r->data3[t] = '\0'; for( t=0;t<20;t++) r->data4[t] = '\0'; for( t=0;t<20;t++) r->data5[t] = '\0'; L2->next=r; scanf("%s",&r->data); //从第二个节点开始输入到第n2个节点的信息 for(i=2;i<=n2;i++) s=r; //s指向r指向的
14、地方 r=(LinkList1)malloc(sizeof(Lnode1)); for(int t=0;t<20;t++) r->data1[t] = '\0'; for( t=0;t<20;t++) r->data2[t] = '\0'; for( t=0;t<20;t++) r->data3[t] = '\0'; for( t=0;t<20;t++) r->data4[t] = '\0'; for( t=0;t<20;t++) r->data5[t] = '\0'; scanf("%s",&r->data); s->next=r; 开始 输入n个男子项目的名字
15、 i=0 i>n 将第i个结点加入链表L 结束 N Y 输入女子运动项目名字的算法: //按从头到尾的顺序依次建立线性链表L3共有n1个节点 void womansports(LinkList1 &L3,int n1) //输入第一个节点的信息,即第一个女子项目的名字 int i; LinkList1 r,s; L3=(LinkList1)malloc(sizeof(Lnode1)); printf("请输入这%d 个项目的名字:\n",n1); r=(LinkList1)malloc(sizeof(Lnode1)); L3->next=r; sca
16、nf("%s",&r->data); //从第二个节点开始依次输入到第n1个节点信息 for(i=2;i<=n1;i++) s=r; r=(LinkList1)malloc(sizeof(Lnode1)); scanf("%s",&r->data); s->next=r; 开始 输入n个女子项目的名字 i=0 i>n 将第i个结点加入链表L 结束 N Y } 参加比赛的学校的总分排名的算法: void schoolrankings(LinkList &L1,int n) LinkList p; 学校的数据类型 上边 int z,i,j,y; pr
17、intf("参加这次比赛的学校的总分排名:\n"); p=L1->next; //下一个地方的指针给p p是学校的数据类型 p是一个节点,L1下一个节点给p //先把每个学校的总分依次遍历,存放在数组sz中。 一个一个取,一个一个找先让p指向一个链表 for(i=0;i<=n-1;i++) sz[i]=p->da; //节点的信息指向一个数组,data学校总数的数据域, 把所有的学校的总分 p=p->next; //再对数组sz用冒泡排序法进行从小到大排序 for(i=1;i<=n-1;i++) for(j=1;j<=n-i;j++) if(sz[j-1]>sz
18、[j]) y=sz[j-1]; sz[j-1]=sz[j]; sz[j]=y; z=1; //初始化 //把线性链表L1按项目总分从大到小的顺序排列,并打印名次 for(i=n-1;i>=0;i--) p=L1->next; // L1表示一个节点,取出里面一个数据,那个数据的名字是next,next也是一个节点,p也是一个节点, if(i>0) // 意义是判断下一个是不是 //如果值相等则链表指针直接指向下一个,不用交换位置 while(sz[i]==sz[i-1]) 相邻的两个数组素不素相等 i--; //从大到小,从最后一个比较 //在链表L1
19、中找到与sz[i] 相等的节点的位置,并打印出名次信息 for(j=1;j<=n;j++) if(sz[i]==p->da) //数组里面的值从最后一个开始取 printf("第%d 名%s :%d 分\n",z,p->data,p->da); z++; p=p->next; 开始 结束 i=0 i++ i>n Y N 将每个学校的总分赋给数组sz[n] 对数组sz[n]进行冒泡排序 遍历链表L找到与sz[i]相等的结点并输出总分 参加这次比赛的学校的男子项目的成绩排名的算法: //男子项目排名算法代码与上述学校总分的排名算法完全一致,其
20、中男子项目排序的过程为比较男子项目总分 void manrankings(LinkList &L1,int n) LinkList p; int z,i,j,y; printf("参加这次比赛的学校的男子项目的成绩排名:\n"); p=L1->next; //先把每个学校的男子项目总分依次遍历,存放在数组sz中。 for(i=0;i<=n-1;i++) z[i]=p->d1; p=p->next; //再对数组sz用冒泡排序法进行从小到大排序 for(i=1;i<=n-1;i++) for(j=1;j<=n-i;j++) if(sz[j-1]>sz[j]) y=s
21、z[j-1]; sz[j-1]=sz[j]; sz[j]=y; z=1; //把线性链表L1按男子项目总分从大到小的顺序排列,并打印名次 for(i=n-1;i>=0;i--) p=L1->next; if(i>0) while(sz[i]==sz[i-1]) i--; //在链表L1中找到与sz[i] 相等的节点的位置,并打印出名次信息 for(j=1;j<=n;j++) if(sz[i]==p->d1) printf("第%d 名%s :%d 分\n",z,p->data,p->d1); z++; p=p->next; 开始 结束 i=0 i++
22、i>n Y N 将男子项目的总分赋给数组sz[n] 对数组sz[n]进行冒泡排序 遍历链表L找到与sz[i]相等的结点并输出总分 参加这次比赛的学校的女子项目的成绩排名的算法: //女子项目排名算法代码与上述学校总分的排名算法完全一致,其中女子项目排序的过程为比较女子项目总分 void womanrankings(LinkList &L1,int n) LinkList p; int z,i,j,y; printf("参加这次比赛的学校的女子项目的成绩排名:\n"); p=L1->next; //先把每个学校的女子项目总分依次遍历,存放在数组sz中 for(i=
23、0;i<=n-1;i++) sz[i]=p->d2; p=p->next; //再对数组sz用冒泡排序法进行从小到大排序 for(i=1;i<=n-1;i++) for(j=1;j<=n-i;j++) if(sz[j-1]>sz[j]) y=sz[j-1]; sz[j-1]=sz[j]; sz[j]=y; z=1; //把线性链表L1按女子项目总分从大到小的顺序排列,并打印名次 for(i=n-1;i>=0;i--) p=L1->next; if(i>0) //如果值相等则链表指针直接指向下一个,不用交换位置 while(sz[i]==sz[i-1]) i--
24、; //在链表L1中找到与sz[i] 相等的节点的位置,并打印出名次信息 for(j=1;j<=n;j++) if(sz[i]==p->d2) printf("第%d 名%s :%d 分\n",z,p->data,p->d2); z++; p=p->next; 开始 结束 i=0 i++ i>n Y N 将女子项目的总分赋给数组sz[n] 对数组sz[n]进行冒泡排序 遍历链表L找到与sz[i]相等的结点并输出总分 五.编码实现及系统测试 图 5-1输入基本信息 图 5-2学校及项目排名 图 5-3查询某校各个项目的成绩 图 5-4查询
25、某个项目的比赛结果 图 5-5结束本程序 六.结果分析 表 6-1时间、空间复杂度 操作 时间复杂度 空间复杂度 1 O(n+m) O(1) 2 O(n) O(1) 3 O(m) O(1) 注:m为学校个数,n为项目个数。 七.学习体会 通过这次数据结构课程设计,我收获了很多: 一.经过这几天的学习,进一步提升了C语言的应用能力,巩固了数据结构上课所学习的内容,数据结构知识的应用能力有了一定的提升,并且对C语言和数据结构有了更深层次的认识。 二.这次课程设计我们选的课题是运动会分数统计,涉及到线性链表
26、以及C语言的一些基本的知识。在以前的学习中,对知识只是掌握了大概的内容,基础知识掌握的不牢固,所以编写程序的过程非常的困难,通过这次课程设计,让我知道基础知识非常重要。在进行概要设计的时候要注意结合问题的需求分析,函数调用要和系统功能相结合。在书写程序时,要认真细心,很多错误都是因为自己的粗心,调试程序就花费了非常多的时间。 三.通过这次课程设计,让我明白了独立思考的重要性。一个东西只有经过自己的思考,自己明白了才是真的明白了。在思考的过程中,对一个问题思考的越深入,可以挖掘的东西就越多。在解决问题时要结合多方面的因素,不能只单方面思考问题。 八.源程序清单 #include
27、
28、 //该项目前五名学校的名称 int da1,da2,da3,da4,da5; //该项目前五名学校的编号 struct Lnode1 *next; //指向下一项目 } Lnode1,*LinkList1; 输入各学校名称的算法: //按从头到尾的顺序依次建立线性链表L1共有n个节点 void schoolname(LinkList &L1,int n) int i; LinkList p,q; //输入头结点信息,即输入第一个学校的名字 L1=(LinkList)malloc(sizeof(Lnode)); printf("请输入这%d 个学校的名字:\n",n);
29、 p=(LinkList)malloc(sizeof(Lnode)); L1->next=p; scanf("%s",&p->data); //从第二个节点开始依次输入到第n个节点信息 for(i=2;i<=n;i++) q=p; p=(LinkList)malloc(sizeof(Lnode)); scanf("%s",&p->data); q->next=p; 输入男子运动项目名字的算法: //按从头到尾的顺序依次建立线性链表L2共有n2个节点 void mansports(LinkList1 &L2,int n2) //输入第一个节点的信息,即第一个男子项
30、目的名字 int i; LinkList1 r,s; L2=(LinkList1)malloc(sizeof(Lnode1)); printf("请输入这%d 个项目的名字:\n",n2); r=(LinkList1)malloc(sizeof(Lnode1)); for(int t=0;t<20;t++) r->data1[t] = '\0'; for( t=0;t<20;t++) r->data2[t] = '\0'; for( t=0;t<20;t++) r->data3[t] = '\0'; for( t=0;t<20;t++) r->data4[t] = '
31、\0'; for( t=0;t<20;t++) r->data5[t] = '\0'; L2->next=r; scanf("%s",&r->data); //从第二个节点开始输入到第n2个节点的信息 for(i=2;i<=n2;i++) s=r; r=(LinkList1)malloc(sizeof(Lnode1)); for(int t=0;t<20;t++) r->data1[t] = '\0'; for( t=0;t<20;t++) r->data2[t] = '\0'; for( t=0;t<20;t++) r->data3[t] = '\0'; for
32、( t=0;t<20;t++) r->data4[t] = '\0'; for( t=0;t<20;t++) r->data5[t] = '\0'; scanf("%s",&r->data); s->next=r; 输入女子运动项目名字的算法: //按从头到尾的顺序依次建立线性链表L3共有n1个节点 void womansports(LinkList1 &L3,int n1) //输入第一个节点的信息,即第一个女子项目的名字 int i; LinkList1 r,s; L3=(LinkList1)malloc(sizeof(Lnode1)); printf("请
33、输入这%d 个项目的名字:\n",n1); r=(LinkList1)malloc(sizeof(Lnode1)); L3->next=r; scanf("%s",&r->data); //从第二个节点开始依次输入到第n1个节点信息 for(i=2;i<=n1;i++) s=r; r=(LinkList1)malloc(sizeof(Lnode1)); scanf("%s",&r->data); s->next=r; 参加比赛的学校的总分排名的算法: void schoolrankings(LinkList &L1,int n) LinkList p; int z,i
34、,j,y; printf("参加这次比赛的学校的总分排名:\n"); p=L1->next; //先把每个学校的总分依次遍历,存放在数组sz中。 for(i=0;i<=n-1;i++) sz[i]=p->da; p=p->next; //再对数组sz用冒泡排序法进行从小到大排序 for(i=1;i<=n-1;i++) for(j=1;j<=n-i;j++) if(sz[j-1]>sz[j]) y=sz[j-1]; sz[j-1]=sz[j]; sz[j]=y; z=1; //把线性链表L1按项目总分从大到小的顺序排列,并打印名次 for(i=n-1;i>=0;i
35、--) p=L1->next; if(i>0) //如果值相等则链表指针直接指向下一个,不用交换位置 while(sz[i]==sz[i-1]) i--; //在链表L1中找到与sz[i] 相等的节点的位置,并打印出名次信息 for(j=1;j<=n;j++) if(sz[i]==p->da) printf("第%d 名%s :%d 分\n",z,p->data,p->da); z++; p=p->next; 参加这次比赛的学校的男子项目的成绩排名的算法: //男子项目排名算法代码与上述学校总分的排名算法完全一致,其中男子项目排序的过程为比较男子项目总分 void
36、manrankings(LinkList &L1,int n) LinkList p; int z,i,j,y; printf("参加这次比赛的学校的男子项目的成绩排名:\n"); p=L1->next; //先把每个学校的男子项目总分依次遍历,存放在数组sz中。 for(i=0;i<=n-1;i++) z[i]=p->d1; p=p->next; //再对数组sz用冒泡排序法进行从小到大排序 for(i=1;i<=n-1;i++) for(j=1;j<=n-i;j++) if(sz[j-1]>sz[j]) y=sz[j-1]; sz[j-1]=sz[j]; s
37、z[j]=y; z=1; //把线性链表L1按男子项目总分从大到小的顺序排列,并打印名次 for(i=n-1;i>=0;i--) p=L1->next; if(i>0) while(sz[i]==sz[i-1]) i--; //在链表L1中找到与sz[i] 相等的节点的位置,并打印出名次信息 for(j=1;j<=n;j++) if(sz[i]==p->d1) printf("第%d 名%s :%d 分\n",z,p->data,p->d1); z++; p=p->next; 参加这次比赛的学校的女子项目的成绩排名的算法: //女子项目排名算法代码与上述学校总分
38、的排名算法完全一致,其中女子项目排序的过程为比较女子项目总分 void womanrankings(LinkList &L1,int n) LinkList p; int z,i,j,y; printf("参加这次比赛的学校的女子项目的成绩排名:\n"); p=L1->next; //先把每个学校的女子项目总分依次遍历,存放在数组sz中 for(i=0;i<=n-1;i++) sz[i]=p->d2; p=p->next; //再对数组sz用冒泡排序法进行从小到大排序 for(i=1;i<=n-1;i++) for(j=1;j<=n-i;j++) if(sz[j-1]
39、>sz[j]) y=sz[j-1]; sz[j-1]=sz[j]; sz[j]=y; z=1; //把线性链表L1按女子项目总分从大到小的顺序排列,并打印名次 for(i=n-1;i>=0;i--) p=L1->next; if(i>0) //如果值相等则链表指针直接指向下一个,不用交换位置 while(sz[i]==sz[i-1]) i--; //在链表L1中找到与sz[i] 相等的节点的位置,并打印出名次信息 for(j=1;j<=n;j++) if(sz[i]==p->d2) printf("第%d 名%s :%d 分\n",z,p->data,p->d2)
40、; z++; p=p->next; void main () int i,j,z,x,n,m,w; //声明学校链表 LinkList p,q,L1; //p,q没有实际意义,L1是有实际意义,是储存学校信息 //声明项目链表 LinkList1 r,s,L2,L3; // 同上 男子男子链表,女子想么链表 do printf("*************************************\n"); printf("****1 输入基本信息 ****\n"); printf("****2 查询某校各个项目
41、的成绩 ****\n"); printf("****3 查询某个项目的比赛结果 ****\n"); printf("****4 结束本程序 ****\n"); printf("*************************************\n"); printf("请选择您想进行的操作\n"); //输入1,或2或3 选择功能 scanf("%d",&z); //z=2查询某校各个项目的成绩 if(z==2) r=L2->next; printf("请输入您想查寻的学校的名字:\n"); //输入待查询学校的名称
42、s = (LinkList1)malloc(sizeof(Lnode1));//存储学校的名字 scanf("%s",&s->data);//输出查询结果 //输出查询信息 for(i=1;i<=m;i++) // m为男子项目个数 字符串比较里面的是否相等,相等=0,不相等不=0 第一名的成绩 第一名学校 if(strcmp(r->data1,s->data)==0) printf("贵校荣获男子项目%s 的第1名,他该项目的成绩是:%d\n",r->data,r->da1); if(strcmp(r->data2,s->data)==0) printf(
43、"贵校荣获男子项目%s 的第2名,他该项目的成绩是:%d\n",r->data,r->da2); if(strcmp(r->data3,s->data)==0) printf("贵校荣获男子项目%s 的第3名,他该项目的成绩是:%d\n",r->data,r->da3); if(strcmp(r->data4,s->data)==0) printf("贵校荣获男子项目%s 的第4名,他该项目的成绩是:%d\n",r->data,r->da4); if(strcmp(r->data5,s->data)==0) printf("贵校荣获男子项目%s 的第5名,他该项目的成绩是:%d\n",r
44、->data,r->da5); r=r->next; //男子项目的链表 r=L3->next; for(i=1;i<=w;i++) if(strcmp(r->data1,s->data)==0) printf("贵校荣获女子项目%s 的第1名,她该项目的成绩是:%d\n",r->data,r->da1); if(strcmp(r->data2,s->data)==0) printf("贵校荣获女子项目%s 的第2名,她该项目的成绩是:%d\n",r->data,r->da2); if(strcmp(r->data3,s->data)==0) printf("贵校荣获女子
45、项目%s 的第3名,她该项目的成绩是:%d\n",r->data,r->da3); if(strcmp(r->data4,s->data)==0) printf("贵校荣获女子项目%s 的第4名,她该项目的成绩是:%d\n",r->data,r->da4); if(strcmp(r->data5,s->data)==0) printf("贵校荣获女子项目%s 的第5名,她该项目的成绩是:%d\n",r->data,r->da5); r=r->next; //查询学校结束 //z=3查询某个项目的比赛结果 if(z==3) printf("请输入您想查寻的项目的名字:\n");
46、//输入待查询的项目名称 s = (LinkList1)malloc(sizeof(Lnode1)); scanf("%s",&s->data); //存data里 r=L2->next; for(i=1;i<=m;i++) if(strcmp(r->data,s->data)==0) if(strlen(r->data4)==0) printf("第1名%s ,第2名%s,第3名%s\n",r->data1,r->data2,r->data3); if(strlen(r->data4)>0) printf("第1名%s ,第2名%s,第3名%s,第4名%s,第5名%s\n"
47、,r->data1,r->data2,r->data3,r->data4,r->data5); r=r->next; r=L3->next; //打印项目比赛结果 for(i=1;i<=w;i++) if(strcmp(r->data,s->data)==0) if(strlen(r->data4)==0) printf("第1名%s ,第2名%s,第3名%s\n",r->data1,r->data2,r->data3); //字长 没有输入第四名 strlen(r->data4)==0 if(strlen(r->data4)>0) printf(
48、"第1名%s ,第2名%s,第3名%s,第4名%s,第5名%s\n",r->data1,r->data2,r->data3,r->data4,r->data5); r=r->next; if(z==1) //输入部分 //输入学校的个数n printf("请输入参加这次比赛的学校的个数:\n"); scanf("%d",&n); //构建链表L1,依次输入n个学校的名称。 schoolname(L1,n); q=L1->next; //把L1链表中的总分da全部初始化为0 for(i=1;i<=n;i++) q->da=0; //初始化 q->d1=0;
49、 q->d2=0; q=q->next; //输入男子个项目总数m printf("\n请输入这次比赛的男子项目的个数:\n"); scanf("%d",&m); //构建男子项目链表L2输入m个男子运动项目名字 mansports(L2,m); r=L2->next; //依次m个男子项目的结果 for(i=1;i<=m;i++) printf("如果此次%s 比赛只取前3名的成绩请输入1,若只取前5名的成绩请输入2!\n",r->data); //输入1或2 选择成绩记录的方式 scanf("%d",&z); printf("请输入第1名所来自的学校的名字和他该项
50、目的成绩:\n"); //输入第1名学校名称和项目成绩 scanf("%s%d",&r->data1,&r->da1); q=L1->next; for(j=1;j<=n;j++) if(strcmp(r->data1,q->data)==0) if(z==1) {q->da=q->da+r->da1;q->d1=q->d1+r->da1;}//把项目的成绩把对应的项目的成绩加到学校里 先把第一名的成绩加到对应的学校 加到男子项目总分 if(z==2) {q->da=q->da+r->da1;q->d1=q->d1+r->da1;} q=q->next; prin
51、tf("请输入第2名所来自的学校的名字和他该项目的成绩:\n"); //输入第2名学校名称和项目成绩 scanf("%s%d",&r->data2,&r->da2); q=L1->next; for(j=1;j<=n;j++) if(strcmp(r->data2,q->data)==0) if(z==1) {q->da=q->da+r->da2;q->d1=q->d1+r->da2;} if(z==2) {q->da=q->da+r->da2;q->d1=q->d1+r->da2;} q=q->next; printf("请输入第3名所来自的学校的名字和他该项目
52、的成绩:\n"); //输入第3名学校名称和项目成绩 scanf("%s%d",&r->data3,&r->da3); q=L1->next; for(j=1;j<=n;j++) if(strcmp(r->data3,q->data)==0) if(z==1) {q->da=q->da+r->da3;q->d1=q->d1+r->da3;} if(z==2) {q->da=q->da+r->da3;q->d1=q->d1+r->da3;} q=q->next; //如果z=2,则继续输入第四,第五名的学校名称和项目成绩。 if(z==2) printf("请输入第
53、4名所来自的学校的名字和他该项目的成绩\n");//输入第4名的学校名称和项目成绩。 scanf("%s%d",&r->data4,&r->da4); q=L1->next; for(j=1;j<=n;j++) if(strcmp(r->data4,q->data)==0) {q->da=q->da+r->da4;q->d1=q->d1+r->da4;} q=q->next; printf("请输入第5名所来自的学校的名字和他该项目的成绩:\n");//输入第5名的学校名称和项目成绩。 scanf("%s%d",&r->data5,&r->da5); q=L1->next;
54、for(j=1;j<=n;j++) if(strcmp(r->data5,q->data)==0) {q->da=q->da+r->da4;q->d1=q->d1+r->da4;} q=q->next; r=r->next; //输入男子项目完毕 printf("\n请输入这次比赛的女子项目的个数:\n"); //输入女子项目的的个数w scanf("%d",&w); //构建链表L3,输入w个项目名称 womansports(L3,w); r=L3->next; //依次对w个女子项目进行结果记录 for(i=1;i<=w;i++) printf("如果此次%s 比
55、赛只取前3名的成绩请输入1,若只取前5名的成绩请输入2!\n",r->data); //输入1或2 选择记录的个数 scanf("%d",&x); printf("请输入第1名所来自的学校的名字和他该项目的成绩:\n"); //输入第 1 名所来自的学校的名字和他该项目的成绩 scanf("%s%d",&r->data1,&r->da1); q=L1->next; for(j=1;j<=n;j++) if(strcmp(r->data1,q->data)==0) if(x==1) {q->da=q->da+r->da1;q->d2=q->d2+r->da1;} if(x==
56、2) {q->da=q->da+r->da1;q->d2=q->d2+r->da1;} q=q->next; printf("请输入第2名所来自的学校的名字和他该项目的成绩:\n"); //输入第 2名所来自的学校的名字和他该项目的成绩 scanf("%s%d",&r->data2,&r->da2); q=L1->next; for(j=1;j<=n;j++) if(strcmp(r->data2,q->data)==0) if(x==1) {q->da=q->da+r->da2;q->d2=q->d2+r->da2;} if(x==2) {q->da=q->da+r->da
57、2;q->d2=q->d2+r->da2;} q=q->next; printf("请输入第3名所来自的学校的名字和他该项目的成绩:\n"); //输入第 3名所来自的学校的名字和他该项目的成绩 scanf("%s%d",&r->data3,&r->da3); q=L1->next; for(j=1;j<=n;j++) if(strcmp(r->data3,q->data)==0) if(x==1) {q->da=q->da+r->da3;q->d2=q->d2+r->da3;} if(x==2) {q->da=q->da+r->da3;q->d2=q->d2+r->da3;
58、} q=q->next; if(x==2) printf("请输入第4名所来自的学校的名字和他该项目的成绩:\n");//输入第4名所来自的学校的名字和他该项目的成绩 scanf("%s%d",&r->data4,&r->da4); q=L1->next; for(j=1;j<=n;j++) if(strcmp(r->data4,q->data)==0) {q->da=q->da+r->da4;q->d2=q->d2+r->da4;} q=q->next; printf("请输入第5名所来自的学校的名字和他该项目的成绩:\n");//输入第 5 名所来自的学校的名字和他该项目
59、的成绩 scanf("%s%d",&r->data5,&r->da5); q=L1->next; for(j=1;j<=n;j++) if(strcmp(r->data5,q->data)==0) {q->da=q->da+r->da5;q->d2=q->d2+r->da5;} q=q->next; r=r->next; //输入女子项目完毕 p=L1->next; printf("参加这次比赛的学校的成绩为:\n"); //输出n个学校的分数 for(i=1;i<=n;i++) //n个学校 第一个节点开始一直打印到n个 printf("%s :总分:%d 分男子团体总分:%d 分女子团体总分:%d 分\n",p->data,p->da,p->d1,p->d2); //学校的名字…….. p=p->next; // p指向学校的链表 打印完之后指向下一个节点 //把团体总分按照从大到小进行排序并打印 schoolrankings (L1,n); //把男子总分按照从大到小进行排序并打印 manrankings (L1,n); //把女子总分按照从大到小进行排序并打印 womanrankings (L1,n); //输入部分结束 while(z!=4); // printf("\n"); 【精品文档】第 19 页
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年水电工程运行维护管理合同示范文本.docx
- 2025年工程勘测设计合同模板.docx
- 2025年区域产品销售代理合同.docx
- 2025年经销商授权合同样本.docx
- 2025年员工住房资金借贷合同.docx
- 2025年轻钢建筑施工合同示例.docx
- 2025年网络推广托管合同.docx
- 2025年简明个人借款正式合同范例.docx
- 2025年房产按揭贷款合同范例.docx
- 2025年技术合同争议调解.docx
- 2025年电子版城市住宅租赁合同范本.docx
- 2025年简易转让合同协议书样本.docx
- 2025年投资顾问服务合同实例.docx
- 2025年经销合同模板.docx
- 2025年工业项目设计合同样本.docx