题目
一、题目介绍:
参加运动会的n个学校编号为 1~n。比赛分成m个男子项目和
w个女子项目,项目编号分别为 1~m和m+1~m+w。由于各项
目参加人数差别较大。
允许用户指定项目采取其他名次取法或指定有些项目取前五名,
得分顺序为 7,5,3,2,1;还有些项目只取前三名,得分顺序为 5,3,2。
输入项目编号,学校编号,名次,选手姓名及其性别
输出团体总分报表:显示学校编号,男子团体总分、女子团体总
分和团体总分。
二、概要设计:
使用链式存储,数据域使用结构体,内容包括:项目编号,学
校编号,名次,所获名次选手及性别。使用输入信息函数,处理数据
函数,创建头结点函数。
三、详细设计:
struct sport
{
用于保存基本信息,结构体存储类型
}
typedef struct Node
{ 定义单链表
链表的数据域
链表的指针域
}Node,*LinkList
void InitList(LinkList *L)
{
创建并初始化单链表
}
void inputinformation(LinkList L)
{
}
向链表中输入数据
void make(LinkList L)
{
}
处理数据并将其输出
void print(LinkList L)
{
}
显示其结果
void fun()
{
}
用于用户是否采用其他名次取法及其得分
int main()
{
}
用于调用子函数
四、调试分析:
链表未初始化,出现错误,定义一个开辟节点的函数,链表指针发生错误,使数据存储出错,
重新调试。末尾节点指针未赋值为空,出现错误。
五、源代码:
#include
1
#include
int n,m,w;
int odd[10] = {7,5,3,2,1};
int even[10]={5,3,2};
int o=5,e=3;
struct sport
{
int school;
int itemnum;
char name[21];
char sex;
int rank;
int goal;
};
typedef struct Node
{
struct sport data;
struct Node * next;
}Node,*LinkList;
void InitList(LinkList *L)
{
*L = (LinkList)malloc(sizeof(Node));
(*L) -> next = NULL;
}
void inputinformation(LinkList L)
{
Node *r,*s;
r = L;
printf("分别输入学校数,男子项目,女子项目的个数\n");
scanf("%d%d%d",&n,&m,&w);
printf("\n***********************************************************************
*********\n\n");
int i,j;
sport c;
while (1)
{
printf("*****学校编号(输入 0 结束):");
scanf("%d",c.school);
printf("\n");
if (c.school == 0)
break;
2
printf("*****项目编号:");
scanf("%d",c.itemnum);
printf("\n");
printf("*****选手姓名:");
scanf("%s",c.name);
printf("\n");
getchar();
printf("*****选手性别(男:a;女:b):");
scanf("%c",c.sex);
printf("\n");
printf("*****名次:");
scanf("%d",c.rank);
printf("\n\n");
i = c.itemnum;
if (i)
{
if (c.rank <= o)
c.goal = odd[c.rank-1];
else
c.goal = 0;
}
else
{
if (c.rank <= e)
c.goal = even[c.rank-1];
else
c.goal = 0;
}
s = (Node *)malloc(sizeof(Node));
s->data = c;
r->next = s;
r = s;
}
r->next = NULL;
}
void make(LinkList L)
{
Node *p;
int i,j,ManSum,WomanSum;
for (i = 1;i <= n;i++)
{
p = L->next;
printf("学校 姓名 项目 性别 排名 得分\n");
while (p != NULL)
3
{
if (p -> data.school == i)
{
printf("%d
%s %d
%c
%d
%d\n",
p->data.school,p->data.name,
p->data.itemnum,p->data.sex,
p->data.rank,p->data.goal);
if (p ->data.sex == 'a')
ManSum = p->data.goal;
else
WomanSum = p->data.goal;
}
p = p->next;
}
printf("%d 号学校的男团体总分为:%d\n",i,ManSum);
printf("%d 号学校的女团体总分为:%d\n",i,WomanSum);
printf("%d 号学校的团体总分为:%d\n",i,ManSum+WomanSum);
printf("\n");
}
}
void print(LinkList L)
{
Node *p;
p = L ->next;
while (p != NULL)
{
printf("%d %s %d %c %d %d",p->data.school,
p->data.name,p->data.itemnum,p->data.sex,
p->data.rank,p->data.goal);
printf("\n");
p = p -> next;
}
printf("\n");
}
void fun()
{
printf("======================欢迎使用======================\n");
printf("\n\n*****************运动会分数统计系统********************\n");
printf("\n");
printf("初始的项目采取这样的名次取法\n");
printf("编号为奇数的项目取前五名,得分顺序为 7,5,3,2,1;\n");
printf("编号为偶数的项目取前三名,得分顺序为 5,3,2;\n");
printf("是否指定项目采取其他名次取法,是请输入'Y',否则请输入'N'\n");
char ch;
4
scanf("%c",&ch);
if (ch == 'N'||ch == 'n')//不区分大小写
{
printf("请读入两个 10 以内的整数\n");
printf("表示奇数项目取前几名:");
scanf("%d",&o);
printf("表示偶数项目取前几名");
scanf("%d",&e);
printf("请读入%d 个整数,表示奇数项目的顺序得分:\n",o);
for (int i = 0;i < o;i++)
scanf("%d",&odd[i]);
printf("请读入%d 个整数,表示偶数项目的顺序得分:\n",e);
for (int i = 0;i < e;i++)
scanf("%d",&even[i]);
}
}
int main()
{
LinkList Head;
InitList(&Head);
fun();
inputinformation(Head);
make(Head);
system("pause");
return 0;
}
六、用户手册:本程序执行环境为 DOS 系统执行文件为:运动会.exe
1). 测试数据:
a:是否确认得分制:y
分别输入学校数,男子项目,女子项目的个数
0 0 0
是否确认得分制:y
b:分别输入学校数,男子项目,女子项目的个数
2 2 1
学校编号:001
项目编号:1
选手姓名:a
选手性别(男:a;女:b):a
名次:1
学校编号:001
项目编号:1
选手姓名:b
5
选手性别(男:a;女:b):a
名次:2
学校编号:001
项目编号:2
选手姓名:c
选手性别(男:a;女:b):b
名次:1
学校编号:002
项目编号:1
选手姓名:d
选手性别(男:a;女:b):a
名次:3
学校编号:002
项目编号:2
选手姓名:e
选手性别(男:a;女:b):b
名次:2
学校编号:0
学校 姓名 项目 性别 排名 得分
1
1
1
1 号学校的男团体总分为:12
1 号学校的女团体总分为:7
1 号学校的团体总分为:19
学校 姓名 项目 性别 排名 得分
2
2
1 号学校的男团体总分为:3
1 号学校的女团体总分为:5
1 号学校的团体总分为:8
2).运行过程:
(1)首先运行文件运动会.exe,输入信息:
1
1
2
1
2
1
a
b
c
d
e
a
a
b
a
b
7
5
7
3
5
1
1
3
2
程序首先确定名次是否安默认取法,是则输入 Y/y,开始界面如图所示:
否则输入 N/n,重新规定名次得分,如图所示:
6
(2)输入信息:
程序首先赋初始值,定义学校数为:2,男生项目为 2,女生项目为 1。如图所示:
3).结果:按照所给测试数据输入,
输出结果,如下图所示:
7