东北大学数据结构运动会竞赛成绩统计实验报告.doc
数据结构实验报告 实验内容:运动会竞赛成绩统计数据结构实验报告一课题概述1二概要设计原理1三详细程序清单及注释说明2四运行与测试及结果7五本人编写函数11六心得体会13七参考文献13一、课题概述1.实验目的:线性表应用类实验题目参考2.实验内容:运动会竞赛成绩统计 【问题描述】东北大学第51届运动大会成功举行。共有N个学院的男女代表队参赛。大会共设M个男子项目和W个女子项目。大会即将闭幕,准备公布成绩。【实验要求】设计运动会竞赛成绩统计程序。(1)采用顺序表或链表等数据结构。(2)统计各代表队的男女总分和团体总分。(3)公布各单项成绩的前六名和团体成绩的前三名。 (4)可以查询成绩。二、概要设计原理本程序主要采用了链表的存储结构,实现了对数据的存储,访问等操作。本程序实现了男子团体成绩、女子团体成绩、总成绩的输出。以及对个单项和团体成绩的前六名的输出。并实现了查找功能。程序主要分为四个函数:1. Zongfen()这个函数主要实现计算各学院的男子总分、女子总分、以及团体总分的计算以及存储操作。2. tuandui_paiming()此函数运用了排顺函数,实现了对团体总分的排序,以及前六名的输出。3. danxiang_paiming()此函数运用了排序函数,实现了对单项成绩的排名,以及对各个单项前六名的输出。4. chazhao()通过此函数,可以实现对各个学院的查找,并且显示出各个学院的单项成绩,以及男子团体成绩、女子团体成绩 、总成绩的输出。5. main()6. 主函数,实现对所有函数的协调,并且执行了一些程序中相当关键的部分,对整个程序的执行以及正确的输出起到了很大的作用。7. zhujiemain()主界面函数,实现函数运行时界面的输出,以及对接下来操作的选择,是整个程序的关键部分。三、详细程序清单及注释说明#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct xueyuanchar name10; /学院名称int Mdata5; /5个男子项目成绩int Wdata5; /5个女子项目成绩 int man; /男子项目总成绩 int woman; /女子项目总成绩 int total; /学院总成绩struct xueyuan *next;xueyuan,*Lxueyuan;Lxueyuan L;void zhujiemian();char Mname520; /5个男子项目名称char Wname520; /5个女子项目成绩char b910;int a9;char xueyuan_name9="信息","机械","软件","材冶","资土","外国语","文法","工管","理"int fenshu910=7,8,5,6,2,5,8,7,4,5, 5,6,8,7,4,5,2,1,3,5, 8,6,5,4,2,3,5,4,7,4, 8,5,4,7,1,5,4,7,8,5, 7,5,4,6,5,8,6,9,5,6, 7,5,6,4,2,3,8,9,6,5, 7,5,4,2,6,9,8,5,6,1, 5,6,4,8,5,6,5,4,9,8, 8,5,4,2,6,8,9,6,5,8 ;void shuju() /数据处理int i,j;strcpy(Mname0,"男子100米");strcpy(Mname1,"男子110米栏");strcpy(Mname2,"男子铅球");strcpy(Mname3,"男子铁饼");strcpy(Mname4,"男子体操");strcpy(Wname0,"女子100米");strcpy(Wname1,"女子100米栏");strcpy(Wname2,"女子铅球");strcpy(Wname3,"女子铁饼");strcpy(Wname4,"女子体操");L=(Lxueyuan)malloc(sizeof(xueyuan);Lxueyuan p;L->next=NULL;for(i=0;i<9;i+)p=(Lxueyuan)malloc(sizeof(xueyuan);strcpy(p->name,xueyuan_namei);for(j=0;j<5;j+)p->Mdataj=fenshuij;for(j=0;j<5;j+)p->Wdataj=fenshuij+5;p->next=L->next;L->next=p;void zongfen() /计算总分 以及输出int i;Lxueyuan p;p=L->next;printf("-各学院总分-n");printf("学院 男子总成绩 女子总成绩 总成绩");for(i=0;i<9;i+)printf("n%stt",p->name);p->man=p->Mdata0+p->Mdata1+p->Mdata2+p->Mdata3+p->Mdata4;p->woman=p->Wdata0+p->Wdata1+p->Wdata2+p->Wdata3+p->Wdata4;p->total=p->Mdata0+p->Mdata1+p->Mdata2+p->Mdata3+p->Mdata4+p->Wdata0+p->Wdata1+p->Wdata2+p->Wdata3+p->Wdata4;printf("%dtt%dtt",p->man,p->woman);printf("%d",p->total);p=p->next;void paixu(int a9,char b910)int i,j,k;char c10;for(i=0;i<9;i+)for(j=0;j<9-i;j+)if(aj<=aj+1)k=aj;aj=aj+1;aj+1=k;strcpy(c,bj);strcpy(bj,bj+1);strcpy(bj+1,c);void tuandui_paiming() /公布团体排名int i;printf("nnn-团体排名-n");printf(" 学院 第一名 第二名 第三名 第四名 第五名 第六名 ");Lxueyuan p;p=L->next; for(i=0;i<9;i+) ai=p->man;strcpy(bi,p->name);p=p->next; paixu(a,b); printf("n男子项目t"); for(i=0;i<6;i+) printf("%st",bi); p=L->next; for(i=0;i<9;i+) ai=p->woman;strcpy(bi,p->name);p=p->next; paixu(a,b); printf("n女子项目t"); for(i=0;i<6;i+) printf("%st",bi); p=L->next; for(i=0;i<9;i+) ai=p->total;strcpy(bi,p->name); p=p->next; paixu(a,b); printf("n总项目tt"); for(i=0;i<6;i+) printf("%st",bi); printf("n");zhujiemian();void danxiang_paiming()int i,j;printf("nnn-单项排名-n");printf(" 学院 第一名 第二名 第三名 第四名 第五名 第六名 ");Lxueyuan p;for(j=0;j<5;j+)p=L->next;for(i=0;i<9;i+) ai=p->Mdataj;strcpy(bi,p->name); p=p->next; paixu(a,b); printf("n%st",Mnamej); for(i=0;i<6;i+) printf("%st",bi); for(j=0;j<5;j+)p=L->next;for(i=0;i<9;i+) ai=p->Wdataj;strcpy(bi,p->name); p=p->next; paixu(a,b); printf("n%st",Wnamej); for(i=0;i<6;i+) printf("%st",bi); zhujiemian();void chazhao() /查找函数int i;char abc20;printf("请输入您要查找的学院名称:");scanf("%s",abc);Lxueyuan p;p=L->next;while(p)if(strcmp(p->name,abc)break;if(p=NULL)printf("您查找的学院不存在!n");elsefor(i=0;i<5;i+)printf("%s:t%d分n",Mnamei,p->Mdatai);for(i=0;i<5;i+)printf("%s:t%d分n",Wnamei,p->Wdatai);printf("男子总成绩:t%d分n",p->man);printf("女子总成绩:t%d分n",p->woman);printf("总成绩:t%d分n",p->total);zhujiemian();void zhujiemian() printf("-n" "- 1.总成绩及团体排名 -n" "- 2.单项排名 -n" "- 3.查找 -n" "- 其他.退出 -n" "-n");int choose;printf("请输入您的选择:");scanf("%d",&choose);switch(choose)case 1:zongfen();tuandui_paiming();break;case 2:danxiang_paiming();break;case 3:chazhao();break;default:exit(0);void main() /主函数shuju(); zhujiemian();四运行与测试及结果1.主界面2.各学院总分3.团体总分4.单项排名5.查找信息-机械6.退出五本人编写函数#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct xueyuanchar name10; /学院名称int Mdata5; /5个男子项目成绩int Wdata5; /5个女子项目成绩 int man; /男子项目总成绩 int woman; /女子项目总成绩 int total; /学院总成绩struct xueyuan *next;xueyuan,*Lxueyuan;Lxueyuan L;void zhujiemian();char Mname520; /5个男子项目名称char Wname520; /5个女子项目成绩char b910;int a9;char xueyuan_name9="信息","机械","软件","材冶","资土","外国语","文法","工管","理"int fenshu910=7,8,5,6,2,5,8,7,4,5, 5,6,8,7,4,5,2,1,3,5, 8,6,5,4,2,3,5,4,7,4, 8,5,4,7,1,5,4,7,8,5, 7,5,4,6,5,8,6,9,5,6, 7,5,6,4,2,3,8,9,6,5, 7,5,4,2,6,9,8,5,6,1, 5,6,4,8,5,6,5,4,9,8, 8,5,4,2,6,8,9,6,5,8 ;void shuju() /数据处理int i,j;strcpy(Mname0,"男子100米");strcpy(Mname1,"男子110米栏");strcpy(Mname2,"男子铅球");strcpy(Mname3,"男子铁饼");strcpy(Mname4,"男子体操");strcpy(Wname0,"女子100米");strcpy(Wname1,"女子100米栏");strcpy(Wname2,"女子铅球");strcpy(Wname3,"女子铁饼");strcpy(Wname4,"女子体操");L=(Lxueyuan)malloc(sizeof(xueyuan);Lxueyuan p;L->next=NULL;for(i=0;i<9;i+)p=(Lxueyuan)malloc(sizeof(xueyuan);strcpy(p->name,xueyuan_namei);for(j=0;j<5;j+)p->Mdataj=fenshuij;for(j=0;j<5;j+)p->Wdataj=fenshuij+5;p->next=L->next;L->next=p;void zongfen() /计算总分 以及输出int i;Lxueyuan p;p=L->next;printf("-各学院总分-n");printf("学院 男子总成绩 女子总成绩 总成绩");for(i=0;i<9;i+)printf("n%stt",p->name);p->man=p->Mdata0+p->Mdata1+p->Mdata2+p->Mdata3+p->Mdata4;p->woman=p->Wdata0+p->Wdata1+p->Wdata2+p->Wdata3+p->Wdata4;p->total=p->Mdata0+p->Mdata1+p->Mdata2+p->Mdata3+p->Mdata4+p->Wdata0+p->Wdata1+p->Wdata2+p->Wdata3+p->Wdata4;printf("%dtt%dtt",p->man,p->woman);printf("%d",p->total);p=p->next;void zhujiemian() printf("-n" "- 1.总成绩及团体排名 -n" "- 2.单项排名 -n" "- 3.查找 -n" "- 其他.退出 -n" "-n");int choose;printf("请输入您的选择:");scanf("%d",&choose);switch(choose)case 1:zongfen();tuandui_paiming();break;case 2:danxiang_paiming();break;case 3:chazhao();break;default:exit(0);void main() /主函数shuju(); zhujiemian();六心得体会通过这次的程序设计,使自己对链表的操作有了更进一步的了解。在程序设计中遇到了一些困难。在程序设计中,对一些函数的运用有了更进一步的了解。七参考文献数据结构(C语言版) 严蔚敏 清华大学出版社 数据结构教程上机实验指导 李春葆 清华大学出版社