logo资料库

运动会(C语言链表实现).doc

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
题目 一、题目介绍: 参加运动会的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
分享到:
收藏