这里成绩的录入文件输入和手动输入两种形式
/************************************
/* 学生:刘中华
/* 日期:2014-1-11
/* 功能:输出学生成绩前三名(有并列)
/*
***************************************/
#include<iostream>
#include<fstream>
using namespace std;
void input_score(int &n,int *pp);
void output_score(int &n,int *pp);
void person_score(int &n,int *pp);
void main()
{
int num=0,score[10]={0};//num装人数,score数组装分数
int *p=score;
input_score(num,p);//输入小组人数及成绩
output_score(num,p);//输出最高成绩,最低成绩,以及平均成绩
person_score(num,p);
}
void input_score(int &n,int *pp)
{
int i;
cout<<"请输入学生人数:";
cin>>n;
cout<<endl<<"请输入每个学生成绩:";
//********************************************************
//for(i=0;i<n;i++)//这里换成从文件中读入
//cin>>pp[i];
ifstream infile;
infile.open("myfile.txt",ios::in);
if(!infile.is_open())
{
cerr<<"file not open!";
exit(1);
}
for(i=0;i<n;i++)
infile>>pp[i];
infile.close();
cout<<"文件读取完成"<<endl;
//********************************************************
cout<<"成绩录入完成"<<endl;
}
void output_score(int &n,int *pp)
{
int max=pp[0],min=pp[0],i;
int sum=0;
float avg=0;
for(i=0;i<n;i++)
{
if(max<pp[i])
max=pp[i];
if(min>pp[i])
min=pp[i];
sum+=pp[i];
}
avg=sum/1.0/n;
cout<<"最高分:"<<max<<endl;
cout<<"最低分:"<<min<<endl;
cout<<"平均分:"<<avg<<endl;
}
void person_score(int &n,int *pp)//先将成绩排序出来,从大到小
{
int i,j,k=0,m=0;//循环变量
int stu_num[10];//定义一个学号数组
int mid;//中间变量
for(i=0,j=1;i<n;i++,j++)//先将学号排出来,1-n
stu_num[i]=j;
for(i=0;i<n-1;i++)//i为趟数,j为每趟所需要的次数
{
for(j=n-1;j>0;j--,k++)
if(pp[k]<pp[k+1])
{
mid=pp[k];//交换成绩
pp[k]=pp[k+1];
pp[k+1]=mid;
mid=stu_num[k];
stu_num[k]=stu_num[k+1];
stu_num[k+1]=mid;//交换学号,这样才能保证学号,成绩一一对应
}
k=0;
}
cout<<"成绩按从大到小排列";
for(i=0;i<n;i++)
cout<<pp[i]<<" ";
cout<<endl;
//************************************************************************
//输出最高分,及对应学生学号,最高分学生人数
cout<<"最高成绩为:"<<pp[0]<<"最高分学生学号为:";
for(i=0;i<n;i++)
if(pp[i]==pp[0])
{
cout<<stu_num[i]<<" ";
m++;//m存储最高分或者最低分的人数
}
cout<<"最高分人数为:"<<m<<endl;
m=0;//统计完成后要清零
//************************************************************************
//输出最低分,及对应学生学号,最高分学生人数
cout<<"最低成绩为:"<<pp[n-1]<<"最低分学生学号为:";
for(i=0;i<n;i++)
if(pp[i]==pp[n-1])
{
cout<<stu_num[i]<<" ";
m++;//m存储最高分的人数
}
cout<<"最低分人数为:"<<m<<endl;
/*接下来输出前三名*/
//********************************************************************
i=j=k=m=0;
for(i=0;i<n;i++)//第一名
if(pp[i]!=pp[0])
break;
cout<<"第一名学生学号为:";
for(j=0;j<i;j++)
cout<<stu_num[j]<<" ";
cout<<endl;
//**********************************************************************
for(j=i;j<n;j++)//第二名
if(pp[j]!=pp[i])
break;
cout<<"第二名学生学号为:";
for(k=i;k<j;k++)
cout<<stu_num[k]<<" ";
cout<<endl;
//******************************************************************
for(k=j;k<n;k++)//第三名
if(pp[k]!=pp[j])
break;
cout<<"第三名学生学号为:";
for(i=j;i<k;i++)
cout<<stu_num[i]<<" ";
cout<<endl;
}