PTA 7-20-02 体能成绩统计(统计总成绩)

体能考试结束后,输入n名男生(不超过40名)的姓名和体能成绩,包括引体向上、蛇形跑、3公里和仰卧起坐,输出每名学生的姓名和总成绩,并输出引体向上最高分学生姓名和成绩(如果成绩相同,输出按原先顺序排列的第一个最高分)。

输入格式:

人数

姓名1 引体向上成绩 蛇形跑成绩 3公里成绩 仰卧起坐成绩
姓名2 引体向上成绩 蛇形跑成绩 3公里成绩 仰卧起坐成绩

……

输出格式:

姓名1:总成绩

姓名2:总成绩

……

引体向上最高分:姓名 成绩

输入样例:

4
张三 60 70 80 90
李四 80 88 98 90
王五 58 70 70 89
朱六 70 80 88 94

输出样例:

张三:300
李四:356
王五:287
朱六:332
引体向上最高分:李四 80
#include<stdio.h>
struct student
    {
        char name[30];
        int lift,sx,km_3,yw;
     }student[50];
int main()
{    int i,j,k,w;
    scanf("%d",&j);
    for(i=0;i<j;i++)
    scanf("%s%d%d%d%d",student[i].name,&student[i].lift,&student[i].sx,&student[i].km_3,&student[i].yw);
    for(i=0;i<j;i++)
    {   w=student[i].lift+student[i].sx+student[i].km_3+student[i].yw;
        printf("%s:%d\n
### 使用C语言函数实现军事体能成绩统计并按总分排 为了实现军事体能成绩统计,可以定义一个结构来存储每位学生的信息,并编写多个辅助函数来进行数据处理。以下是完整的解决方案: #### 结构定义 ```c #include <stdio.h> #define MAX_STUDENTS 10 typedef struct { char name[20]; int pull_ups; // 向上 float zigzag_run; // 蛇形跑 () float three_km; // 3公里跑步时间 (分钟) int situps; // 仰卧起坐 } Student; ``` #### 函数声明 ```c void input_students(Student students[], int n); float calculate_total_score(const Student *student); void find_max_scores(const Student students[], int n, float max_scores[]); void sort_by_total_score(Student students[], int n); void output_results(const Student students[], const float max_scores[]); ``` #### 主程序逻辑 ```c int main() { int n; printf("请输入学生人数: "); scanf("%d", &n); if (n <= 0 || n > MAX_STUDENTS) { printf("输入学生数超出范围!\n"); return 1; } Student students[n]; input_students(students, n); // 输入学生成绩 float max_scores[] = {0}; // 初始化最大分数数组 find_max_scores(students, n, max_scores); // 查找各项目最高分 sort_by_total_score(students, n); // 按照总分排序 output_results(students, max_scores); // 输出结果 return 0; } ``` #### 辅助函数实现 ```c // 输入学生信息 void input_students(Student students[], int n) { for(int i=0;i<n;++i){ printf("\n第%d位同学:\n", i+1); printf("姓名:"); scanf("%s",students[i].name); printf("向上次数:"); scanf("%d",&(students[i].pull_ups)); printf("蛇形跑用时(s):"); scanf("%f",&(students[i].zigzag_run)); printf("三公里跑耗时(min):"); scanf("%f",&(students[i].three_km)); printf("一分钟内完成多少次仰卧起坐:"); scanf("%d",&(students[i].situps)); } } // 计算单个学生的总得分 float calculate_total_score(const Student *student) { return student->pull_ups + ((60 / student->zigzag_run)*10) + ((60 / student->three_km)*5) + student->situps; } // 找到各个项目的最高分 void find_max_scores(const Student students[], int n, float max_scores[]) { max_scores[0] = 0; // 向上的最高分 max_scores[1] = 9999.0f; // 蛇形跑最低记录时间转换成高分 max_scores[2] = 9999.0f; // 3公里跑最低记录时间转换成高分 max_scores[3] = 0; // 仰卧起坐最高分 for (int i = 0; i < n; ++i) { if (students[i].pull_ups > max_scores[0]) max_scores[0] = students[i].pull_ups; if (students[i].zigzag_run < max_scores[1]) max_scores[1] = students[i].zigzag_run; if (students[i].three_km < max_scores[2]) max_scores[2] = students[i].three_km; if (students[i].situps > max_scores[3]) max_scores[3] = students[i].situps; } } // 对所有学生按照总分降序排列 void sort_by_total_score(Student students[], int n) { for (int i = 0; i < n - 1; ++i) { for (int j = 0; j < n - 1 - i; ++j) { if (calculate_total_score(&students[j]) < calculate_total_score(&students[j + 1])) { Student temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } } } // 输出最终的结果 void output_results(const Student students[], const float max_scores[]) { printf("\n=== 成绩汇总 ===\n"); for (int i = 0; i < sizeof(max_scores)/sizeof(float)-1 ; ++i) { switch(i){ case 0 : printf("向上最高分为:%.0f\n",max_scores[i]); break; case 1 : printf("最短蛇形跑时间为:%fs\n",max_scores[i]); break; case 2 : printf("最快3公里跑为:%fm\n",max_scores[i]); break; case 3 : printf("最多仰卧起坐数量为:%.0f\n",max_scores[i]); break; } } printf("\n--- ---\n"); for (int i = 0; i < n; ++i) { printf("#%d %s 总得分为 %.2f 分\n", i + 1, students[i].name, calculate_total_score(&students[i])); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值