Copyright (c) 2016, 烟台大学计算机与控制学院 All ringts reserved. 文件名称:歌手大奖赛计分程序 作 者:王兴振 完成日期:2016年1月5日 版 本 号:未知 题目描述:
(1)在歌手大奖赛中,有n位评委为参赛的选手打分,分数为0~10分(运行时由人输入)。选手最后得分
为:去掉一个最高分和一个最低分后其余分数的平均值。请编写一个程序,完成相关的功能。
要求利用一个函数voidcalScore(int n),对一位选手成绩的输入成绩、计算和显示实现,其中n为评委人数。
这样,在main函数调用时,需要将输入的评委人数n作为实参。
(2) 进一步完善(1)的程序。输入时,难免有录入错误发生,如果输入的成绩不在0-10之间,要求用户立即重新输入(在函数calScore中修改);一次运 行程序只计算一位选手成绩太麻烦,要求输出当前选手的最后得分后,提示“按任意键计算下一位选手的成绩,退出请选择N:”如果输入的不是N或n,可以为下 一位选手计算成绩(在main函数中进行控制即可)。
输 入:
评委打的分数。
输 出:
减去最低分和最高分后得分。
样例输入:
8.7
9.3
10.2
9.2
-2.3
2.3
6.5
8.9
7.4
样例输出:
减去一个最高分:9.30 减去一个最低分2.30
最终得分为:8.140.
答 案:
/************************************************************* 功能描述:为歌手大奖赛计分 输入参数:n-评委数量。 min,max,sum,array-最小值,最大值,和,最终成绩。 z-字符,判断是否继续。 返 回 值:最高分,最低分和最终得分。 其他说明:无 *************************************************************/ #include <stdio.h> #include <stdlib.h> #include <conio.h>//包含输入字符不回显得函数。 void calScore(int n);//计算输出得分。 int main() { int n,a=0;//a保证第一次不用判断。 char pan='z';//判断是否继续。 do { if(a==1) { printf("\n****************** SUCCESS ******************\n"); printf("按任意键继续,按N或n退出\n"); pan=getch(); } if(pan=='n' || pan=='N') break; while(1) { printf("请输入评委数量(不小于3):"); scanf("%d", &n); if(n<3) printf("评委人数超限!\n"); else break; } calScore(n); a=1; } while(1); return 0; } void calScore(int n) { int i; double fen,min=10,max=0,sum,array; sum=0;//初始化。 void assess(double); printf("请输入选手成绩(0-10)\n"); for(i=1; i<=n; i++) { printf("第%d位评委给分:", i); scanf("%lf", &fen); if(fen<=10 && fen>=0)//判断分数范围。 { if(fen>max) max=fen; if(fen<min) min=fen; sum=sum+fen; }//判断最大最小值并保存。 else { printf("输入超限,请重新输入!\n"); i--; } } printf("减去一个最高分:%.2f 减去一个最低分:%.2f\n", max,min); sum=sum-max-min; array=sum/(n-2); printf("此选手最后成绩为:%.3f\n", array); assess(array); } void assess(double array) { printf("\n"); if(array>=9) printf("你是歌神!"); if(array>=8 && array<9) printf("你已经很厉害了"); if(array>=6 && array<8) printf("加油哦,你可以更进一步!"); if(array<6) printf("其实别的职业也不错!"); }
