编写一个函数inGrade(),其功能是输入学生数据;编写函数aveGrade(),其功能是计算学生的平均成绩;编写函数maxGrade(),其功能是查找平均成绩最高的学生的数据;编写函数out Grade(),其功能是输出学生的成绩数据。现有15名学生的数据信息,每个学生的数据信息包括学号、姓名、4门课程(programmer、database、network、operat-system)的成绩。
要求:
(1)首先在主函数中调用函数inGrade()从键盘输入15个学生数据;
(2)其次在主函数中调用函数aveGrade()计算15名学生的4门课程的平均成绩。
(3)然后在主函数中调用maxGrade()查找平均成绩最高的学生的数据(包括学号、姓名、4门课的成绩、平均分)。
(4)最后在主函数中调用函数out Grade(),输出该学生的数据信息。
(5)修改程序,将函数maxGrade()的功能改为对所有学生按平均成绩进行排序。并在主函数中调用它,之后输出所有学生的已排序的数据表。
//输出最大平均分信息
#include`<iostream>`
#include`<cstring>`
using namespace std;
const int N=3;
void inGrade(struct Student *p,int n);
void aveGrade(struct Student *p,int n);
int maxGrade(struct Student *p,int n);
void outGrade(struct Student *p,int n);
struct Student
{
char number[20];
char name[20];
float score[4];
float average;
};
int main()
{
struct Student stu[N];
int i;
inGrade(stu,N);
aveGrade(stu,N);
i=maxGrade(stu,N);
outGrade(stu,i);
return 0;
}
void inGrade(struct Student *p,int n)
{
int j;
cout<<"请输入学生信息"<<endl;
for(j=0;j<N;j++)
{
cout<<"学号:";
gets(p->number);
cout<<"姓名:";
gets(p->name );
for(int i=0;i<4;i++)
{
if(i==0) cout<<"该学生programmer成绩:";
if(i==1) cout<<"该学生database成绩:";
if(i==2) cout<<"该学生network成绩:" ;
if(i==3) cout<<"该学生operat-system成绩:";
cin>>(p->score[i]);
getchar();
}
p++;
}
}
void aveGrade(struct Student *p,int n)
{
int i,j;
float sum;
for(j=0;j<N;j++)
{
sum=0; //每次初始化sum
for(i=0;i<4;i++)
{
sum+=(p->score[i]); //求所有学生该门课程的成绩总和
}
p->average=sum/4; //计算该名学生成绩的平均分
p++;
}
}
int maxGrade(struct Student *p,int n)
{
float max;
max=p->average ;
p++;
int k=0;
for(int i=1;i<N;i++)
{
if((p->average )>max)
{
max=p->average ;
k=i; //标记最高平均分学生
}
}
return k; //返回标记值
}
void outGrade(struct Student *p,int n)
{
cout<<"平均分最高的学生学号为:"<<(p+n)->number<<endl;
cout<<"姓名:"<<(p+n)->name<<endl;
for(int i=0;i<4;i++)
{
if(i==0) cout<<"该学生programmer成绩:"<<(p+n) ->score[i]<<endl;
if(i==1) cout<<"database成绩:"<<(p+n) ->score[i]<<endl;
if(i==2) cout<<"network成绩:" <<(p+n) ->score[i]<<endl;
if(i==3) cout<<"operat-system成绩:"<<(p+n) ->score[i]<<endl;
}
cout<<"平均分为:"<<(p+n)->average;
}
//进行排序
#include`<iostream>`
#include`<cstring>`
#include`<iomanip>`
using namespace std;
const int N=3;
void inGrade(struct Student *p,int n);
void aveGrade(struct Student *p,int n);
void sortGrade(struct Student *p,int n);
void outGrade(struct Student *p,int n);
struct Student
{
char number[20];
char name[20];
float score[4];
float average;
};
int main()
{
struct Student stu[N];
inGrade(stu,N);
aveGrade(stu,N);
sortGrade(stu,N);
outGrade(stu,N);
return 0;
}
void inGrade(struct Student *p,int n)
{
int j;
cout<<"请输入学生信息"<<endl;
for(j=0;j<N;j++)
{
cout<<"学号:";
gets(p->number);
cout<<"姓名:";
gets(p->name );
for(int i=0;i<4;i++)
{
if(i==0) cout<<"该学生programmer成绩:";
if(i==1) cout<<"该学生database成绩:";
if(i==2) cout<<"该学生network成绩:" ;
if(i==3) cout<<"该学生operat-system成绩:";
cin>>(p->score[i]);
getchar();
}
p++;
}
}
void aveGrade(struct Student *p,int n) //求每位学生平均成绩
{
int i,j;
float sum;
for(j=0;j<N;j++)
{
sum=0; //每次初始化sum
for(i=0;i<4;i++)
{
sum+=(p->score[i]); //求所有学生该门课程的成绩总和
}
p->average=sum/4; //计算该名学生成绩的平均分
p++;
}
}
void sortGrade(struct Student *p,int n)
{
struct Student temp;
for(int j=0;j<N-1;j++) //进行N-1次排序
{
for(int i=0;i<N-j-1;i++)
{
if(((p+i)->average )>((p+i+1)->average)) //若前一个学生平均成绩超过后一个学生
{
temp=*(p+i); //交换两者位置
*(p+i)=*(p+i+1);
*(p+i+1)=temp;
}
}
}
}
void outGrade(struct Student *p,int n)
{
cout<<"排序后如下:"<<endl;
cout<<"--------------------------------------------------------------------------------------------------"<<endl;
cout<<setw(10)<<"学号"<<setw(10)<<"姓名"<<setw(15)<<"programmer"<<setw(12)<<"database"<<setw(12)<<"network"<<setw(19)<<"operat-system"<<setw(12)<<"平均成绩"<<endl;
for(int i=0;i<N;i++)
{
cout<<setiosflags(ios::right)<<setw(12)<<(p+i)->number<<setw(8)<<(p+i)->name;
cout<<setiosflags(ios::fixed)<<setprecision(2);
for(int j=0;j<3;j++)
{
cout<<setw(12)<<(p+i)->score[j];
}
cout<<setiosflags(ios::fixed)<<setprecision(2)<<setw(8)<<(p+i)->average<<endl;
}
cout<<"--------------------------------------------------------------------------------------------------"<<endl;
}