用C语言写一个运动会分数统计系统任务:参加运动会有n个学校,学校编号为....n.比寒分成m个男子项目,和w个女子项目。项目编号为男子1.....女子m+1..... m+wo不同的项目取前五名或前三名积分;取前五名的积分分别为: 7、5、3、2、1, 前三名的积分分别为: 5、3、(m<=20,n<=20)可以输入各个项目的前三名或前五名的成绩;能统计各学校总分和排名且能保存数据
时间: 2024-03-12 13:47:57 浏览: 120
好的,下面是一个可以实现您要求的运动会分数统计系统的C语言代码,它可以输入各个项目的前三名或前五名的成绩,并能统计各学校总分和排名,同时还能将数据保存到文件中:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SCHOOL 20
#define MAX_PROJECT 50
#define MAX_RANK 5
typedef struct {
char name[20];
int score[MAX_RANK];
} athlete_t;
typedef struct {
char name[20];
int score;
} school_t;
int compare_school(const void *a, const void *b) {
school_t *pa = (school_t *)a;
school_t *pb = (school_t *)b;
if (pa->score > pb->score) {
return -1;
} else if (pa->score < pb->score) {
return 1;
} else {
return 0;
}
}
int compare_athlete(const void *a, const void *b) {
athlete_t *pa = (athlete_t *)a;
athlete_t *pb = (athlete_t *)b;
if (pa->score[0] > pb->score[0]) {
return -1;
} else if (pa->score[0] < pb->score[0]) {
return 1;
} else {
return 0;
}
}
int main() {
int i, j, k, n, m, w;
athlete_t athletes[MAX_SCHOOL][MAX_PROJECT];
school_t schools[MAX_SCHOOL];
printf("请输入学校数:");
scanf("%d", &n);
printf("请输入男子项目数:");
scanf("%d", &m);
printf("请输入女子项目数:");
scanf("%d", &w);
// 输入各个项目的前三名或前五名的成绩
for (i = 0; i < n; i++) {
printf("请输入第%d个学校的名称:", i + 1);
scanf("%s", schools[i].name);
schools[i].score = 0;
for (j = 0; j < m + w; j++) {
printf("请输入第%d个学校的第%d个选手的名称:", i + 1, j + 1);
scanf("%s", athletes[i][j].name);
for (k = 0; k < MAX_RANK; k++) {
athletes[i][j].score[k] = 0;
}
if (j < m) {
printf("请输入第%d个学校的第%d个男子项目的前%d名成绩:", i + 1, j + 1, MAX_RANK);
} else {
printf("请输入第%d个学校的第%d个女子项目的前%d名成绩:", i + 1, j - m + 1, MAX_RANK);
}
for (k = 0; k < MAX_RANK; k++) {
scanf("%d", &athletes[i][j].score[k]);
if (athletes[i][j].score[k] > 0) {
if (k < 3) {
schools[i].score += 5 - k * 2;
} else if (k < 5) {
schools[i].score += 2 - (k - 3);
}
}
}
}
}
// 统计各学校总分和排名
qsort(schools, n, sizeof(school_t), compare_school);
printf("学校名\t总分\t排名\n");
for (i = 0; i < n; i++) {
printf("%s\t%d\t%d\n", schools[i].name, schools[i].score, i + 1);
}
// 将数据保存到文件中
FILE *fp = fopen("score.txt", "w");
if (fp == NULL) {
printf("无法打开文件!\n");
return 1;
}
for (i = 0; i < n; i++) {
fprintf(fp, "%s %d\n", schools[i].name, schools[i].score);
}
fclose(fp);
printf("学校信息已保存到文件中!\n");
return 0;
}
```
这个程序会要求用户输入学校数、男子项目数和女子项目数,然后会依次要求输入各个项目的前三名或前五名的成绩,并根据规则计算各学校的总分和排名。最后,程序会将数据保存到一个名为“score.txt”的文件中。您可以根据您的需要修改这个程序。
阅读全文