struct player //结构体定义
{
int number;
char name[20];
double * score;
};
void Sort(double * s, int n) // 排序函数
{
double temp;
int pos;
for(int i=0;i<n-1;++i)
{
temp=s[i];
pos=i;
for(int j=i+1;j<n;j++)
{
if (s[j]<temp)
{
temp=s[j];
pos=j;
}
}
s[pos]=s[i];
s[i]=temp;
}
}
double Total(double * s, int n) // 计算总分(去掉最低分和最高分)
{
double sum=0;
for (int i=1; i<n-1; ++i) //因为已经排序,所以最低、最高分分别是数组第一个和最后一个元素
sum+=s[i];
return sum;
}
double Average(double * s, int n) // 计算最终成绩函数
{
return (Total(s,n)/(n-2));
}
int main() //主函数
{
ifstream fin; /*文件打开操作*/
fin.open("f1.txt");
if (fin.fail())
{
cout<<"文件读取失败..." <<endl;
exit(0);
}
int rows=0; //确定选手数
int cols=0; //确定裁判人数
char temp;
while (!fin.eof())
{
temp=fin.get();
if (temp=='\n') // 以回车判定行数,文件最后一行数据一定要以\n结束,否则会出错!
rows++;
else if (temp=='.') // 以.判定有多少位裁判给分(总计)
cols++;
}
cols /= rows; // 每位选手有多少个分数
player * list=new player[rows]; //为player结构分配空间,然后存入相应数据
for(int i=0; i<rows;++i)
list[i].score=new double[cols];
fin.clear();
fin.close();
fin.open("f1.txt");
if(fin.fail())
{
cout<<"文件读取失败..." <<endl;
exit(0);
}
for(int m=0; m<rows; ++m) //读入数据
{
fin>>list[m].number;
fin>>list[m].name;
for(int j=0;j<cols;++j)
{
fin>>list[m].score[j];
}
fin.get(); // 屏蔽回车
}
fin.close();
for(int k=0;k<rows;++k) //整理player成绩,先进行排序,然后计算,最后输出到文件
Sort(list[k].score,cols);
ofstream fout;
fout.open("f2.txt");
if(fout.fail())
{
cout<< "文件建立失败!";
exit(0);
}
fout<< "-----------------------------------------------------------\n";
fout<< " 参赛号 姓 名 最低分 最高分 累计分 最后得分\n";
fout<< "-----------------------------------------------------------\n";
fout.setf(ios_base::fixed); // 格式控制
for(int h=0;h<rows;++h) //文件写入
{
fout.precision(1);
fout.width(4);
fout<<list[h].number;
fout.width(12);
fout<<list[h].name;
fout.width(8);
fout<<list[h].score[0];
fout.width(10);
原文请找腾讯752018766优,文-论'文.网http://www.youerw.com/ fout.width(11);
fout.precision(2);
fout<<Average(list[h].score,cols);
fout<<endl;
}
cout<< "-----------------------------------------------------------\n";
cout<< " 参赛号 姓 名 最低分 最高分 累计分 最后得分\n";
cout<< "-----------------------------------------------------------\n";
for(h=0;h<rows;++h) //屏幕输出
{
cout<<setw(2)<<list[h].number;
cout<<setw(10)<<list[h].name;
cout<<setw(6)<<list[h].score[0];
cout<<setw(6)<<list[h].score[cols-1];
cout<<setw(6)<<Total(list[h].score,cols);
cout<<setw(6)<<Average(list[h].score,cols);
cout<<endl;
}
cout<<"-----------------------------------------------------------\n";
fout<<"-----------------------------------------------------------\n";
cout<<"f2.txt文件成功建立\n";
return 0;
}