1. 题目描述
歌手大奖赛计分程序
(1)在歌手大奖赛中,有n位评委为参赛的选手打分,分数为0~10分(运行时由人输入)。选手最后得分为:去掉一个最高分和一个最低分后其余分数的平均值。请编写一个程序,完成相关的功能。
要求利用一个函数voidcalScore(int n),对一位选手成绩的输入成绩、计算和显示实现,其中n为评委人数。这样,在main函数调用时,需要将输入的评委人数n作为实参。
(2) 进一步完善(1)的程序。输入时,难免有录入错误发生,如果输入的成绩不在0-10之间,要求用户立即重新输入(在函数calScore中修改);一次运 行程序只计算一位选手成绩太麻烦,要求输出当前选手的最后得分后,提示“按任意键计算下一位选手的成绩,退出请选择N:”如果输入的不是N或n,可以为下 一位选手计算成绩(在main函数中进行控制即可)。
/*烟台大学计算机学院 2016
作者: 马春澎
完成日期:2017年1月4日 */
#include <stdio.h>
#include <stdlib.h>
void calScore(int n);//定义函数
int main()
{
int n;
char choose,huanhang;
do
{
system("cls");//清空屏幕数据
printf("输入评委人数(大于2人):");//因为要减去最高分和最低分所以评委数应大于2人
scanf("%d",&n);
if(n<3)
continue;//输入的数小于3时,循环重新执行
calScore(n);//进入函数
printf("按N或n退出,其他键继续...\n");
scanf("%c%c",&huanhang,&choose);//输入换行后再进行操作
}
while(choose!='n'&&choose!='N');//当选择n或N时跳出循环
return 0;
}
/*************************************************************
功能描述:输入选手得分,并处理,输出最终得分
输入参数:n—评委人数
返 回 值:无
其他说明:无
*************************************************************/
void calScore(int n)
{
float score,max=-1,min=11,end_Score,sum_Score=0;//先定义最高分为-1,最低分为11
int i,count=0;
printf("请输入选手的成绩(0-10)\n");
for(i=1; i<=n; i++)
{
while(1)//死循环
{
printf("第 %d 位评委给分:",i);
scanf("%f",&score);
if(score<0||score>10)//分数小于0或大于10时执行空语句,循环继续执行
{
}
else
{
if(max<score)
max=score;
if(score<min)
min=score;
sum_Score=score+sum_Score;
count++;
}
if(i==count) break;//当输入的数和评委数相同时跳出循环
}
}
end_Score=(sum_Score-max-min)/(n-2);//最后得分
printf("减去一个最高分:%.2f, 减去一个最低分:%.2f\n",max,min);
printf("当前选手的最后得分为:%.3f\n",end_Score);//输出最后得分
printf("************************************SUCCESS************************************\n");
}
知识点总结
循环的综合应用
学习心得
要注意输入的数小于0或大于10时对数据的处理,要重新输入正确的数。