您好,登录后才能下订单哦!
歌手比赛系统是一个用于管理歌手比赛信息的应用程序,它可以帮助评委、选手和观众更好地参与比赛。本文将介绍如何使用C语言实现一个简单的歌手比赛系统。
在开始编写代码之前,我们需要明确系统的基本功能需求。一个简单的歌手比赛系统通常包括以下功能:
为了实现上述功能,我们需要设计合适的数据结构来存储选手信息和评委打分。
#define MAX_JUDGES 5 // 假设有5位评委
#define MAX_CONTESTANTS 100 // 假设最多有100位选手
typedef struct {
int id;
char name[50];
int age;
char gender;
float scores[MAX_JUDGES];
float finalScore;
} Contestant;
id
:选手的唯一标识符。name
:选手的姓名。age
:选手的年龄。gender
:选手的性别。scores
:评委打分的数组。finalScore
:选手的最终得分。首先,我们需要实现一个函数来录入选手的基本信息。
void inputContestantInfo(Contestant *contestant) {
printf("Enter contestant ID: ");
scanf("%d", &contestant->id);
printf("Enter contestant name: ");
scanf("%s", contestant->name);
printf("Enter contestant age: ");
scanf("%d", &contestant->age);
printf("Enter contestant gender (M/F): ");
scanf(" %c", &contestant->gender);
}
接下来,我们需要实现一个函数来录入评委的打分。
void inputScores(Contestant *contestant) {
printf("Enter scores for contestant %s:\n", contestant->name);
for (int i = 0; i < MAX_JUDGES; i++) {
printf("Judge %d: ", i + 1);
scanf("%f", &contestant->scores[i]);
}
}
为了计算选手的最终得分,我们需要去掉一个最高分和一个最低分,然后计算剩余分数的平均值。
void calculateFinalScore(Contestant *contestant) {
float sum = 0;
float min = contestant->scores[0];
float max = contestant->scores[0];
for (int i = 0; i < MAX_JUDGES; i++) {
sum += contestant->scores[i];
if (contestant->scores[i] < min) min = contestant->scores[i];
if (contestant->scores[i] > max) max = contestant->scores[i];
}
contestant->finalScore = (sum - min - max) / (MAX_JUDGES - 2);
}
为了对选手进行排名,我们可以使用简单的排序算法(如冒泡排序)来根据最终得分对选手进行排序。
void sortContestants(Contestant contestants[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (contestants[j].finalScore < contestants[j + 1].finalScore) {
Contestant temp = contestants[j];
contestants[j] = contestants[j + 1];
contestants[j + 1] = temp;
}
}
}
}
最后,我们需要实现将选手信息和比赛结果保存到文件中,并可以从文件中读取数据。
void saveToFile(Contestant contestants[], int n, const char *filename) {
FILE *file = fopen(filename, "w");
if (file == NULL) {
printf("Error opening file!\n");
return;
}
for (int i = 0; i < n; i++) {
fprintf(file, "%d %s %d %c ", contestants[i].id, contestants[i].name, contestants[i].age, contestants[i].gender);
for (int j = 0; j < MAX_JUDGES; j++) {
fprintf(file, "%.2f ", contestants[i].scores[j]);
}
fprintf(file, "%.2f\n", contestants[i].finalScore);
}
fclose(file);
}
void loadFromFile(Contestant contestants[], int *n, const char *filename) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
printf("Error opening file!\n");
return;
}
*n = 0;
while (fscanf(file, "%d %s %d %c", &contestants[*n].id, contestants[*n].name, &contestants[*n].age, &contestants[*n].gender) != EOF) {
for (int j = 0; j < MAX_JUDGES; j++) {
fscanf(file, "%f", &contestants[*n].scores[j]);
}
fscanf(file, "%f", &contestants[*n].finalScore);
(*n)++;
}
fclose(file);
}
在主程序中,我们可以将这些功能组合起来,实现一个完整的歌手比赛系统。
int main() {
Contestant contestants[MAX_CONTESTANTS];
int n = 0;
int choice;
do {
printf("\n1. Add Contestant\n");
printf("2. Input Scores\n");
printf("3. Calculate Final Scores\n");
printf("4. Display Rankings\n");
printf("5. Save to File\n");
printf("6. Load from File\n");
printf("0. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
inputContestantInfo(&contestants[n]);
n++;
break;
case 2:
for (int i = 0; i < n; i++) {
inputScores(&contestants[i]);
}
break;
case 3:
for (int i = 0; i < n; i++) {
calculateFinalScore(&contestants[i]);
}
break;
case 4:
sortContestants(contestants, n);
for (int i = 0; i < n; i++) {
printf("%d. %s - %.2f\n", i + 1, contestants[i].name, contestants[i].finalScore);
}
break;
case 5:
saveToFile(contestants, n, "contestants.txt");
break;
case 6:
loadFromFile(contestants, &n, "contestants.txt");
break;
case 0:
printf("Exiting...\n");
break;
default:
printf("Invalid choice!\n");
}
} while (choice != 0);
return 0;
}
通过以上步骤,我们实现了一个简单的歌手比赛系统。这个系统可以管理选手信息、录入评委打分、计算最终得分、进行成绩排名,并且可以将数据保存到文件中或从文件中读取数据。虽然这个系统相对简单,但它展示了如何使用C语言来实现一个基本的应用程序。你可以在此基础上进一步扩展功能,例如增加更多的评委、支持更多的选手、添加更多的比赛规则等。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。