完成程序《大奖赛评分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;
}
完