/*
以下为模拟裁判经给比赛选手打分参考程序1(实验二中的程序设计实验),供同学们参考,请请各位同学认真阅读后分析后,自己重新编写并调试通过(分步调试)后上交。
类的定义放在头文件“result.h”中,处理程序放在“exp206.cpp”中,
*/
//以下为类的定义:
#include
#include
using namespace std;
const int UMPIRE=10;//裁判人数,最多为10人
cla result
{ private:
int num;//运动员编号
char name[11];//运动员姓名
int m;//裁判实际人数
double score[UMPIRE+1];
/*运动员得分,score[0]-score[m-1]为裁判打分,
score[m]为平均得分*/
public:
result(void);//无参构造函数
result(int n,char *ps,int k,double x[]);
//构造函数重载,初始化运动员编号、姓名、裁判人数
void set(int n,char *ps,int k);
//写入运动员编号、姓名、裁判人数
void set_score(double x[]);//写入运动员得分
void input_name(int k);
//输入运动员编号、姓名、裁判人数
void input_score(void);//输入运动员得分
double maxrow(void);//求裁判打的最高分
double minrow(void);//求裁判打的最低分
double avg(void);//求平均分
int read_num(void)//读运动员编号
{return num;}
char *read_name(void)//读运动员姓名
{return name;}
double read_score(int i)//读运动员得分
{ return score[i];}
int read_m(void)//读裁判人数
{ return m;}
};
result::result(void)
{ int i;
num=0;m=0;strcpy(name,\"\");
for(i=0;i
score[i]=0;
}
result::result(int n,char *ps,int k,double x[])
{ int i;
num=n;m=k;strcpy(name,ps);
for(i=0;i
score[i]=x[i];
}
void result::set(int n,char *ps,int k)
{ num=n;m=k;strcpy(name,ps);}
void result::set_score(double x[])
{ int i;
for(i=0;i
score[i]=x[i];
}
double result::maxrow(void)
{ double ma;int i;
ma=score[0];
for(i=0;i
if(ma
return ma;
}
double result::minrow(void)
{ double mi;int i;
mi=score[0];
for(i=0;i
if(mi>score[i]) mi=score[i];
return mi;
}
double result::avg(void)
{ double sum=0;int i;
for(i=0;i
sum+=score[i];
score[m]=(sum-maxrow()-minrow())/(m-2);
return score[m];
}
void result::input_name(int k)
{ char ch;
int i;
m=k;
cout>num;
cin.get();
cout
while((ch=cin.get())!=\'\\n\')
{ name[i]=ch;i++;}
name[i]=\'\\0\';
}
void result::input_score(void)
{ int i;
for(i=0;i
{ cout
cin>>score[i];
}
}
//以下为处理程序:
#include
#include
#include
#include\"hresult.h\"
using namespace std;
void input_name(result *s,int n,int m);
void input_score(result *s,int n,int m);
void print(result *s,int n);
void sort(result *s,int n);
void main(void)
{ int n,m;result *p;
cout
cin>>n;
cout
cin>>m;
p=new result[n];
cout
cout
input_name(p,n,m);
cout
input_score(p,n,m);
cout
print(p,n);
sort(p,n);
cout
print(p,n);
delete []p;
}
void input_name(result *s,int n,int m)
for(i=0;i
{ cout
s[i].input_name(m);
}
}
void print(result *s,int n)
{ int i,m;
m=s[0].read_m();
cout
for(i=0;i
{ cout
cout
cout
}
}
void input_score(result *s,int n,int m)
{ int i;
for(i=0;i
{ cout
cout
cout
cout
}
}
//插入法排序方法1——直接在原数组中排序
void sort(result *s,int n)
{ int i,j,k,m; result temp;
m=s[0].read_m();//获取裁判人数
//以下为插入法排序
for(i=1;i
{ temp=s[i];
for(j=0;j
if(s[i].read_score(m)>s[j].read_score(m))//read_score(m)为平均成绩
{k=j;break;}//找到插入点即结束循环
if(j
{ for(j=i;j>k;j--)//将插入点及以下的元素后移一位
s[j]=s[j-1];
s[k]=temp;
}
}
}
/*
void sort(result *s,int n)
{ int i,j,k,m; result *p;
m=s[0].read_m();
p=new result[n];
//以下为插入法排序
p[0]=s[0];
for(i=1;i
{ for(j=0;j
if(s[i].read_score(m)>p[j].read_score(m)){k=j;break;}//找到插入点即结束循环
if(j
{ for(j=i;j>k;j--)//将插入点及以下的元素后移一位p[j]=p[j-1];
p[k]=s[i];
}
else//未找到插入点位置,则插入到对应位置p[i]=s[i];
}
for(i=0;i
s[i]=p[i];
delete []p;
}
*/