问题及代码:
/*
*copyright (c) 2014,烟台大学计算机学院
*all rights reserved.
*文 件 名 : 大奖赛记分系统.cpp
*作 者 :白云飞
*完成日期 :2015年3月2号
*版 本 号 :v1.0
*
*问题描述 :大奖赛记分系统
*输入描述 :选手人数,评委人数,选手得分
*程序输出 :选手最后得分,排名
*/
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <fstream>
#include <cstdlib>
using namespace std;
double s[100][20],r[100][2];
void mark(double s[][20],int m,int n,int max1,int min1);
void rank(double r[][2],int m,int n);
int main()
{
char d;
do
{
int max1,min1,n,m;
cout<<"请输入评委人数:";
cin>>n;
cout<<"请输入选手人数:";
cin>>m;
cout<<"请输入打分范围:"<<endl;
cout<<"最高分:";
cin>>max1;
cout<<"最低分:";
cin>>min1;
mark (s,m,n,max1,min1);
cout<<"选手排名为:"<<endl;
rank (r,m,n );
cout <<"********************SUCCESS********************"<<endl;
cout <<"按n退出,其他继续: ";
cin >>d;
}
while(d!='n');//进行判断
return 0;
}
void mark(double s[][20],int m,int n,int max1,int min1)
{
int i,j;
cout<<"请输入选手的成绩("<<min1<<"--"<<max1<<"):"<<endl;
cout<<"-----------------------------------------------"<<endl;
ofstream outfile("mark.txt",ios::out);
if(!outfile)
{
cerr<<"open error!"<<endl;
exit(1);
}
for(i=0; i<m; i++)
{
cout<<"第"<<i<<"位选手得分:";
double sum=0,max=-1,min=101,average=0,b;
for(j=0; j<n; j++)
{
cin>>s[i][j];
if(s[i][j]>max1||s[i][j]<min1)
{
cout<<"请重新输入分数"<<endl;
i=i-1;
continue;
}
b=s[i][j];
sum+=s[i][j];
if(b>=max&&b<=max1) max=b;
if(b<=min&&b>=min1) min=b;
}
cout << "去掉一个最高分:" <<max;
cout << " 去掉一个最低分:" <<min<< endl;
average=(sum-max-min)/(n-2);
cout <<"第"<<i<<"位选手的最后得分是:"<<average<<endl;//输出结果
r[i][1]=average;
outfile<<average<<endl;
cout<<"-----------------------------------------------"<<endl;
}outfile.close();
}
void rank(double r[][2],int m,int n)
{
int i,j,k;
double t;
for(i=0; i<n; i++)
{
r[i][0]=i;
}
for(j=0; j<=m-1; j++)
for(i=0; i<m-j-1; i++)
if (r[i][1]<r[i+1][1])
{
t=r[i][1];
r[i][1]=r[i+1][1];
r[i+1][1]=t;
k=r[i][0];
r[i][0]=r[i+1][0];
r[i+1][0]=k;
}
for(i=0; i<m; i++)
cout<<"第"<<i<<"名:"<<"选手"<<r[i][0]<<endl;
}
运行结果:
学习心得:
以前写过一个简易版的大奖赛记分系统,在原有基础上加上了选手人数,排名,还有将成绩保存到文档中。