题目:
假设某综艺活动海选共n位评委,设计程序要求完成以下功能:
为用户提供一个交互的菜单界面,用户可以根据需要选择想要的操作,
程序功能菜单应包括
(1)输入、输出当前选手n位评委的打分
(2)输出最高分、最低分
(3)输出最后得分(去掉最低分和最高分后的平均分)
(4)用面向对象的方法实现
(5)对可能出现的异常进行异常处理
#include <iostream>
using namespace std;
const unsigned JudgeNum = 5;
class CompetitionResult
{
private:
float score[JudgeNum]; //记录各评委给选手的打分
float average; //选手最后得分,去掉一个最高分和一个最低分的平均得分
public:
float MaxScore(); //求评委打的最高分
float MinScore(); //求评委打的最低分
void SavAvg(); //求选手最后得分
void GetNUMScore();//显示所有评委的打分
float GetAvg()
{
return average; //读选手最后得分
}
float GetScore(int j)
{
return score[j-1]; //读第j个评委的打分
}
void SetScore(int k,float av)
{
score[k-1]=av; //记录第K个评委的打分
}
friend void Sort(CompetitionResult* pr,int n); //按最后得分由高到低排序
};
void CompetitionResult::GetNUMScore()
{
for(int j=0; j<JudgeNum; j++)
{
cout<<"第"<<j+1<<"位的评委打分是"<<GetScore(j+1)<<endl;
}
}
float CompetitionResult::MaxScore()
{
for(int j=0; j<JudgeNum; j++)
if(GetScore(j)>GetScore(j+1))
{
score[j-1]+=score[j];
score[j]=score[j-1]-score[j];
score[j-1]=score[j-1]-score[j];
}
return score[JudgeNum-1];
}
float CompetitionResult::MinScore()
{
for(int j=0; j<JudgeNum; j++)
if(GetScore(j)>GetScore(j+1))
{
score[j-1]+=score[j];
score[j]=score[j-1]-score[j];
score[j-1]=score[j-1]-score[j];
}
return score[0];
}
void CompetitionResult::SavAvg()
{
float sum=0.0;
for(int j=1; j<=JudgeNum; j++)
sum+=GetScore(j);
sum=sum-MaxScore()-MinScore();
average=sum/(JudgeNum-2);
}
void Sort(CompetitionResult* pr)
{
CompetitionResult temp;
for(int j=0;j<JudgeNum;j++)
if(pr[j].GetAvg()<pr[j+1].GetAvg())
{
temp=pr[j];
pr[j]=pr[j+1];
pr[j+1]=temp;
}
}
int main()
{
CompetitionResult pr;
float scorein=0.0;
cout<<"请为选手打分: "<<endl;
for(int j=0;j<JudgeNum;j++)
{
cin>>scorein;
pr.SetScore(j+1,scorein);
}
cout<<"***********************"<<endl;
cout<<"各个评委的打分:"<<endl;
pr.GetNUMScore() ;
cout<<"***********************"<<endl;
cout<<"最高分:"<<pr.MaxScore()<<endl;
cout<<"最低分:"<<pr.MinScore()<<endl;
pr.SavAvg();
cout<<"最终得分:"<<pr.GetAvg()<<endl;
cout<<"***********************"<<endl;
system("pause");
return 0;
}