函数题
6-1 歌唱比赛打分 (8分)
某歌唱比赛计分规则是:对于评委给出的分数,去掉一个最高分,去掉一个最低分,剩余分数求算术平均值并保留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
答案
double getScore(int *score, int total){
int i,max,min;
double sum = 0;
max = *score;
min = *score;
for(i = 0; i < total; i++){
if(*(score + i) < min)
min = *(score + i);
if(*(score + i) > max)
max = *(score + i);
sum += *(score + i);
}
sum = sum - min -max;
sum