C语言实现数据结构之运动会分数统计
时间: 2024-09-13 18:02:29 浏览: 56
在C语言中,我们可以创建一个简单的数据结构来存储运动会的比赛分数,并提供函数来进行统计。一种常见的做法是使用链表或者数组结合结构体。这里是一个简化的例子,我们假设有一个`Athlete`结构体来存储运动员的信息以及一个`Score`结构体来表示单场比赛的得分:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义运动员信息结构体
typedef struct Athlete {
char name[50];
int id;
} Athlete;
// 定义比赛得分结构体
typedef struct Score {
Athlete* athlete; // 指向运动员的指针
int event_score; // 每项赛事的得分
} Score;
// 动态分配内存并初始化一个新的运动员
Athlete* createAthlete(char* name, int id) {
Athlete* newAthlete = (Athlete*)malloc(sizeof(Athlete));
strcpy(newAthlete->name, name);
newAthlete->id = id;
return newAthlete;
}
// 创建一个新的比赛得分
Score* createScore(Athlete* athlete, int score) {
Score* newScore = (Score*)malloc(sizeof(Score));
newScore->athlete = athlete;
newScore->event_score = score;
return newScore;
}
// 统计总分
int totalScore(Score* scores, int numScores) {
int total = 0;
for (int i = 0; i < numScores; i++) {
total += scores[i].event_score;
}
return total;
}
// 主函数示例
int main() {
Athlete* athletes[3] = {createAthlete("张三", 1), createAthlete("李四", 2), createAthlete("王五", 3)};
Score* scores[3] = {createScore(athletes[0], 90), createScore(athletes[1], 85), createScore(athletes[2], 95)};
int numAthletes = sizeof(athletes)/sizeof(athletes[0]);
int total = totalScore(scores, numAthletes);
printf("总分统计结果: %d\n", total);
// 清理内存
for (int i = 0; i < numAthletes; i++) {
free(athletes[i]);
}
for (int i = 0; i < numAthletes; i++) {
free(scores[i]->athlete);
free(scores[i]);
}
return 0;
}
```
在这个例子中,我们首先定义了运动员和比赛得分的数据结构,然后创建了一些实例并统计它们的总分。最后别忘了释放动态分配的内存以避免内存泄漏。
阅读全文