资源描述
《数据构造》实验报告
实验内容:运动会竞赛成绩记录
数据构造实验报告
一.课题概述 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 xueyuan
{
char name[10]; //学院名称
int Mdata[5]; //5个男子项目成绩
int Wdata[5]; //5个女子项目成绩
int man; //男子项目总成绩
int woman; //女子项目总成绩
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,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(Mname[0],"男子100米");strcpy(Mname[1],"男子110米栏");strcpy(Mname[2],"男子铅球");strcpy(Mname[3],"男子铁饼");strcpy(Mname[4],"男子体操");
strcpy(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=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("学院 男子总成绩 女子总成绩 总成绩");
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->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[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->next;
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;
}
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++)
{
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++)
{
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++)
{
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];
printf("请输入您要查找学院名称:");
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->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"
"---- 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 xueyuan
{
char name[10]; //学院名称
int Mdata[5]; //5个男子项目成绩
int Wdata[5]; //5个女子项目成绩
int man; //男子项目总成绩
int woman; //女子项目总成绩
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,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(Mname[0],"男子100米");strcpy(Mname[1],"男子110米栏");strcpy(Mname[2],"男子铅球");strcpy(Mname[3],"男子铁饼");strcpy(Mname[4],"男子体操");
strcpy(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=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("学院 男子总成绩 女子总成绩 总成绩");
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->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 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语言版)》 严蔚敏 清华大学出版社
《数据构造教程上机实验指引》 李春葆 清华大学出版社
展开阅读全文