成绩排名次
某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。要求:
(1)计算每个学生的总分和平均分;
(2)按总分成绩由高到低排出成绩的名次;
(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;
(4)任意输入一个学号,能够查出该学生在班级中的排名及其考试分数
编程要求:
1.较好的用户输入输出提示信息
2.使用子函数来实现上述各个功能
3.必须用结构体数组实现
提示:
设计好存放学生信息的结构体,方便编程。
用函数编程实现计算每个学生的总分;
用函数编程实现按总分由高到低对学生成绩排序
用函数编程实现查学号为k的学生在班级中的排名名次及相关成绩等信息,不到时返回-1值
程序代码如下:
#include<iostream>
#include<iomanip>
using namespace std;
struct student
{
char NAME[20];//名字
long NUM;//学号
double MT;//数学
double EN;//英语
double PH;//物理
double sum;//总分
};
int ReadScore(student stu[])//输入名字———成绩
{
int count=0;//人数
cout.setf(ios::right);
cout<<"名字"<<setw(5);
cout<<"学号"<<setw(5);
cout<<"数学"<<setw(5);
cout<<"英语"<<setw(5);
cout<<"物理"<<setw(5);
cout<<endl;
for(int i=0;i<30;i++)
{
cin>>stu[i].NAME>>stu[i].NUM>>stu[i].MT>>stu[i].EN>>stu[i].PH;
if(stu[i].MT<=0)
break;
count++;
}
return count;
}
int GetSum(student stu[],int n)
{
double Sum=0;
for(int i=0;i<n;i++)
{
stu[i].sum=0;
stu[i].sum=stu[i].MT+stu[i].EN+stu[i].PH; //总分
}
Sum=stu[i].sum;
return Sum;
}
void print_1(student stu[],int n)//打印学生成绩表
{
for(int m=n-1;m>0;m--)
{
int max=0;
char name[20];//姓名
long num=0;//学号
double mt=0;//数学
double en=0;//英语
double ph=0;//物理
for(int i=0;i<m;i++)//排序
{
if(stu[i].sum<stu[i+1].sum)
{
strcpy(name,stu[i].NAME);
strcpy(stu[i].NAME,stu[i+1].NAME);
strcpy(stu[i+1].NAME,name);
num=stu[i].NUM;
stu[i].NUM=stu[i+1].NUM;
stu[i+1].NUM=num;
mt=stu[i].MT;
stu[i].MT=stu[i+1].MT;
stu[i+1].MT=mt;
en=stu[i].EN;
stu[i].EN=stu[i+1].EN;
stu[i+1].EN=en;
ph=stu[i].PH;
stu[i].PH=stu[i+1].PH;
stu[i+1].PH=ph;少儿编程排名前十名
max=stu[i].sum;
stu[i].sum=stu[i+1].sum;
stu[i+1].sum=max;
}
}
}
cout.setf(ios::left);
cout<<"总成绩表:"<<endl;
cout<<"排名"<<setw(5);
cout<<"姓名"<<setw(5);
cout<<"学号"<<setw(5);
cout<<"总分"<<setw(5);
cout<<"高数"<<setw(5);
cout<<"英语"<<setw(5);
cout<<"物理"<<setw(5);
cout<<"平均分"<<endl;
for(int j=0;j<n;j++)
{
cout.setf(ios::left);
cout<<j+1<<setw(5);
cout<<stu[j].NAME<<setw(5);
cout<<stu[j].NUM<<setw(5);
cout<<stu[j].sum<<setw(5);
cout<<stu[j].MT<<setw(5);
cout<<stu[j].EN<<setw(5);
cout<<stu[j].PH<<setw(5);
cout<<stu[j].sum/3<<endl;
}
}
int find(student stu[],int n)
{
int a=0,b=0;
long num;
cin>>num;
for(int j=0;j<n;j++)
{
if(num==stu[j].NUM)
{
b++;
a++;
}
}
if(b!=0)
{
cout.setf(ios::left);
cout<<"排名"<<setw(5);
cout<<"姓名"<<setw(5);
cout<<"学号"<<setw(5);
cout<<"总分"<<setw(5);
cout<<"高数"<<setw(5);
cout<<"英语"<<setw(5);
cout<<"物理"<<setw(5);
cout<<"平均分"<<endl;
}
for(int i=0;i<n;i++)
{
if(num==stu[i].NUM)
{
cout.setf(ios::left);
cout<<i+1<<setw(5);
cout<<stu[i].NAME<<setw(5);
cout<<stu[i].NUM<<setw(5);
cout<<stu[i].sum<<setw(5);
cout<<stu[i].MT<<setw(5);
cout<<stu[i].EN<<setw(5);
cout<<stu[i].PH<<setw(5);
cout<<stu[i].sum/3<<endl;
}
}
if(a==0)
{
cout<<"查无此人!请重新输入:";
return -1;
}
}
int main()
{
student stu[30];
float a;
a=ReadScore(stu);
cout<<"==============================================="<<endl;
GetSum(stu,a);
for(int i=0;i<a;i++)
{
cout.setf(ios::left);
cout<<"姓名"<<stu[i].NAME<<setw(5);
cout<<"数学"<<stu[i].MT<<setw(5);
cout<<"英语"<<stu[i].EN<<setw(5);
cout<<"物理"<<stu[i].PH<<endl;
}
cout<<"总人数:"<<a<<endl;
cout<<"==============================================="<<endl;
print_1(stu,a);
cout<<"==============================================="<<endl;
cout<<endl<<"请输入要查的学号:";
find(stu,a);
cout<<endl;
return 0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论