C語言OJ專案參考(2698) 大獎賽計分
阿新 • • 發佈:2019-02-05
(2698) 大獎賽計分
Description
在歌手大獎賽中,有9位評委為參賽的選手打分,分數為0~10分。選手最後得分為:去掉一個最高分和一個最低分後,取其餘7個分數的平均值。請編寫一個程式實現這個程式。
Input
9位評委給選手找的分,9個0-10之間的小數
Output
選手的最後得分,即9個成績中去掉一個最高,去掉一個最低後的平均成績。結果輸出中,保留3位小數。
Sample Input
9.8 6.7 8.9 7.6 4.5 6.5 7.8 4.2 6.4
Sample Output
6.914
[參考解答]
#include "stdio.h"
int main()
{
int i= 1;
double ave, score, sum, max, min;
max=-1;
min=11;
sum=0;
do
{
scanf("%lf", &score);
sum+=score;
if(max<score)
max=score;
if(min>score)
min=score;
i++;
}
while(i<=9);
ave = (sum-max-min)/7 ;
printf("%.3f\n", ave);
return 0;
}
如果看懂上面的解答有困難,閱讀並執行下面的程式可能會對你有幫助。
(1)基本要求:在歌手大獎賽中,有n個評委(至少3人)為參賽的選手打分,分數為1~10分。選手最後得分為:去掉一個最高分和一個最低分後其餘n-2個分數的平均值。請編寫一個程式實現。
#include <stdio.h>
#define n 10
int main( )
{
int i=1;
double ave, score, sum, max, min; //這幾個變數涉及成績,double是合理的
max=-1; //這兒有技巧,第1位評委給的成績一定大於-1,max將變成第1個成績
min=11; //同樣和技巧,要學會這樣“設圈套”
sum=0; //注意:這4個變數在迴圈內賦初值是必須的,這意味著計算某一選手成績的開始
printf("請輸入選手的成績(0-10)\n");
do //至少有一位評委,再用do迴圈
{
printf("第 %d 位評委給分:", i);
scanf("%lf", &score);
sum+=score;
if(max<score)
max=score; // 聯想上一層迴圈中max的初值,學會技巧
if(min>score)
min=score;
i++;
}
while(i<=n);
//下面開始計算
ave = (sum-max-min)/(n-2);
printf("減去一個最高分: %.3f\n", max);
printf(", 減去一個最低分: %.3f\n", min);
printf("當前選手的最後得分是:%.3f\n", ave);
printf("******************* SUCCESS ***********************\n");
return 0;
}
(2)上面的程式只能處理一位選手的成績,現拓展為多人版。輸出當前選手的最後得分後,提示“按任意鍵計算下一位選手的成績,退出請選擇N:”如果輸入的不是N或n,可以為下一位選手計算成績。
#include <stdio.h>
#define n 10
int main( )
{
int i;
double ave, score, sum, max, min;
char choice; //用於接受使用者選擇,字元型是合適的
do //計算選手的成績,至少1次,用do很自然,別的迴圈不用想
{
i=1; //i代表評委的編號,其實這個變數名起得不好
max=-1;
min=11;
sum=0;
printf("請輸入選手的成績(0-10)\n");
do
{
printf("第 %d 位評委給分:", i);
scanf("%lf", &score);
sum+=score;
if(max<score)
max=score;
if(min>score)
min=score;
i++;
}while(i<=n);
//下面開始計算
ave = (sum-max-min)/(n-2);
printf("減去一個最高分: %.3f\n", max);
printf(", 減去一個最低分: %.3f\n", min);
printf("當前選手的最後得分是:%.3f\n", ave);
printf("******************* SUCCESS ***********************\n");
printf("按 N 退出,其他鍵繼續....");
fflush(stdin); //將輸入緩衝清空,否則getchar()會讀入之前錄入中的回車等符號
choice=getchar();
}while(choice!='N' && choice!='n'); //不管輸入大小寫,全算數
return 0;
}