赞
踩
1.问题描述
参加运动会有 n 个学校,学校编号为1...... n 。比赛分成 m 个男子项目,和 w 个女子项目。项目编号为男子1~ m ,女子 m +1~ m + w 。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2:哪些项目取前五名或前三名由学生自己设定。( m <=20, n <=20)
建议输入学校的名称,运动项目的名称等,其余信息学生自行设计;输出形式:有合理的提示,各学校分数为整形;
2.需求分析
(1)可以输入各个项目的前三名或前五名的成绩;
(2)能统计各学校总分,
(3)可以按学校编号或名称、学校总分、男女团体总分排序输出:
(4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
【使用两个结构体】
(用链表的方法)
typedef struct Lnode
{
char sch[20];//学校名称
int num, schsum, sum;//学校总分,男团体总分,女团体总分
struct Lnode* next;
}Lnode, * LinkList;
typedef struct Lnode1
{
char sch[20];//项目名称
char sch1[20], sch2[20], sch3[20], sch4[20], sch5[20];//该项目前5名学校名称
int num1, num2, num3, num4, num5;//该项目前5名学校分数
struct Lnode1* next;
}Lnode1, * LinkList1;
【输入学校名称】
void schoolname(LinkList& L1, int n)
{
int i;
LinkList p, q;
L1 = (LinkList)malloc(sizeof(Lnode));
printf("请输入%d个学校的名字:\n", n);
p = (LinkList)malloc(sizeof(Lnode));
if (L1 == nullptr ||p==nullptr)
{
printf("未分配内存!");
}
else
{
L1->next = p;
scanf("%s", &p->sch);
for (i = 1; i <n; i++)
{
q = p;
p = (LinkList)malloc(sizeof(Lnode));
scanf("%s", &p->sch);
q->next = p;
}
}
}
【输入男子运动会项目名称】
void mansports(LinkList1& L2, int n2)
{
int i;
LinkList1 r, s;
L2 = (LinkList1)malloc(sizeof(Lnode1));
printf("请输入这%d个项目的名字:\n", n2);
r = (LinkList1)malloc(sizeof(Lnode1));
if (L2 == nullptr || r == nullptr)
{
printf("未分配内存!");
}
else
{
L2->next = r;
scanf("%s", &r->sch);
for (i = 2; i <= n2; i++)
{
s = r;
r = (LinkList1)malloc(sizeof(Lnode1));
scanf("%s", &r->sch);
s->next = r;
}
}
}
【输入女子运动会项目名称】
void womansports(LinkList1& L3, int n3)
{
int i;
LinkList1 r, s;
L3 = (LinkList1)malloc(sizeof(Lnode1));
printf("请输入这%d个项目的名字:\n", n3);
r = (LinkList1)malloc(sizeof(Lnode1));
if (L3 == nullptr || r == nullptr)
{
printf("未分配内存!");
}
else
{
L3->next = r;
scanf("%s", &r->sch);
for (i = 2; i <= n3; i++)
{
s = r;
r = (LinkList1)malloc(sizeof(Lnode1));
scanf("%s", &r->sch);
s->next = r;
}
}
}
【学校总分排名】
void schoolrankings(LinkList& L1, int n)
{
LinkList p;
int z = 1, i, j, y;
printf("参加这次比赛的学校的总分排名:\n");
p = L1->next;
for (i = 0; i < n; i++)
{
a[i] = p->num;//将学校总分全部赋值给全局变量
p = p->next;
}
for (i = 0; i < n - 1; i++)//交换法排序
{
for (j =i+ 1; j <n; j++)
{
if (a[i] > a[j])
{
y = a[i];
a[i] = a[j];
a[j] = y;
}
}
}
for (i = n-1 ; i >= 0; i--)//倒序
{
p = L1->next;
if (i > 0)
while (a+i==a+i-1)
{
i--;
}
for (j = 1; j <=n; j++)
{
if (a[i] == p->num)
{
printf("第%d名%s:%d分\n", z, p->sch, p->num);
z++;
}
p = p->next;
}
}
}
【男子项目成绩排名】
void manrankings(LinkList& L1, int n)
{
LinkList p;
int z = 1, i, j, y;
printf("参加这次比赛的男子项目总分排名:\n");
p = L1->next;
for (i = 0; i < n; i++)
{
a[i] = p->schsum;
p = p->next;
}
for (i = 0; i < n - 1; i++)//交换法排序
{
for (j = i + 1; j < n; j++)
{
if (a[i] > a[j])
{
y = a[i];
a[i] = a[j];
a[j] = y;
}
}
}
for (i = n -1; i >=0; i--)
{
p = L1->next;
if (i > 0)//如果两个相等,直接下一个总分
while (a+i == a+i-1)
{
i--;
}
for (j = 1; j <=n; j++)
{
if (a[i] == p->schsum)
{
printf("第%d名%s:%d分\n", z, p->sch, p->schsum);
z++;
}
p = p->next;
}
}}
【女子项目成绩排名】
void womanrankings(LinkList& L1, int n)
{
LinkList p;
int z=1, i, j, y;//z从第一名开始
printf("参加这次比赛的女子项目总分排名:\n");
p = L1->next;
for (i = 0; i < n; i++)
{
a[i] = p->sum;
p = p->next;
}
for (i = 0; i < n - 1; i++)//交换法排序
{
for (j = i + 1; j < n; j++)
{
if (a[i] > a[j])
{
y = a[i];
a[i] = a[j];
a[j] = y;
}
}
}
for (i = n -1; i >=0; i--)
{
p = L1->next;
if (i > 0)
while (a+i == a+i-1)
{
i--;
}
for (j = 1; j <= n; j++)
{
if (a[i] == p->sum)
{
printf("第%d名%s:%d分\n", z, p->sch, p->sum);
z++;
}
p = p->next;
}
}
}
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- typedef struct Lnode
- {
- char sch[20];//学校名称
- int num, schsum, sum;//学校总分,男团体总分,女团体总分
- struct Lnode* next;
- }Lnode, * LinkList;
- typedef struct Lnode1
- {
- char sch[20];//项目名称
- char sch1[20], sch2[20], sch3[20], sch4[20], sch5[20];//该项目前5名学校名称
- int num1, num2, num3, num4, num5;//该项目前5名学校分数
- struct Lnode1* next;
- }Lnode1, * LinkList1;
- int a[20];
- //输入各学校名称
- void schoolname(LinkList& L1, int n)
- {
- int i;
- LinkList p, q;
- L1 = (LinkList)malloc(sizeof(Lnode));
- printf("请输入%d个学校的名字:\n", n);
- p = (LinkList)malloc(sizeof(Lnode));
- if (L1 == nullptr ||p==nullptr)
- {
- printf("未分配内存!");
- }
- else
- {
- L1->next = p;
- scanf("%s", &p->sch);
- for (i = 1; i <n; i++)
- {
- q = p;
- p = (LinkList)malloc(sizeof(Lnode));
- scanf("%s", &p->sch);
- q->next = p;
- }
- }
- }
-
- //输入男子运动项目名字
- void mansports(LinkList1& L2, int n2)
- {
- int i;
- LinkList1 r, s;
- L2 = (LinkList1)malloc(sizeof(Lnode1));
- printf("请输入这%d个项目的名字:\n", n2);
- r = (LinkList1)malloc(sizeof(Lnode1));
- if (L2 == nullptr || r == nullptr)
- {
- printf("未分配内存!");
- }
- else
- {
- L2->next = r;
- scanf("%s", &r->sch);
- for (i = 2; i <= n2; i++)
- {
- s = r;
- r = (LinkList1)malloc(sizeof(Lnode1));
- scanf("%s", &r->sch);
- s->next = r;
- }
- }
-
- }
-
- //女子运动项目
- void womansports(LinkList1& L3, int n3)
- {
- int i;
- LinkList1 r, s;
- L3 = (LinkList1)malloc(sizeof(Lnode1));
- printf("请输入这%d个项目的名字:\n", n3);
- r = (LinkList1)malloc(sizeof(Lnode1));
- if (L3 == nullptr || r == nullptr)
- {
- printf("未分配内存!");
- }
- else
- {
- L3->next = r;
- scanf("%s", &r->sch);
- for (i = 2; i <= n3; i++)
- {
- s = r;
- r = (LinkList1)malloc(sizeof(Lnode1));
- scanf("%s", &r->sch);
- s->next = r;
- }
- }
-
- }
-
- //学校总分排名
- void schoolrankings(LinkList& L1, int n)
- {
- LinkList p;
- int z = 1, i, j, y;
- printf("参加这次比赛的学校的总分排名:\n");
- p = L1->next;
- for (i = 0; i < n; i++)
- {
- a[i] = p->num;//将学校总分全部赋值给全局变量
- p = p->next;
- }
- for (i = 0; i < n - 1; i++)//交换法排序
- {
- for (j =i+ 1; j <n; j++)
- {
- if (a[i] > a[j])
- {
- y = a[i];
- a[i] = a[j];
- a[j] = y;
- }
- }
- }
- for (i = n-1 ; i >= 0; i--)//倒序
- {
- p = L1->next;
- if (i > 0)
- while (a+i==a+i-1)
- {
- i--;
- }
- for (j = 1; j <=n; j++)
- {
- if (a[i] == p->num)
- {
- printf("第%d名%s:%d分\n", z, p->sch, p->num);
- z++;
- }
- p = p->next;
- }
- }
- }
-
- //男子项目成绩排名
- void manrankings(LinkList& L1, int n)
- {
- LinkList p;
- int z = 1, i, j, y;
- printf("参加这次比赛的男子项目总分排名:\n");
- p = L1->next;
- for (i = 0; i < n; i++)
- {
- a[i] = p->schsum;
- p = p->next;
- }
- for (i = 0; i < n - 1; i++)//交换法排序
- {
- for (j = i + 1; j < n; j++)
- {
- if (a[i] > a[j])
- {
- y = a[i];
- a[i] = a[j];
- a[j] = y;
- }
- }
- }
- for (i = n -1; i >=0; i--)
- {
- p = L1->next;
- if (i > 0)//如果两个相等,直接下一个总分
- while (a+i == a+i-1)
- {
- i--;
- }
- for (j = 1; j <=n; j++)
- {
- if (a[i] == p->schsum)
- {
- printf("第%d名%s:%d分\n", z, p->sch, p->schsum);
- z++;
- }
- p = p->next;
- }
- }
-
- }
-
- //女子项目成绩
- void womanrankings(LinkList& L1, int n)
- {
- LinkList p;
- int z=1, i, j, y;//z从第一名开始
- printf("参加这次比赛的女子项目总分排名:\n");
- p = L1->next;
- for (i = 0; i < n; i++)
- {
- a[i] = p->sum;
- p = p->next;
- }
- for (i = 0; i < n - 1; i++)//交换法排序
- {
- for (j = i + 1; j < n; j++)
- {
- if (a[i] > a[j])
- {
- y = a[i];
- a[i] = a[j];
- a[j] = y;
- }
- }
- }
- for (i = n -1; i >=0; i--)
- {
- p = L1->next;
- if (i > 0)
- while (a+i == a+i-1)
- {
- i--;
- }
- for (j = 1; j <= n; j++)
- {
- if (a[i] == p->sum)
- {
- printf("第%d名%s:%d分\n", z, p->sch, p->sum);
- z++;
- }
- p = p->next;
- }
- }
- }
-
- int main()
- {
- int i, j, z, x, n, m, w;
- LinkList p, q, L1;
- LinkList1 r, s, L2 = NULL, L3 = NULL;
- do
- {
- printf("************************************\n");
- printf("****1 输入基本信息 ****\n");
- printf("****2 查询某校各个项目的成绩 ****\n");
- printf("****3 查询某个项目的结果 ****\n");
- printf("****4 结束程序 ****\n");
- printf("************************************\n");
- printf("请选择你的操作:\n");
- scanf("%d", &z);
- if (z == 2)
- {
- r = L2->next;
- printf("请输入你像查询学校的名字:\n");
- s = (LinkList1)malloc(sizeof(Lnode1));
- scanf("%s", &s->sch);
- for (i = 1; i <= m; i++)
- {
- if (strcmp(r->sch1, s->sch) == 0)
- printf("贵校荣获男子项目%s的第1名,他的成绩是:%d\n", r->sch, r->num1);
- if (strcmp(r->sch2, s->sch) == 0)
- printf("贵校荣获男子项目%s的第2名,他的成绩是:%d\n", r->sch, r->num2);
- if (strcmp(r->sch3, s->sch) == 0)
- printf("贵校荣获男子项目%s的第3名,他的成绩是:%d\n", r->sch, r->num3);
- if (strcmp(r->sch4, s->sch) == 0)
- printf("贵校荣获男子项目%s的第4名,他的成绩是:%d\n", r->sch, r->num4);
- if (strcmp(r->sch5, s->sch) == 0)
- printf("贵校荣获男子项目%s的第5名,他的成绩是:%d\n", r->sch, r->num5);
- r = r->next;
- }
- r = L3->next;
- for (i = 1; i <= w; i++)
- {
- if (strcmp(r->sch1, s->sch) == 0)
- printf("贵校荣获女子项目%s的第1名,他的成绩是:%d\n", r->sch, r->num1);
- if (strcmp(r->sch2, s->sch) == 0)
- printf("贵校荣获女子项目%s的第2名,他的成绩是:%d\n", r->sch, r->num2);
- if (strcmp(r->sch3, s->sch) == 0)
- printf("贵校荣获女子项目%s的第3名,他的成绩是:%d\n", r->sch, r->num3);
- if (strcmp(r->sch4, s->sch) == 0)
- printf("贵校荣获女子项目%s的第4名,他的成绩是:%d\n", r->sch, r->num4);
- if (strcmp(r->sch5, s->sch) == 0)
- printf("贵校荣获女子项目%s的第5名,他的成绩是:%d\n", r->sch, r->num5);
- r = r->next;
- }
- }
- if (z == 3)
- {
- printf("请输入你要查询的项目的名字:\n");
- s = (LinkList1)malloc(sizeof(Lnode1));
- scanf("%s", &s->sch);
- r = L2->next;
- for (i = 1; i <= m; i++)
- {
- if (strcmp(r->sch, s->sch) == 0)
- {
- if (strlen(r->sch4) == 0)
- printf("第1名%s,第2名%s,第3名%s\n", r->sch1, r->sch2, r->sch3);
- if (strlen(r->sch4) > 0)
- printf("第1名%s,第2名%s,第3名%s,第4名%s,第5名%s\n", r->sch1, r->sch2, r->sch3, r->sch4, r->sch5);
-
- }
- r = r->next;
- }
- r = L3->next;
- for (i = 1; i <= w; i++)
- {
- if (strcmp(r->sch, s->sch) == 0)
- {
- if (strlen(r->sch4) == 0)
- printf("第1名%s,第2名%s,第3名%s\n", r->sch1, r->sch2, r->sch3);
- if (strlen(r->sch4) > 0)
- printf("第1名%s,第2名%s,第3名%s,第4名%s,第5名%s\n", r->sch1, r->sch2, r->sch3, r->sch4, r->sch5);
-
- }
- r = r->next;
-
- }
- }
- if (z == 1)
- {
- printf("请输入参加这次比赛的学校个数:\n");
- scanf("%d", &n);
- schoolname(L1, n);
- q = L1->next;
- for (i = 0; i < n; i++)
- {
- q->num = 0;
- q->schsum = 0;
- q->sum = 0;
- q = q->next;
- }
- printf("请输入这次比赛男子项目的个数:\n");
- scanf("%d", &m);
- mansports(L2, m);
- r = L2->next;
- for (i = 1; i <= m; i++)
- {
- printf("如果此次%s比赛只取前3名的成绩请输入1,取前5名请输入2!\n", r->sch);
- scanf("%d", &z);
- printf("请输入第1名所来自的学校的名字和他该项目的成绩:\n");
- scanf("%s%d", &r->sch1, &r->num1);
- q = L1->next;
- for (j = 0; j < n; j++)
- {
- if (strcmp(r->sch1, q->sch) == 0)//比较r->sch1这个学校是不是q->sch这个学校,直接将结构体1与2连接起来
- {
- if (z == 1 || z == 2)
- {
- q->num = q->num + r->num1;
- q->schsum = q->schsum + r->num1;
- }
- /*if (z == 2)
- {
- q->num = q->num + r->num1;
- q->schsum = q->schsum + r->num1;
- }*/
- }
- q = q->next;
- }
- printf("请输入第2名所来自的学校的名字和他该项目的成绩:\n");
- scanf("%s%d", &r->sch2, &r->num2);
- q = L1->next;
- for (j = 1; j <= n; j++)
- {
- if (strcmp(r->sch2, q->sch) == 0)
- {
- if (z == 1 || z == 2)
- {
- q->num = q->num + r->num2;
- q->schsum += r->num2;
- }
- /*if (z == 2)
- {
- q->num += r->num2;
- q->schsum += r->num2;
- }*/
- }
- q = q->next;
- }
- printf("请输入第3名所来自的学校的名字和他该项目的成绩:\n");
- scanf("%s%d", &r->sch3, &r->num3);
- q = L1->next;
- for (j = 1; j <= n; j++)
- {
- if (strcmp(r->sch3, q->sch) == 0)
- {
- if (z == 1 || z == 2)
- {
- q->num = q->num + r->num3;
- q->schsum += r->num3;
- }
- /*if (z == 2)
- {
- q->num += r->num3;
- q->schsum += r->num3;
- }*/
- }
- q = q->next;
- }
- if (z == 2)
- {
- printf("请输入第4名所来自的学校的名字和他该项目的成绩:\n");
- scanf("%s%d", &r->sch4, &r->num4);
- q = L1->next;
- for (j = 1; j <= n; j++)
- {
- if (strcmp(r->sch4, q->sch) == 0)
- {
- q->num = q->num + r->num4;
- q->schsum += r->num4;
- }
- q = q->next;
- }
- printf("请输入第5名所来自的学校的名字和他该项目的成绩:\n");
- scanf("%s%d", &r->sch5, &r->num5);
- q = L1->next;
- for (j = 1; j <= n; j++)
- {
- if (strcmp(r->sch5, q->sch) == 0)
- {
- q->num = q->num + r->num5;
- q->schsum += r->num5;
- }
- q = q->next;
- }
- }
- r = r->next;
- }
- printf("输入比赛中女子项目的个数:\n");
- scanf("%d", &w);
- womansports(L3, w);
- r = L3->next;
- for (i = 1; i <= w; i++)
- {
- printf("如果此次%s比赛只取前3名的成绩请输入1,取前5名请输入2!\n", r->sch);
- scanf("%d", &x);
- printf("请输入第1名所来自的学校的名字和他该项目的成绩:\n");
- scanf("%s%d", &r->sch1, &r->num1);
- q = L1->next;
- for (j = 1; j <= n; j++)
- {
- if (strcmp(r->sch1, q->sch) == 0)
- {
- if (x == 1)
- {
- q->num = q->num + r->num1;
- q->sum = q->sum + r->num1;
- }
- if (x == 2)
- {
- q->num = q->num + r->num1;
- q->sum = q->sum + r->num1;
- }
- }
- q = q->next;
- }
- printf("请输入第2名所来自的学校的名字和他该项目的成绩:\n");
- scanf("%s%d", &r->sch2, &r->num2);
- q = L1->next;
- for (j = 1; j <= n; j++)
- {
- if (strcmp(r->sch2, q->sch) == 0)
- {
- if (x == 1)
- {
- q->num = q->num + r->num2;
- q->sum += r->num2;
- }
- if (x == 2)
- {
- q->num += r->num2;
- q->sum += r->num2;
- }
- }
- q = q->next;
- }
- printf("请输入第3名所来自的学校的名字和他该项目的成绩:\n");
- scanf("%s%d", &r->sch3, &r->num3);
- q = L1->next;
- for (j = 1; j <= n; j++)
- {
- if (strcmp(r->sch3, q->sch) == 0)
- {
- if (x == 1)
- {
- q->num = q->num + r->num3;
- q->sum += r->num3;
- }
- if (x == 2)
- {
- q->num += r->num3;
- q->sum += r->num3;
- }
- }
- q = q->next;
- }
- if (x == 2)
- {
- printf("请输入第4名所来自的学校的名字和他该项目的成绩:\n");
- scanf("%s%d", &r->sch4, &r->num4);
- q = L1->next;
- for (j = 1; j <= n; j++)
- {
- if (strcmp(r->sch4, q->sch) == 0)
- {
- q->num = q->num + r->num4;
- q->sum += r->num4;
- }
- q = q->next;
- }
- printf("请输入第5名所来自的学校的名字和他该项目的成绩:\n");
- scanf("%s%d", &r->sch5, &r->num5);
- q = L1->next;
- for (j = 1; j <= n; j++)
- {
- if (strcmp(r->sch5, q->sch) == 0)
- {
- q->num = q->num + r->num5;
- q->sum += r->num5;
- }
- q = q->next;
- }
- }
- r = r->next;
- }
- p = L1->next;
- printf("参加这次比赛的学校的成绩为:\n");
- for (i = 0; i < n; i++)
- {
- printf("%s:总分:%d分,男子团体总分:%d,女子团体总分:%d分\n", p->sch, p->num, p->schsum, p->sum);
- p = p->next;
- }
- schoolrankings(L1, n);
- manrankings(L1, n);
- womanrankings(L1, n);
- }
- } while (z != 4);
- printf("\n");
- return 0;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。