C++实现歌星大奖赛
一 、需求分析:
(1)在歌星大奖赛中,每位歌手演唱完,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。歌手的人数在大奖赛开始时确定。
(2)同时对评委评分进行裁判,即在10个评委中找出最公平(即评分最接*均分)和最不公平(即与平均分的差距最大)的评委。
(3)建立数据文件,保存各位歌星比赛时的所有评委分数,包括最高分,最低分和最后得分,并对比赛结果进行排序输出;
(4)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。
#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
//设立冒泡排序函数
void changenumber(int a[],int n){
int temp = 0; //设置中间变量
for (int i = n-1; i > 0; --i) //从后往前判断
{
for (int j = 0; j < i; ++j) //判断i以前两个数值的大小,最终把这次循环最大的数放到i的位置上去
{
if (a[j + 1] < a[j])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
int main()
{
int Singer=0;
cout<<"参加比赛的歌手人数为 :";
cin>>Singer;
int iReferee[Singer][10];//存取每个选手的评委分数
int sScore[Singer][3];//存取每个选手的最高分最低分以及最终得分
int arr[Singer];//保存每个选手的最终得分
int n=Singer;
const int iNumber = 10;
cout<<"---------------比赛开始---------------"<<endl;
int j=0;
while(n--){
int iScore = 0;
int iMaxScore= 0;
int iMinScore= 100;
int iAverage = 0;
cout<<"歌手"<<j+1<<"演唱结束,开始评分:"<<endl;
for (int i=0; i<iNumber; i) {
cout<<"裁判 "<<i+1<<" 给出分数 : ";
cin>>iScore;
if (iScore<=100&&iScore>=0){
iReferee[j][i] = iScore;
iAverage += iScore;
if (iScore > iMaxScore)
iMaxScore = iScore;
if (iScore < iMinScore)
iMinScore = iScore;
i++;
}
else{
cout<<"评分有误,请输入1~100之间的评分:"<<endl;
continue;
}
}
cout<<"删除最高分 : "<<iMaxScore<<endl;
cout<<"删除最低分 : "<<iMinScore<<endl;
iAverage = (iAverage - iMaxScore - iMinScore)/(iNumber - 2);
cout<<" 最终得分 : "<<iAverage<<endl;
//-------------------------------------------------
// 在十个评委中找出最公平即评分最接*均分和最不
// 公平即与平均分的差距最大的评委.
cout<<"---------------筛选评委---------------"<<endl;
// 最不公平的
int iUnfair = 0; //获取最不公平评委的评分与平均分的差
cout<<"最不公平的评委 : "<<endl;
if( fabs(iMaxScore - iAverage) >=fabs(iMinScore - iAverage)){
iUnfair = fabs(iMaxScore - iAverage);
}
else if (fabs(iMaxScore - iAverage) < fabs(iMinScore - iAverage)){
iUnfair = fabs(iMinScore - iAverage);
}
for (int i=0; i<iNumber; ++i) {
if (fabs(iReferee[j][i]-iAverage) == iUnfair)
cout<<"评委 "<<i+1<<" : "<<iReferee[j][i]<<endl;
}
//-------------------------------------------------
// 最公平的
int iFair=100;//获取最公平的评委的评分与平均分的差
cout<<"最公平的评委 : "<<endl;
for(int i=0;i<iNumber;++i){
if(fabs(iReferee[j][i]-iAverage) < iFair) iFair=fabs(iReferee[j][i]-iAverage);
}
for (int i=0; i<iNumber; ++i) {
if (fabs(iReferee[j][i]-iAverage) == iFair)
cout<<"评委 "<<i+1<<" : "<<iReferee[j][i]<<endl;
}
sScore[j][0]=iMaxScore;
sScore[j][1]=iMinScore;
sScore[j][2]=iAverage;
arr[j]=iAverage;
j++;
cout<<"---------------评分结束---------------"<<endl;
}
cout<<"---------------比赛结束---------------"<<endl;
cout<<"-------------得分排名如下-------------"<<endl;
changenumber(arr,Singer);
for(int n=Singer-1;n>=0;n--){
for(int i=0;i<Singer;i++){
if(sScore[i][2]==arr[n]) cout<<"歌手 "<<i+1<<" 得分 "<<arr[n]<<endl;
}
}
return 0;
}
有什么问题以及改进方法可以在下面留言哦~