某歌唱比赛计分规则是:对于评委给出的分数,去掉一个最高分,去掉一个最低分,剩余分数求算术平均值并保留2位小数,作为选手最终得分。
本题要求实现这样一个计分函数。
评委给出的分数存在数组中,分数均为0~100
之间的整数,并且保证评委人数在3~20
之间。函数接口定义:
double getScore(int *score, int total);
其中
score
和total
是传入的参数,score
是评委打分数组的首地址,total
是评委人数;
函数将选手的得分以double
类型返回,注意:函数返回的分数只需保证小数点后至少2位精确数字即可,打印2位小数得分的操作由函数调用者进行。裁判测试程序样例:
/* 此测试程序仅为示例,实际的测试程序可能不同,不要仅针对样例的输入和输出编写函数,而是要根据题意要求编写函数 */ #include <stdio.h> double getScore(int *score, int total); int main(){ int score[5] = {92, 90, 99, 95, 98}; /* 仅为示例,实际的测试程序中,数组大小和元素数值都可能与样例不同 */ printf("%.2f\n", getScore(score, 5) ); /* getScore( )函数只负责返回分值,由main函数中的代码负责按照2位小数打印输出 */ return 0; } /* 你所编写的函数代码将被嵌在这里,注意:不要提交你编写的用于测试的main( )函数,否则无法通过编译 */
输入样例:
对于本题给出的裁判测试程序样例,没有输入。实际的裁判程序可能有输入。
输出样例:
对于本题给出的裁判测试程序样例,只有一行输出如下。实际的裁判程序可能有其他输出情况。 95.00
作者:周强
代码长度限制:16 KB
时间限制:400 ms
内存限制:64 MB
题目分析
1.计算方法——总分(去掉最高分和最低分的总分)/保留分数的个数(total-2)
2.找出最高分和最低分——排序(这里可以采用简单的冒泡排序)——for循环嵌套
3.for循环对剩余的成绩求和,再除以个数得出最终结果。
double getScore(int *score, int total) { int i,j,t; //对裁判评分进行升序排列——为后续去掉最高分和最低分做准备——此处为冒泡排序 for(i=0;i<total;i++) { for(j=i;j<total-1;j++) { if(score[j]>score[j+1])//通过数组下标对内部元素访问比较方便 { t=score[j]; score[j]=score[j+1]; score[j+1]=t; } } } double s=0,ans=0; for(i=1;i<total-1;i++)//对除最高分和最低分外的分数求和 s+=score[i]; ans=s/(total-2);//计算平均分 return ans; }