当前位置:编程学习 > C/C++ >>

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++

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,