关于C++编程问题,高手帮忙啊(急)

需要编一个小程序可怎么也编不出,请高手帮忙,有追分
要求:N名裁判给M名歌手打分,评分原则是去掉一个最高分,去掉一个最低分,剩下的分数的平均值为该歌手的得分。裁判给分的范围是大于等于60小于等于100,裁判人数N=10.编写一个程序,每个裁判所给的分数有键盘输入,要求屏幕按一定格式输出四项内容:歌手的姓名,他的最终得分,去掉的最高分,最低分;加入有50名歌手参加比赛,按得分从高到低输出全部歌手姓名和得分。
答出的追50分 请各位大大帮忙啊

-------------VC6.0测试通过----------------------
//SetScore.h
#ifndef SETSCORE_H_
#define SETSCORE_H_
#include <string>
using namespace std;
class Umpire
{
public:
Umpire(); ~Umpire();bool SetScore();
void GetName();int GetScore();
private:
int m_Score;string m_szName_Umpire;
};
struct Singer
{
string szName_Singer;int MaxScore;
int MinScore;double AveScore;int Grade;
};
#endif//SETSCORE_H_
//SetScore.cpp---类与结构的实现文件。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include "SetScore.h"
using namespace std;
//------------------------裁判类的实现---------------------
Umpire::Umpire()
:m_szName_Umpire("No Name"),m_Score(0)
{}
void Umpire::GetName()
{
string name;cin>>name;m_szName_Umpire=name;
}
bool Umpire::SetScore()
{
//cout<<"Please Set Scores for Singer:[60,100]."<<endl;
int score;cin>>score;
if(score<60||score>100)
{
cout<<"你输入了一个非法值。请输入在[60,100]中的一个整数值。"<<endl;
return false;
}
m_Score=score;return true;
}
int Umpire::GetScore()
{
return m_Score;}
Umpire::~Umpire()
{}
//------------------------歌手类的实现---------------------
//本想也做一个类的,但考虑到顺便练习一下结构的使用,
//就没做类了。这里的成员第一次使用时都将是左值,因此就不初始化了。
int main()
{ //--------------裁判和歌手的信息初始化---=-------------
const int nUmpireNum=4;//最少要有3名裁判。否则不能去掉最高与最低分。
const int nSingerNum=2;
//------------------- 构造一个容器,用来将得分排序-----
vector<double> vec;
//-------------------裁判------------------------------
cout<<"\n=====================裁判======================\n";
Umpire *pUmpire=new Umpire[nUmpireNum];
//Umpire umpire[nUmpireNum];
for(int i=0;i<nUmpireNum;++i)
{
cout<<"Please Input a name for The ("<<i+1<<"/"<<nUmpireNum<<") Umpire :"<<endl;
pUmpire[i].GetName();
}
//-------------------歌手------------------------------
cout<<"\n=====================歌手======================\n";
Singer singer[nSingerNum];
Singer* pSinger=singer;

for(int j=0;j<nSingerNum;++j)
{
cout<<"Please Input a name for The ("<<j+1<<"/"<<nSingerNum<<") Singer :"<<endl;
string name;
cin>>name;
pSinger[j].szName_Singer=name;
}

//-------------------打分过程----------------------
int nGetScorePerson(0);
while(nGetScorePerson<nSingerNum)
{
cout<<"现在请给第 "<<nGetScorePerson+1<<"位歌手打分[60,100](共"<<nSingerNum<<"位):"<<endl;
int nScore[nUmpireNum],nMin(0),nMax(0),nSum(0);
//------------------打分-----------------------------
for(int i=0;i<nUmpireNum;++i)
{
cout<<"请第"<<i+1<<"位裁判打分(共"<<nUmpireNum<<"位)"<<endl;
bool bValid=pUmpire[i].SetScore();
while(!bValid)
{//直到输入正确才结束循环。
bValid=pUmpire[i].SetScore();
}
nScore[i]=pUmpire[i].GetScore();//记下每个裁判的打分。

}
//--------------找到最低分,最高分。------------------
nMin=nMax=nScore[0];
for(int j=0;j<nUmpireNum;++j)
{
if(nMin>nScore[j])
nMin=nScore[j];
if(nMax<nScore[j])
nMax=nScore[j];
nSum+=nScore[j];
}
pSinger[nGetScorePerson].MaxScore=nMax;
pSinger[nGetScorePerson].MinScore=nMin;
//---------------算出平均值得分-----------------------
pSinger[nGetScorePerson].AveScore=(double)(nSum-nMin-nMax)/(nUmpireNum-2);
//-------------将平均值放入容器中,用来排名次---------
vec.push_back(pSinger[nGetScorePerson].AveScore);

//------------------输出格式(四项内容)--------------
cout<<"歌手姓名---最终得分---最高得分---最低得分---\n ";
cout<<pSinger[nGetScorePerson].szName_Singer<<"-----"
<<pSinger[nGetScorePerson].AveScore<<"--------------"
<<pSinger[nGetScorePerson].MaxScore<<"--------------"
<<pSinger[nGetScorePerson].MinScore<<"---\n";

//------------------循环到下一位singer----------------
++nGetScorePerson;
}
sort(vec.begin(),vec.end());//排序,从小到大。
//================================================================
//==============下面就是输出所有歌手排名信息的处理了==============
//================================================================
cout<<"\n=======排=================行===============榜========\n"<<endl;
cout<<"\n----歌手姓名---------------排--名----\n ";
int nGrade(1);//用来排名次的。
for(int k=vec.size()-1;k>=0;--k)
{
for(int i=0;i<nSingerNum;++i)
{
if(pSinger[i].AveScore==vec[k])
{
cout<<"------"<<pSinger[i].szName_Singer
<<"------------------"<<"第"<<nGrade++<<"名"<<endl;
break;
}
}
}
delete [] pUmpire;
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-12-24
#include<stdio.h>
#define N 10
#define M 50
struct xuanshou
{
char name[8];
int score[N];
float defen;
}xs[M],t;
void main()
{
int i,j,m,n,s,k=0;
for(i=0;i<M;i++)
{
printf("Xing ming:");
scanf("%s",&xs[i].name);
printf("Qing ping wei wei %s xuan shou da fen(60 ~ 100)\n",xs[i].name);
for(j=0;j<N;j++)
{
printf("%d hao ping wei da fen:",(j+1));
scanf("%d",&xs[i].score[j]);
if(xs[i].score[j]<60||xs[i].score[j]>100)
{
printf("Chong xin shu ru,fen shu zai 60 zhi 100 zhi jian\n");
j--;
}
}
for(m=0;m<N;m++)
for(n=0;n<(N-1);n++)
if(xs[i].score[m]>xs[i].score[n])
{
s=xs[i].score[m];
xs[i].score[m]=xs[i].score[n];
xs[i].score[n]=s;
}
for(j=0;j<N;j++)
{
printf("%4d",xs[i].score[j]);
k+=xs[i].score[j];
}
xs[i].defen=(float (k-xs[i].score[0]-xs[i].score[N-1]))/(N-2);
printf("\nQu diao yi ge zui gao fen ,qu diao yi ge zui di fen,\nxuan shou %s de zui zhong de fen : %0.2f\n",xs[i].name,xs[i].defen);
k=0;
}
for(m=0;m<M;m++)
{
for(n=0;n<(M-1);n++)
{
if(xs[m].defen>xs[n].defen)
{
t=xs[n];
xs[n]=xs[m];
xs[m]=t;
}
}
}
for(i=0;i<M;i++)
printf("Di %d ming %s%6.3f\n",i,xs[i].name,xs[i].defen);
}
第2个回答  2007-12-28
/*
用类结合链表来做,程序比较长
分为两个文件一个是singer.h 是singer类的定义和实现的头文件
令一个是.cpp是主程序.
Microsoft Visual C++ .NET编译通过.
*/

/*
singer.h
*/
#include "string"
#include "iostream"
using namespace std;

const int judges = 10;//裁判数量

class singer{
public:
singer();
singer(string name,float score[]);
void set_name(string name);
void set_score(float score[]);
string get_name() const;//取姓名
float get_min() const;//取最低分
float get_max() const;//取最高分
float get_final() const;//取总分
bool operator <(const singer &s) const;//重载"<"号,方便链表排序
bool operator >(const singer &s) const;//重载">"号,方便链表排序
private:
string sname;//姓名
float sscore[judges];//得分
};

singer::singer():sname("unname")//默认初始化
{
for (int i=0;i<judges;i++)
{
sscore[i]=0;
}
}

singer::singer(string name,float score[judges])//给定参数初始化
{
sname=name;
for (int i=0;i<judges;i++)
{
sscore[i]=score[i];
}
}

void singer::set_name(string name)
{
sname=name;
}

void singer::set_score(float score[judges])
{
for (int i=0;i<judges;i++)
{
sscore[i]=score[i];
}
}

string singer::get_name() const
{
return sname;
}

float singer::get_min() const
{
float min=sscore[0];
for (int i=1;i<judges;i++)
{
if (min>sscore[i])
min=sscore[i];
}
return min;
}

float singer::get_max() const
{
float max=sscore[0];
for (int i=1;i<judges;i++)
{
if (max<sscore[i])
max=sscore[i];
}
return max;
}

float singer::get_final() const
{
float total=0;
for (int i=0;i<judges;i++)
{
total+=sscore[i];
}
total-=get_max();//去掉最高分
total-=get_min();//去掉最低分
return total;
}

bool singer::operator <(const singer &s) const
{
return (this->get_final()<s.get_final());
}

bool singer::operator >(const singer &s) const
{
return (this->get_final()>s.get_final());
}

///////////////////////////////////////////////////////////////

/*
judge.cpp
*/

#include "stdafx.h"
#include "iostream"
#include "singer.h"
#include "string"
#include "list"
#include "iomanip"

using namespace std;

list<singer> singers;//储存歌手的链表
void print(const singer& s);//歌手信息输出
void input();//歌手信息输入
void show();//全部歌手打印(排序)
void run();//程序

int _tmain(int argc, _TCHAR* argv[])
{
run();
return 0;
}

void run()
{
int choose=0;
cout<<"请选择操作: 1.输入 2.打印 3.退出. ";
cin>>choose;
if (cin.fail())
{
cout<<"没有正确选择,默认退出.\n";
return;
}
while (choose!=3)
{
switch (choose)
{
case 1:
{
input();
break;
}
case 2:
{
show();
break;
}
case 3: break;
default:break;
}
cout<<"操作完成,请继续选择操作:\n1.输入 2.打印 3.退出 :";
cin>>choose;
}
}

void print(const singer& s)
{
cout<<"姓名:"<<s.get_name()<<endl;
cout<<"最终得分:"<<s.get_final()<<endl;
cout<<"最终平均分:"<<s.get_final()/(float)judges<<endl;
cout<<"去掉最高分:"<<s.get_max()<<endl;
cout<<"去掉最低分:"<<s.get_min()<<endl;
}

void input()
{
string name;
float score[judges];
cout<<"请输入选手姓名: ";
cin>>name;
for (int i=0;i<judges;i++)
{
float temp;
bool input_error=false;//输入是否有效标志
while (true)
{
if (input_error)
{
cout<<"您输入的成绩不在[60,100]之间或者输入错误.\n请重新输入:";
}
else
{
cout<<"请输入选手的第"<<i+1<<"个成绩: ";
}
cin>>temp;
if ( (cin.fail()) || (temp<60) || (temp>100) )//输入无效
{
cin.clear();
cin.ignore(100,'\n');
input_error=true;
continue;
}
break;
}
score[i]=temp;
}
singers.push_back(singer(name,score));//储存歌手信息
}

void show()//格式化输出
{
if (singers.size()==0) return;
singers.sort(greater<singer>( ));
list<singer>::iterator iter;
cout<<"--------------------\n";
int i=1;
for (iter=singers.begin();iter!=singers.end();iter++)
{
cout<<"第"<<setw(2)<<i<<"名:\n";
print(*iter);
i++;
}
cout<<"--------------------\n";
}
相似回答