*copyright (c) 2014, 烟台大学计算机学院.
*All rights reserved.
*文件名称:test.cpp
*作者:陆云杰
*完成日期:2015年1月29日
*版本号:v1.0
*
*
*问题描述:一个可以统计选手的分数与排名的系统
*程序输入: 每个选手的每个评委的得分
*程序输出: 每个选手的最后得分和最终排名
*/
#include <fstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
using namespace std;
double s[100][10],f[100][2];
void read(int m,int n,double s[][10]);
void out(int m,int n,double s[][10]);
void caculate(int m,int n,double s[][10],double f[][2]);
void outfile(int m,int n,double f[][2]);
void Rank(int m,int n,double f[][2]);
int main()
{
int n,m;
cout<<"请输入评委人数:";
cin>>m;
cout<<endl;
cout<<"请输入选手人数:";
cin>>n;
cout<<endl;
cout<<"选手成绩范围是(0~10)"<<endl;
read(m,n,s);
out(m,n,s);
caculate(m,n,s,f);
Rank(m,n,f);
outfile(m,n,f);
return 0;
}
void read(int m,int n,double s[][10])
{
int i,j,count=-1;
double r[100],S;
ifstream infile("score.txt",ios::in);
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
while(infile>>S)
{
count++;
r[count]=S;
}
infile.close();
for(i=0;i<n;i++)
for(j=0;j<m;j++)
s[i][j]=r[m*i+j];
}
void out(int m,int n,double s[][10])
{
int i,j;
for(i=0;i<n;i++)
{
cout<<"第"<<i+1<<"位选手的每个评委的得分分别是:";
for(j=0;j<m;j++)
{
cout<<s[i][j]<<" ";
}
cout<<endl;
}
}
void caculate(int m,int n,double s[][10],double f[][2])
{
int i,j;
double max=0,min=10,sum,average;
for(i=0;i<n;i++)
{
f[i][0]=i+1;
sum=0;
cout<<"去掉一个最高分和一个最低分后第"<<i+1<<"位选手的最终得分是:";
for(j=0;j<m;j++)
{
sum+=s[i][j];
if(s[i][j]<=min)
min=s[i][j];
if(s[i][j]>=max)
max=s[i][j];
}
cout<<setiosflags(ios::fixed)<<setprecision(1);
average=(sum-max-min)/(m-2);
f[i][1]=average;
cout<<average<<endl;
}
}
void outfile(int m,int n,double f[][2])
{
int i;
ofstream outfile("rank.txt",ios::out);
if(!outfile)
{
cerr<<"open error!"<<endl;
exit(1);
}
for(i=0;i<n;i++)
{
outfile<<f[i][1]<<endl;
}
outfile.close();
}
void Rank(int m,int n,double f[][2])
{
int i,j,tep;
double t;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(f[j][1]<f[j+1][1])
{
t=f[j][1];
f[j][1]=f[j+1][1];
f[j+1][1]=t;
tep=f[j][0];
f[j][0]=f[j+1][0];
f[j+1][0]=tep;
}
}
}
for(i=0;i<n;i++)
cout<<"第"<<i+1<<"名:选手"<<f[i][0]<<endl;
}
学习心得:出发前一夜来个压哨的寒假实践项目,哈哈