C语言题:十个评委给歌手打分,去掉一个最高分与最低分求最后得分

如题所述

#include <stdio.h>
#include <conio.h>

#define ARR_LEN 255 /*数组长度上限*/
#define elemType float /*元素类型*/

/* 冒泡排序 */
/* 1. 从当前元素起,向后依次比较每一对相邻元素,若逆序则交换 */
/* 2. 对所有元素均重复以上步骤,直至最后一个元素 */
/* elemType arr[]: 排序目标数组; int len: 元素个数 */
void bubbleSort (elemType arr[], int len) {
elemType temp;
int i, j;
for (i=0; i<len-1; i++) /* 外循环为排序趟数,len个数进行len-1趟 */
for (j=0; j<len-1-i; j++) { /* 内循环为每趟比较的次数,第i趟比较len-i次 */
if (arr[j] > arr[j+1]) { /* 相邻元素比较,若逆序则交换(升序为左大于右,逆序反之) */
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}

/* 输入数组 */
/* arr[]: 输入目标数组; len: 元素个数 */
void inputArray (elemType arr[], int len) {
int i;
for (i=0; i<len; i++)
scanf ("%f", &arr[i]);
putchar ('\n');
}

/* 打印数组内容 */
/* arr[]: 打印目标数组; len: 元素个数 */
void printArray (elemType arr[], int len) {
int i;
for (i=0; i<len; i++)
printf ("%.1f\t", arr[i]);
putchar ('\n');
}

/* 去掉一个最高分,去掉一个最低分,然后求平均分 */
/* arr[]: 目标数组; len: 元素个数 */
void calcArray (elemType arr[], int len, elemType *max, elemType *min, float *avg) {
int i;
elemType sum; 
bubbleSort (arr, len); /* 对数组排序,此后首、尾两元素即待被去掉的一个最高分、一个最低分 */
*max = arr[len-2];
*min = arr[1];
sum = *avg = 0;
for (i=1; i<len-1; i++)
sum += arr[i];
*avg = sum / (len-2);
}

int main (void) {
//elemType score[ARR_LEN]; /* 成绩数组 */
elemType score[ARR_LEN] = {95.0,88.0,72.0,96.0,74.0};
int len = 5; /* 5名评委 */
elemType max, min, avg; /* 最高分、最低分、平均分 */
int i;

//printf ("输入%d名评委打分:\n", len);
//inputArray (score, len);

printf ("%d名评委打分:\t", len);
printArray (score, len);
calcArray (score, len, &max, &min, &avg);
printf ("去掉一个最高分:\t%.1f分\n去掉一个最低分:\t%.1f分\n此名选手最终得分:\t%.1f分", max, min, avg);

getch (); /*屏幕暂留*/
return 0;
}

温馨提示:答案为网友推荐,仅供参考