c语言编程 要求设计一个校园主持人大赛成绩管理系统,以菜单选项的方式完成相应的 功能,主要功能需求如下: + (1)参赛选手比赛成绩录入+ 设参加比赛的选手不超过50人,有7位现场评委对选手的综合表现打分, 每位选手比赛结束后,要求通过该系统录入比赛成绩,信息录入参考如下格式: 选手编号:1. 姓名:李小萌, 评委成绩1:95. 评委成绩2:90. 评委成绩3:98. 评委成绩4:89. 评委成绩5:86. 评委成绩6:92. 评委成绩7:96- 录入一名选手的成绩后,程序应提示是否录入下一项(Y/N),以便用户可以 录入多条记录,信息录入完毕后数据写入文件。 (2)参赛选手综合成绩计算。 从文件中读取参赛选手信息,从7名现场评委的成绩中去掉一个最高分、去 掉一个最低分,取剩下5个成绩的平均值作为选手的最后成绩,要求显示各选手 的详细得分和综合成绩。 (3)参赛选手成绩排名。 根据参赛选手的最后得分,按得分从高到低的顺序输出所有参赛选手的得分

时间: 2024-03-25 20:36:03 浏览: 19
好的,这是一个简单的校园主持人大赛成绩管理系统,主要有三个功能:录入比赛成绩、计算综合成绩以及排名。这里给出C语言的实现思路,希望能对你有所帮助。 首先,我们需要定义一个结构体来保存选手信息,包括编号、姓名和7名评委的成绩。代码如下: ```c struct player { int id; // 选手编号 char name[20]; // 选手姓名 float score[7]; // 评委成绩 float final_score; // 最终得分 }; ``` 接下来,我们需要实现三个主要功能。 1. 录入比赛成绩。 这个功能需要从用户输入中读取选手信息,并将其写入文件中。可以使用循环来实现多次录入,直到用户选择不再录入为止。代码如下: ```c void input_score() { FILE* fp = fopen("player.txt", "a"); // 打开文件,以追加模式写入 if (fp == NULL) { printf("File open failed!\n"); return; } struct player p; char choice; do { printf("请输入选手编号:"); scanf("%d", &p.id); printf("请输入选手姓名:"); scanf("%s", p.name); for (int i = 0; i < 7; i++) { printf("请输入第%d位评委的成绩:", i+1); scanf("%f", &p.score[i]); } fwrite(&p, sizeof(struct player), 1, fp); // 将选手信息写入文件中 printf("是否录入下一项(Y/N):"); scanf(" %c", &choice); } while (choice == 'Y' || choice == 'y'); fclose(fp); // 关闭文件 } ``` 2. 计算综合成绩。 这个功能需要从文件中读取选手信息,并计算出每个选手的最终得分。可以使用结构体数组来保存所有选手的信息,然后对每个选手的7个成绩排序,去掉一个最高分和一个最低分,再计算剩下5个成绩的平均值。最后将每个选手的最终得分保存到结构体数组中。代码如下: ```c void calculate_score() { FILE* fp = fopen("player.txt", "r"); // 打开文件,以只读模式读取 if (fp == NULL) { printf("File open failed!\n"); return; } struct player players[50]; int count = 0; while (fread(&players[count], sizeof(struct player), 1, fp) == 1) { // 从文件中读取选手信息 float sum = 0; float max_score = 0, min_score = 100; for (int i = 0; i < 7; i++) { sum += players[count].score[i]; if (players[count].score[i] > max_score) { max_score = players[count].score[i]; } if (players[count].score[i] < min_score) { min_score = players[count].score[i]; } } players[count].final_score = (sum - max_score - min_score) / 5; // 计算最终得分 count++; } fclose(fp); // 关闭文件 // 显示每个选手的详细得分和最终得分 for (int i = 0; i < count; i++) { printf("选手编号:%d 姓名:%s\n", players[i].id, players[i].name); printf("评委成绩:"); for (int j = 0; j < 7; j++) { printf("%.2f ", players[i].score[j]); } printf("\n最终得分:%.2f\n", players[i].final_score); } } ``` 3. 排名选手得分。 这个功能需要先调用上一个功能来计算每个选手的最终得分,然后按照最终得分从高到低对所有选手进行排序,并输出排名结果。可以使用快速排序算法来实现排序。代码如下: ```c int partition(struct player* players, int low, int high) { float pivot = players[high].final_score; int i = low - 1; for (int j = low; j < high; j++) { if (players[j].final_score >= pivot) { i++; struct player temp = players[i]; players[i] = players[j]; players[j] = temp; } } struct player temp = players[i+1]; players[i+1] = players[high]; players[high] = temp; return i + 1; } void quicksort(struct player* players, int low, int high) { if (low < high) { int pi = partition(players, low, high); quicksort(players, low, pi-1); quicksort(players, pi+1, high); } } void rank_score() { calculate_score(); // 先计算每个选手的最终得分 FILE* fp = fopen("rank.txt", "w"); // 打开文件,以写入模式写入 if (fp == NULL) { printf("File open failed!\n"); return; } struct player players[50]; int count = 0; fseek(fp, 0, SEEK_SET); // 将文件指针移到文件开头 while (fread(&players[count], sizeof(struct player), 1, fp) == 1) { // 从文件中读取选手信息 count++; } quicksort(players, 0, count-1); // 对所有选手按照最终得分从高到低排序 for (int i = 0; i < count; i++) { // 输出排名结果 fprintf(fp, "第%d名 选手编号:%d 姓名:%s 最终得分:%.2f\n", i+1, players[i].id, players[i].name, players[i].final_score); } fclose(fp); // 关闭文件 printf("排名结果已保存到rank.txt文件中\n"); } ``` 以上就是一个简单的校园主持人大赛成绩管理系统的实现。注意,在实际使用中还需要做好文件读写出错的处理,以及对用户输入的合法性进行检查等。

相关推荐

最新推荐

recommend-type

C语言实现班档案管理系统课程设计

主要为大家详细介绍了C语言实现班档案管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C语言实现车辆出租管理系统

主要为大家详细介绍了C语言实现车辆出租管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C语言实现简单航班管理系统

主要为大家详细介绍了C语言实现简单航班管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C语言实现餐饮结账管理系统

主要为大家详细介绍了C语言实现餐饮结账管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C语言程序设计+研究生复试+求职+面试题

汇总了计算机研究生复试有关C语言程序设计各章节简答题,使用了易于口头表达的语言进行了总结。包括C语言程序设计基本概念及各章节问题回答。可供研究生复试或相关专业岗位面试使用。如: 简述C语⾔采取了哪些措施提...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SQL怎么实现 数据透视表

SQL可以通过使用聚合函数和GROUP BY子句来实现数据透视表。 例如,假设有一个销售记录表,其中包含产品名称、销售日期、销售数量和销售额等信息。要创建一个按照产品名称、销售日期和销售额进行汇总的数据透视表,可以使用以下SQL语句: ``` SELECT ProductName, SaleDate, SUM(SaleQuantity) AS TotalQuantity, SUM(SaleAmount) AS TotalAmount FROM Sales GROUP BY ProductName, SaleDate; ``` 该语句将Sales表按照ProductName和SaleDat
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。