C++编程高手进
N名裁判给M名歌手打分,评分原则是去掉一个最高分,去掉一个最低分,剩下的分数的平均值为该歌手的最终得分。裁判给分的范围是60≤分数≤100。裁判人数N=10。编写一个程序,每个裁判所给的分数由键盘输入,要求屏幕按一定格式输出四项内容:歌手的姓名、他的最终得分、去掉的最高分、最低分;假如有50名歌手参加比赛,按得分由高到低输出全部歌手姓名和得分。
追问:唔···我看不太懂,我运行的时候有个错误! error C2248: 'minScore' : cannot access protected member declared in class 'Singer'
f:\作业\c++\w2.cpp(9) : see declaration of 'minScore'
这是怎么个回事啊!
拜托好人做到底啦!
答案:/*既然是C++编程的话,用到类是最好的啦。如果只是面向过程的话,直接用C语言就行了。我的代码虽然长了点。但是知识都是C++的知识,主要用了友元函数跟运算符的重载,还有对象数组,对象的复制。
另外我的测试数据是20个歌手,分数都是随便输的。如果你要测试的话,可以按照自己的要求来输入
=。=第一次提交为什么不能通过审核呢?*/
#include<iostream>
#include<string>
using namespace std;
class Singer
{
protected:
string name;
double avgScore,maxScore,minScore;
public:
Singer(){name="",avgScore=0;maxScore=0;minScore=0;}
friend istream& operator>>(istream &input,Singer &s);
friend ostream& operator<<(ostream &output,Singer &s);
void sort(Singer s[],int n);
friend ostream& operator<<=(ostream &output,Singer &s);
};
void Singer::sort(Singer s[],int n)
{
int i,j,k;
Singer t;
for(i=0;i<n-1;i++)//这个循环是排序歌手的平均分
{
k=i;
for(j=i+1;j<n;j++)
if(s[k].avgScore<s[j].avgScore) k=j;
if(i!=k)
{
t=s[i];
s[i]=s[k];
s[k]=t;
}
}
}
ostream& operator<<(ostream &output,Singer &s)
{
output<<s.name<<"\t\t"<<s.avgScore<<"\t\t"<<s.maxScore<<"\t\t"<<s.minScore<<endl;
return output;
}
ostream& operator<<=(ostream &output,Singer &s)
{
output<<s.name<<"\t\t"<<s.avgScore<<endl;
return output;
}
istream& operator>>(istream &input,Singer &s)
{
double fen[10];
int i;
input>>s.name;
for(i=0;i<10;i++)
input>>fen[i];
s.maxScore=s.minScore=fen[0];
for(i=0;i<10;i++)
{
if(s.maxScore<fen[i]) s.maxScore=fen[i];//找出最大分
if(s.minScore>fen[i]) s.minScore=fen[i];//找出最小分
s.avgScore+=fen[i]; //10个评委的总分
}
s.avgScore=(s.avgScore-s.maxScore-s.minScore)/8.0;//歌手去掉最大和最小分后的平均分
return input;
}
int main()
{
int i,n;
cout<<"请输入选手的人数及10位裁判所给的分数:";
cin>>n;
Singer *s;
s=new Singer[n];
for(i=0;i<n;i++)
cin>>s[i];
cout<<"歌手姓名\t最终得分\t去掉的最高分\t去掉的最低分"<<endl;
for(i=0;i<n;i++)
cout<<s[i];
s->sort(s,n);
cout<<"歌手姓名\t最终得分\t"<<endl;
for(i=0;i<n;i++)
cout<<=s[i];
return 0;
}
#include<iostream>
#include<string>
using namespace std;
struct singer{
string name;
float scores[11];
float max;
float min;
float final;
}info[100];
void sort(int);
int main(){
int m;
cin>>m;//输入选手的个数
for(int i=0;i<m;i++){
cin>>info[i].name;//输入名字
info[i].scores[0]=info[i].max=0;
info[i].min=101;
for(int j=1;j<=10;j++){
cin>>info[i].scores[j];
info[i].scores[0]+=info[i].scores[j];
if(info[i].max<info[i].scores[j]) info[i].max=info[i].scores[j];
if(info[i].min>info[i].scores[j]) info[i].min=info[i].scores[j];
}
info[i].final=(info[i].scores[0]-info[i].max-info[i].min)/8;
}
sort(m);
for(int i=0;i<m;i++)
cout<<info[i].name<<' '<<info[i].final<<' '<<info[i].max<<' '<<info[i].min<<endl;
return 0;
}
void sort(int a){
for(int i=0;i<a;i++)
for(int j=i+1;j<a;j++)
if(info[i].final<info[j].final){
singer t=info[i];
info[i]=info[j];
info[j]=t;
}
}
上一个:C++找字符串直接后继
下一个:简单银行管理系统 c++