完成程序《大奖赛评分B》
学习目标:
- 使用代码完成程序《大奖赛评分B》
题目:
- 如今许多歌手大奖赛评分时,为了体现公平,在评委给出分数后统计平均得分时,都会去掉最高分和最低分。
- 编写程序,读入评委打分(分数都是大于0的整数,评委人数大于等于5,小于等于50),去掉两个最高分和两个最低分,计算并输出平均得分(小数点后保留两位有效数字)。
逻辑:
- 由题意得:此程序要求能够找到一个数组中的两个最大值和两个最小值,因此要对数组进行排序,用循环分支语句进行判断。
- 其次要去统计平均得分,说明分数要是浮点类型。
- 最后关注到要保留两位小数,按要求打印即可。
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>void print_arr(int arr[],int num)
{for (int j = 0; j < num; j++){printf("%d ", arr[j]);}printf("\n");
}int cmp_int(const void* e1, const void* e2)
{return *(int*)e1 - *(int*)e2;
}int main()
{char str[200] = { 0 };int arr[50] = { 0 };float num = 0;int sum = 0;gets(str);int i, j = 0, k = 0;for (i = 0; str[i] != '-'; i++) {if (str[i] >= '0' && str[i] <= '9') {arr[j] = arr[j] * 10 + (str[i] - '0');}else if (str[i] == ' ' && k < 50) {j++;k++;}}qsort(arr, 50, sizeof(int), cmp_int);int u = 0;for (int j = 0; j < 50; j++){if (arr[j] != 0){if (u > 1 && j < 48){sum += arr[j];num++;}u++;}}float average = (float)sum / num;printf("%.2f\n", average);return 0;
}
完