英文金曲大赛


Problem Description
我们在“渊子数”的题目中已经了解了渊子是个什么样的人了,他在大一的时候参加过工商学院的“英语聚乐部”。告诉你个秘密,这个俱乐部是个好地方,不但活动精彩而且有MM。
这不,英语俱乐部举办了一个叫做“英文金曲大赛”的节目。这个节目有好多人参加,这不,成绩出来了,渊子当是很勇敢,自告奋勇接下了算出大家的总得分的任务。 
当时有7个评委,每个评委都要给选手打分,现在要求去掉一个最高分和去掉一个最低分,再算出平均分。结果精确到小数点后两位。
Input
测试数据包括多个实例。
每组数据包括7个实数,代表评委们对该选手的评分。紧接着是选手的名字,名字的长度不超过30个字符,且没有空格。 
输入直到文件结束。
Output
算出每位选手名字和最终得分,结果保留两位小数。
Sample Input
10 10 10 10 10 10 9 xiaoyuanwang
0 0 0 0 0 0 0 beast
Sample Output
xiaoyuanwang 10.00
beast 0.00
#include <stdio.h>
#include <string.h>
struct hh
{
    double s;
    char name [31];
} ju[1001];
int main ()
{
    double max, min, t, sum;
    int i;
    while (~scanf("%lf", &t))
    {
        max = min = t;
        sum = 0;
        ju[0].s = t;
        for (i = 1 ; i < 7 ; i++)
        {
            scanf("%lf", &ju[i].s);
            if (max < ju[i].s)
            {
                max = ju[i].s;
            }
            if (min > ju[i].s)
            {
                min = ju[i].s;
            }
                sum +=ju[i].s;
        }
        sum += ju[0].s;
        t = (sum - max - min)/5.00;
        scanf("%s" , ju[7].name);
        printf("%s %.2lf\n" , ju[7].name , t);
    }
    return 0;
}
题目描述涉及一个编程任务,即为"英文金曲歌唱大赛"活动中计算每位选手的最终得分。在这个比赛中,每个参赛者都会从五位评委那里获得分数。为了保证评分公正,你需要按照以下步骤计算每人的平均分: 1. **数据收集**:获取每位选手的五个原始评分。 2. **处理最高分和最低分**:找出每份评分中的最高分和最低分并删除它们。 3. **重新计算平均分**:用剩下的三个分数相加,然后除以3,得到新的平均分。 4. **四舍五入**:确保结果保留两位小数。 这是一个典型的数组操作和数学运算的问题,在C语言中可以通过循环结构(如`for`或`while`)以及动态内存管理来实现。下面是简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> double calculate_average(int* scores, int num_scores) { // 检查是否有足够的评委分数 if (num_scores < 5) { printf("Error: Not enough scores provided.\n"); return 0; } // 排序评委分数 qsort(scores, num_scores, sizeof(int), compare_scores); // 去掉最高分和最低分 int* adjusted_scores = malloc((num_scores - 2) * sizeof(int)); for (int i = 2; i < num_scores; i++) { adjusted_scores[i - 2] = scores[i]; } // 计算平均分 double average = 0; for (int i = 0; i < num_scores - 2; i++) { average += adjusted_scores[i]; } average /= (double)(num_scores - 2); // 返回平均分并释放内存 free(adjusted_scores); return round_to_two_decimal_places(average); } // 辅助函数,用于排序和比较分数 int compare_scores(const void* a, const void* b) { return *(int*)a - *(int*)b; } // 四舍五入到小数点后两位的辅助函数 double round_to_two_decimal_places(double num) { return num < 0 ? floor(num * 100 + 0.5) / 100 : ceil(num * 100) / 100; } // 示例用法 int main() { int scores[5]; // 假设这里有5个分数 // ...(填充分数) double result = calculate_average(scores, 5); printf("The average score after removing highest and lowest is: %.2f\n", result); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值