Copyright (C), 2008
File name: 软件设计普通题30(30.cpp)
Author: 计06-1 高战
Description:
Others: ....
Function List: // 主要函数列表,每条记录应包括函数名及功能简要说明
struct player // 定义 player
void Sort(double * s, int n); // 排序函数
double Total(double * s, int n); // 计算总分(去掉最低分和最高分)
double Average(double * s, int n); // 计算最终成绩函数
History:
<author> <time> <version > <desc>
*****************************************************/
#include <iostream>
#include <fstream>
using namespace std;
struct player
{
int number;
char name[40];
double * score;
};
void Sort(double * s, int n); // 排序函数
double Total(double * s, int n); // 计算总分(去掉最低分和最高分)
double Average(double * s, int n); // 计算最终成绩函数
int main()
{
ifstream fin; /*文件打开操作*/
fin.open("f1.txt");
if (fin.fail())
{
cout<<"文件读取失败..."<<endl;
exit(0);
}
/*读入数据,并分析出数据总行数与每个选手分数的个数(列数)*/
int rows = 0;
int cols = 0;
char temp;
cout<<"********************************************************"<<endl;
cout<<"注意f1文件格式一定要和试验指导书上的格式一样否则出现乱码"<<endl;
cout<<"********************************************************"<<endl;
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();
/*整理player成绩,先进行排序,然后计算,最后输出到文件*/
for (int k=0;k<rows;++k)
Sort(list[k].score,cols);
cout<<"-----------------------------------------------------------\n";
cout<<" 参赛号 姓 名 最高分 最低分 累计分 最后得分\n";
cout<<"-----------------------------------------------------------\n";
cout.setf(ios_base::fixed); // 格式控制
for (int h = 0;h < rows; ++h)
{
cout.precision(1);
cout.width(4);
cout<<list[h].number;
cout.width(12);
cout<<list[h].name;
cout.width(8);
cout<<list[h].score[cols - 1];
cout.width(11);
cout<<list[h].score[0];
cout.width(10);
cout<<Total(list[h].score, cols);
cout.width(11);
cout.precision(2);
cout<<Average(list[h].score, cols);
cout<<endl;
}
ofstream fout;
fout.open("f2.txt");
if(fout.fail())
{
cout<<"文件建立失败";
exit(0);
}
fout<<"-----------------------------------------------------------\n";
fout<<" 参赛号 姓 名 最高分 最低分 累计分 最后得分\n";
fout<<"-----------------------------------------------------------\n";
fout.setf(ios_base::fixed); // 格式控制
for ( 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[cols - 1];
fout.width(11);
fout<<list[h].score[0];
fout.width(10);
fout<<Total(list[h].score, cols);
fout.width(11);
fout.precision(2);
fout<<Average(list[h].score, cols);
fout<<endl;
}
fout<<"-----------------------------------------------------------\n";
cout<<"f2.txt文件成功建立。\n";
return 0;
}
void Sort(double * s, int n) // 选择排序
原文请找腾讯752018766优,文-论'文.网http://www.youerw.com/ 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;
if (n<9)
{
for (int i = 1; i < n - 1; ++i)
sum += s[i];
return sum;
}
else
{
for(int i=2;i<n-2;++i)
sum +=s[i];
return sum;
}
}
double Average(double * s,int n) { return (Total(s,n)/(n-2)); }