1、 《数据构造》实验报告 实验内容:运动会竞赛成绩记录 数据构造实验报告 一.课题概述 1 二.概要设计原理 1 三.详细程序清单及注释阐明 2 四.运营与测试及成果 7 五.本人编写函数 11 六.心得体会 13 七.参照文献 13 一、课题概述 1.实验目:线性表应用类实验题目参照 2.实验内容:运动会竞赛成绩记录 【问题描述】 东北大学第51届运动大会成功举办。共有N个学院
2、男女代表队参赛。大会共设M个男子项目和W个女子项目。大会即将闭幕,准备发布成绩。 【实验规定】 设计运动会竞赛成绩记录程序。 (1)采用顺序表或链表等数据构造。 (2)记录各代表队男女总分和团队总分。 (3)发布各单项成绩前六名和团队成绩前三名。 (4)可以查询成绩。 二、概要设计原理 本程序重要采用了链表存储构造,实现了对数据存储,访问等操作。 本程序实现了男子团队成绩、女子团队成绩、总成绩输出。以及对个单项和团队成绩前六名输出。并实现了查找功能。 程序重要分为四个函数: 1. Zongfen() 这个函数重要实现计算各学院男子总分、女子
3、总分、以及团队总分计算以及存储操作。 2. tuandui_paiming() 此函数运用了排顺函数,实现了对团队总分排序,以及前六名输出。 3. danxiang_paiming() 此函数运用了排序函数,实现了对单项成绩排名,以及对各个单项前六名输出。 4. chazhao() 通过此函数,可以实现对各个学院查找,并且显示出各个学院单项成绩,以及男子团队成绩、女子团队成绩 、总成绩输出。 5. main() 6. 主函数,实现对所有函数协调,并且执行了某些程序中相称核心某些,对整个程序执行以及对的输出起到了很大作用。 7. zhujiemain() 主界面函数,实现函数
4、运营时界面输出,以及对接下来操作选取,是整个程序核心某些。
三、详细程序清单及注释阐明
#include
5、 //女子项目总成绩 int total; //学院总成绩 struct xueyuan *next; }xueyuan,*Lxueyuan; Lxueyuan L; void zhujiemian(); char Mname[5][20]; //5个男子项目名称 char Wname[5][20]; //5个女子项目成绩 char b[9][10];int a[9]; char xueyuan_name[][9]={"信息","机械","软件","材冶","资土","外国语","文法","工管","理"}; int fenshu
6、[9][10]={{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},
7、 {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(Mname[0],"男子100米");strcpy(Mname[1],"男子110米栏");strcpy(Mname[2],"男子铅球");strcpy(Mname[3],"男子铁饼");strcpy(Mname[4],"男子体操"); str
8、cpy(Wname[0],"女子100米");strcpy(Wname[1],"女子100米栏");strcpy(Wname[2],"女子铅球");strcpy(Wname[3],"女子铁饼");strcpy(Wname[4],"女子体操"); 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_name[i]); for(j=
9、0;j<5;j++) p->Mdata[j]=fenshu[i][j]; for(j=0;j<5;j++) p->Wdata[j]=fenshu[i][j+5]; p->next=L->next;L->next=p; } } void zongfen() //计算总分 以及输出 { int i; Lxueyuan p; p=L->next; printf("----------------------各学院总分---------------------\n"); printf("学院 男子
10、总成绩 女子总成绩 总成绩"); for(i=0;i<9;i++) { printf("\n%s\t\t",p->name); p->man=p->Mdata[0]+p->Mdata[1]+p->Mdata[2]+p->Mdata[3]+p->Mdata[4]; p->woman=p->Wdata[0]+p->Wdata[1]+p->Wdata[2]+p->Wdata[3]+p->Wdata[4]; p->total=p->Mdata[0]+p->Mdata[1]+p->Mdata[2]+p->Mdata[3]+p->Mdata[4]+p-
11、>Wdata[0]+p->Wdata[1]+p->Wdata[2]+p->Wdata[3]+p->Wdata[4]; printf("%d\t\t%d\t\t",p->man,p->woman); printf("%d",p->total); p=p->next; } } void paixu(int a[9],char b[9][10]) { int i,j,k;char c[10]; for(i=0;i<9;i++) for(j=0;j<9-i;j++) { if(a[j]<=a[j+1]) { k=a[j];a
12、[j]=a[j+1];a[j+1]=k; strcpy(c,b[j]);strcpy(b[j],b[j+1]);strcpy(b[j+1],c); } } } void tuandui_paiming() //发布团队排名 { int i; printf("\n\n\n--------------------团队排名--------------------\n"); printf(" 学院 第一名 第二名 第三名 第四名 第五名 第六名 "); Lxueyuan p; p=L->ne
13、xt; for(i=0;i<9;i++) { a[i]=p->man;strcpy(b[i],p->name); p=p->next; } paixu(a,b); printf("\n男子项目\t"); for(i=0;i<6;i++) { printf("%s\t",b[i]); } p=L->next; for(i=0;i<9;i++) { a[i]=p->woman;strcpy(b[i],p->name); p=p->next
14、 } paixu(a,b); printf("\n女子项目\t"); for(i=0;i<6;i++) { printf("%s\t",b[i]); } p=L->next; for(i=0;i<9;i++) { a[i]=p->total;strcpy(b[i],p->name); p=p->next; } paixu(a,b); printf("\n总项目\t\t"); for(i=0;i<6;i++) {
15、 printf("%s\t",b[i]); } printf("\n"); zhujiemian(); } void danxiang_paiming() { int i,j; printf("\n\n\n--------------------单项排名--------------------\n"); printf(" 学院 第一名 第二名 第三名 第四名 第五名 第六名 "); Lxueyuan p; for(j=0;j<5;j++) { p=L->next; for(i=0;i<9;i+
16、) { a[i]=p->Mdata[j];strcpy(b[i],p->name); p=p->next; } paixu(a,b); printf("\n%s\t",Mname[j]); for(i=0;i<6;i++) { printf("%s\t",b[i]); } } for(j=0;j<5;j++) { p=L->next; for(i=0;i<9;i++) {
17、 a[i]=p->Wdata[j];strcpy(b[i],p->name); p=p->next; } paixu(a,b); printf("\n%s\t",Wname[j]); for(i=0;i<6;i++) { printf("%s\t",b[i]); } } zhujiemian(); } void chazhao() //查找函数 { int i;char abc[20]; p
18、rintf("请输入您要查找学院名称:"); scanf("%s",abc); Lxueyuan p; p=L->next; while(p) { if(strcmp(p->name,abc)) break; } if(p==NULL) printf("您查找学院不存在!!\n"); else { for(i=0;i<5;i++) printf("%s:\t%d分\n",Mname[i],p->Mdata[i]); for(i=0;i<5;i++) printf("%s:\t%d分\n",Wname[i],p->
19、Wdata[i]); 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" "--
20、 2.单项排名 ----\n" "---- 3.查找 ----\n" "---- 其她.退出 ----\n" "----------------------------------------------------\n"); int choose; printf("请输入您选取:"); scanf("%d",&choose); switc
21、h(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.查找—信息
22、
---机械
6.退出
五.本人编写函数
#include
23、 int total; //学院总成绩 struct xueyuan *next; }xueyuan,*Lxueyuan; Lxueyuan L; void zhujiemian(); char Mname[5][20]; //5个男子项目名称 char Wname[5][20]; //5个女子项目成绩 char b[9][10];int a[9]; char xueyuan_name[][9]={"信息","机械","软件","材冶","资土","外国语","文法","工管","理"}; int fenshu[9][10]={{7,8
24、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,
25、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(Mname[0],"男子100米");strcpy(Mname[1],"男子110米栏");strcpy(Mname[2],"男子铅球");strcpy(Mname[3],"男子铁饼");strcpy(Mname[4],"男子体操"); strcpy(Wname[0],"女
26、子100米");strcpy(Wname[1],"女子100米栏");strcpy(Wname[2],"女子铅球");strcpy(Wname[3],"女子铁饼");strcpy(Wname[4],"女子体操"); 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_name[i]); for(j=0;j<5;j++)
27、p->Mdata[j]=fenshu[i][j]; for(j=0;j<5;j++) p->Wdata[j]=fenshu[i][j+5]; p->next=L->next;L->next=p; } } void zongfen() //计算总分 以及输出 { int i; Lxueyuan p; p=L->next; printf("----------------------各学院总分---------------------\n"); printf("学院 男子总成绩 女子总成绩
28、 总成绩"); for(i=0;i<9;i++) { printf("\n%s\t\t",p->name); p->man=p->Mdata[0]+p->Mdata[1]+p->Mdata[2]+p->Mdata[3]+p->Mdata[4]; p->woman=p->Wdata[0]+p->Wdata[1]+p->Wdata[2]+p->Wdata[3]+p->Wdata[4]; p->total=p->Mdata[0]+p->Mdata[1]+p->Mdata[2]+p->Mdata[3]+p->Mdata[4]+p->Wdata[0]+p->Wd
29、ata[1]+p->Wdata[2]+p->Wdata[3]+p->Wdata[4]; printf("%d\t\t%d\t\t",p->man,p->woman); printf("%d",p->total); p=p->next; } } void zhujiemian() { printf("----------------------------------------------------\n" "---- 1.总成绩及团队排名 ----\n" "----
30、 2.单项排名 ----\n" "---- 3.查找 ----\n" "---- 其她.退出 ----\n" "----------------------------------------------------\n"); int choose; printf("请输入您选取:"); scanf("%d",&choose); switch(choose)
31、 { case 1:zongfen();tuandui_paiming();break; case 2:danxiang_paiming();break; case 3:chazhao();break; default:exit(0); } } void main() //主函数 { shuju(); zhujiemian(); } 六.心得体会 通过这次程序设计,使自己对链表操作有了更进一步理解。在程序设计中遇到了某些困难。 在程序设计中,对某些函数运用有了更进一步理解。 七.参照文献 《数据构造(C语言版)》 严蔚敏 清华大学出版社 《数据构造教程上机实验指引》 李春葆 清华大学出版社






