1、石家庄经济学院 华信学院 课程设计报告 学 院: 专 业: 班 级: 学 号: 姓 名: 运动会分数统计系统得设计与实现 一.问题描述 大学作为一个提供学生全面发展得高等教育机构,不仅要培养学生得学习能力,而且更要注重学生得德智体美全面发展。在大学中有很多丰富多彩得比赛与活动,例如运动会
2、演讲比赛,歌唱比赛,书法比赛等,在比赛与竞争中,我们得这些素质与能力更容易得到培养提升。但就是比赛最后得分数统计与查询往往就是举办者头疼得事情,分数得统计与查询需要快速准确,因此我们设计了这个运动会分数统计系统,以方便分数得统计查询。 参加运动会得n个学校编号为1~n。比赛分成m个男子项目与w个女子项目,项目编号分别为1~m与m+1~m+w.由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。写一个统计程序产生各种成绩单与得分报表。 二.需求分析 系统功能描述: (1)可以输入各个项目得前三
3、名或前五名得成绩; (2)能统计各学校总分; (3)可以按学校编号或名称、学校总分、男女团体总分排序输出; (4)可以按学校编号查询学校某个项目得情况;可以按项目编号查询取得前三或前五名得学校. 三.概要设计 3、1链表结构得ADT得定义 ADT List{ 数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n≥0} 数据关系:R1={<ai-1,ai〉|ai-1,ai∈D,i=2,…,n} 基本操作: InitList(&L) 操作结果:构造一个空得线性表L。 GetElem(L,i,&e)
4、 初始条件:线性表L已存在,1≦i≦ListLength(L) 操作结果:用e返回L中第i个数据元素得值。 LocateElem(L,e,pare()) 初始条件:线性表L已存在,pare()就是数据元素判定函数。 操作结果:返回L中第1个与e满足关系pare()得数据元素得位序。若这样得数据元素不存在,则返回值为0。 PriorElem(L,cur_e,&pre_e) 初始条件:线性表L已存在。 操作结果:若cur_e就是L
5、得数据元素,且不就是第一个,则用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个位置之前插入新得元素e,L就是表长度加1
6、 ListTraverse(L,visit()) 初始条件:线性表L已存在。 操作结果:依次对L得每个数据元素调用函数visit()。一旦visit()失败,则操作失败。 }ADT List 3、2系统功能模块设计 运动会分数统计系统 输入各学校名称 输入男子运动项目 输入女子运动项目 输入男子项目得成绩 输入女子项目得成绩 查询某校各个项目得成绩 查询某校各个项目得成绩 图 3-1运动会分数统计系统功能模块图 main() womansports(LinkList &L,i
7、nt 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; //指向下一学校 } Lnode,*L
9、inkList; 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 系统子程序详细设计 输入各学校名称得算法: //按从头到尾得顺序依次建立线性链表L1共有n个节点 void
10、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));//指向一个有意义得地方 L1->next=p;/
11、/把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("%s”,&p->d
12、ata); 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(in
13、t 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—>ne
16、xt=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; 开始 输入n个女子项目得名字 i=0 i>n 将第i个结点加入链表L 结束 N Y } } 参加比赛得学校得总分排名得算法: void schoolrankings(LinkList &L1,int n) { LinkList p; 学校得数据类型 上边
17、int z,i,j,y; printf("参加这次比赛得学校得总分排名:\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(
18、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; // L1表示一个节点,取出里面一个数据,那个数据得名字就是next,next也就是一个节点,p也就是一个节点, if(i>0) // 意义就是判断下一个就是不就是 //如果值相等则链表指针直接指向下一个,不用交换位置 while(sz[i]==sz
19、[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; } } } 开始 结束 i=0 i++ i>n Y N 将每个学校得总分赋给数组sz[n] 对数组sz[n]进行冒泡排序 遍历链表
20、L找到与sz[i]相等得结点并输出总分 参加这次比赛得学校得男子项目得成绩排名得算法: //男子项目排名算法代码与上述学校总分得排名算法完全一致,其中男子项目排序得过程为比较男子项目总分 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; } //
21、再对数组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——; } //在链表L1中找到与sz[i] 相等得节点得位置,并打印出名次信息 for
22、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++ i>n Y N 将男子项目得总分赋给数组sz[n] 对数组sz[n]进行冒泡排序 遍历链表L找到与sz[i]相等得结点并输出总分 参加这次比赛得学校得女子项目得成绩排名得算法: //女子项目排名算法代码与上述学校总分得排名算法完全一致,其中女子项目排序得过程为比较女子项目总分 void womanrankings(
23、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]>sz[j]) { y=sz[j—1]; sz[j-1]=sz[j
24、]; 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); z++;
25、} 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查询某个项目得比赛结果 图 5-5结束本程序 六。结果分析 表 6-1时间、空间复杂度 操作 时间复杂度 空间复杂度 1 O(n+m) O(1) 2 O(n)
26、O(1) 3 O(m) O(1) 注:m为学校个数,n为项目个数。 七。学习体会 通过这次数据结构课程设计,我收获了很多: 一。经过这几天得学习,进一步提升了C语言得应用能力,巩固了数据结构上课所学习得内容,数据结构知识得应用能力有了一定得提升,并且对C语言与数据结构有了更深层次得认识. 二.这次课程设计我们选得课题就是运动会分数统计,涉及到线性链表以及C语言得一些基本得知识。在以前得学习中,对知识只就是掌握了大概得内容,基础知识掌握得不牢固,所以编写程序得过程非常得困难,通过这次课程设计,让我知道基础知识非常重要。在进行概要设计得时候要注意
27、结合问题得需求分析,函数调用要与系统功能相结合。在书写程序时,要认真细心,很多错误都就是因为自己得粗心,调试程序就花费了非常多得时间。
三。通过这次课程设计,让我明白了独立思考得重要性。一个东西只有经过自己得思考,自己明白了才就是真得明白了。在思考得过程中,对一个问题思考得越深入,可以挖掘得东西就越多。在解决问题时要结合多方面得因素,不能只单方面思考问题。
八.源程序清单
#include <stdio、h〉
#include
28、20]; //学校名称 int da,d1,d2; //学校编号、学校总分、男女团体分 struct Lnode *next; //指向下一学校 } 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; //指向下一项目 }
29、 Lnode1,*LinkList1; 输入各学校名称得算法: //按从头到尾得顺序依次建立线性链表L1共有n个节点 void schoolname(LinkList &L1,int n) { int i; LinkList p,q; //输入头结点信息,即输入第一个学校得名字 L1=(LinkList)malloc(sizeof(Lnode)); printf("请输入这%d 个学校得名字:\n",n); p=(LinkList)malloc(sizeof(Lnode)); L1—>next=p; scanf("%s",&p—〉data); //从第二个节点开始依次
30、输入到第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) { //输入第一个节点得信息,即第一个男子项目得名字 int i; LinkList1 r,s; L2=(LinkList1)malloc(sizeof(Lnode1)); print
31、f("请输入这%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] = ’\0’; for( t=0;t<20;t++) r-〉data5[t] = '\0'; L2-〉next=r; scanf("%s",&r—
32、>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( t=0;t<20;t++) r—>data4[t] = '\0’; for( t=0;t<20;t++) r->data5[t] =
33、 ’\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("请输入这%d 个项目得名字:\n",n1); r=(LinkList1)malloc(sizeof(Lnode1)); L
34、3—>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,j,y; printf("参加这次比赛得学校得总分排名:\n"); p=L1->next;
35、//先把每个学校得总分依次遍历,存放在数组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-—) { p=L1->next; if(i>
36、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
37、 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];
38、 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;
39、 } } } 参加这次比赛得学校得女子项目得成绩排名得算法: //女子项目排名算法代码与上述学校总分得排名算法完全一致,其中女子项目排序得过程为比较女子项目总分 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用冒泡排
40、序法进行从小到大排序 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—-; } //在链表L1中找到与sz[i] 相等得节点得
41、位置,并打印出名次信息 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; } } } void main () { int i,j,z,x,n,m,w; //声明学校链表 LinkList p,q,L1; //p,q没有实际意义,L1就是有实际意义,就是储存学校信息 //声明项目链表 LinkList1 r,s,L2,L3; // 同上 男子男子链表,女子想么链表 do { pr
42、intf(”*************************************\n"); printf("****1 输入基本信息 ****\n”); ﻩ printf("****2 查询某校各个项目得成绩 ****\n"); printf("****3 查询某个项目得比赛结果 ****\n"); printf("****4 结束本程序 ****\n”); printf("*************************************\n"); printf("请选择您想进行得操作\
43、n"); //输入1,或2或3 选择功能 scanf("%d",&z); //z=2查询某校各个项目得成绩 if(z==2) { r=L2-〉next; printf("请输入您想查寻得学校得名字:\n"); //输入待查询学校得名称 s = (LinkList1)malloc(sizeof(Lnode1));//存储学校得名字 scanf("%s",&s-〉data);//输出查询结果 //输出查询信息 for(i=1;i〈=m;i++) // m为男子项目个数 字符串比较里面得就是否相等,相等=0,不相等不=0 第一名得成绩 第一名学校
44、 { 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(”贵校荣获男子项目%s 得第3名,她该项目得成绩就是:%d\n",r-〉data,r-〉da3); if(strcmp(r-〉data4,s->data
45、)==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; //男子项目得链表 } r=L3->next; for(i=1;i<=w;i++) { if(strcmp(r->data1,s—〉data)==0) printf(”贵校荣获女子项目%s 得第1名,她该项目得成绩就是:%d\n",r->data,r
46、>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(”贵校荣获女子项目%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-
47、>data)==0) printf("贵校荣获女子项目%s 得第5名,她该项目得成绩就是:%d\n”,r->data,r->da5); r=r-〉next; } } //查询学校结束 //z=3查询某个项目得比赛结果 if(z==3) { printf(”请输入您想查寻得项目得名字:\n”); //输入待查询得项目名称 s = (LinkList1)malloc(sizeof(Lnode1)); scanf(”%s”,&s-〉data); //存data里 r=L2->next; for(i=1;i〈=m;i++) { if(strcmp(r—>data,s—
48、>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”,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->da
49、ta)==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(”第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) //输入部分 {
50、 //输入学校得个数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; q—〉d2=0; q=q-〉next; } //输入男子个项目总数m printf("\n请输入这次比赛得男子项目得个数:\n"); scanf("%d”,&m); //构建男子项目链表L2输入m个男子运动






