C++,关于数组与结构体的结合。初学者,谢谢
定义一个学生成绩结构体类型,包含“学号”、“姓名”、“性别”、“年龄”、“班级”、“英语”、“数学”、“物理”、“总分”、“名次”等信息。编写6个函数分别用于:(1) 使用结构体数组,输入全班10名学生的上述信息;
(2) 计算每一个学生的总分、平均分;
(3) 计算每一门课程的平均分;
(4) 查找成绩有不及格的学生信息;
(5) 按学生成绩总分降序排序;
(6) 输出全班学生的学号、总分及名次。
2016-03-10 11:29

2016-03-10 11:30
2016-03-10 15:30
程序代码:/**
定义一个学生成绩结构体类型,包含“学号”、“姓名”、“性别”、“年龄”、“班级”、“英语”、“数学”、“物理”、“总分”、“名次”等信息。编写6个函数分别用于:
(1) 使用结构体数组,输入全班10名学生的上述信息;
(2) 计算每一个学生的总分、平均分;
(3) 计算每一门课程的平均分;
(4) 查找成绩有不及格的学生信息;
(5) 按学生成绩总分降序排序;
(6) 输出全班学生的学号、总分及名次。
以下是简单写的几下,没做优化,容错性很差,必须按要求输入,正常情况下可以达到你的要求,只是没写查找不及格的代码,懒的写了,基本的方法都在以下代码中能找到,自己写剩下的吧
*/
#include<iostream>
#include<string>
#include<fstream>
#define MAX 2
struct Student
{
unsigned int ID;
std::string name;
std::string sex;
unsigned int age;
unsigned int grade;
unsigned int English;
unsigned int Math;
unsigned int Chinese;
unsigned int Physics;
unsigned int total=0;
unsigned int average=0;
unsigned int rank_=0;
};
struct StudentInfo
{
Student student[MAX];
int average[4];
};
std::ostream & operator<<(std::ostream & os,const Student stu)
{
os<<"ID:"<<stu.ID<<"\ttotal:"<<stu.total<<"\trank:"<<stu.rank_<<std::endl;
return os;
}
void show(Student ss[],const int n)
{
int len=n;
int i=0;
for(;i<len;i++)
{
std::cout<<ss[i]<<std::endl;
}
}
void SortByTotal(Student s[],const int n)
{
int len=n;
int i=0;
for(;i<len;i++)
{
for(int j=i+1;j<len;j++)
{
if(s[i].total<s[j].total)
{
Student temp;
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
s[i].rank_=i+1;
}
}
void aver(StudentInfo &ss,int n)
{
int len=n;
int sum[4]={0};
for(int i=0;i<len;i++)
{
sum[0]+=ss.student[i].English;
sum[1]+=ss.student[i].Math;
sum[2]+=ss.student[i].Chinese;
sum[3]+=ss.student[i].Physics;
}
ss.average[0]=sum[0]/len;
ss.average[1]=sum[1]/len;
ss.average[2]=sum[2]/len;
ss.average[3]=sum[3]/len;
}
void TotalAndAverageCalculate(Student& s)
{
s.total=s.English+s.Math+s.Chinese+s.Physics;
s.average=s.total/4;
}
void Calculate(Student* stu,const int length)
{
int i=0;
int temp=length;
for(;i<temp;i++)
{
TotalAndAverageCalculate(*(stu+i));//计算第i个学生和平均分和总分
}
}
void GetInfoFromKeyboard(Student StuArr[],const int length)//读入学生信息
{
int i=0;
int temp=length;
for(;i<temp;i++)
{
std::cout<<"学号:";
std::cin>>StuArr[i].ID;
std::cout<<"姓名:";
std::cin>>StuArr[i].name;
std::cout<<"性别:";
std::cin>>StuArr[i].sex;
std::cout<<"年龄:";
std::cin>>StuArr[i].age;
std::cout<<"年级:";
std::cin>>StuArr[i].grade;
std::cout<<"英语:";
std::cin>>StuArr[i].English;
std::cout<<"数学:";
std::cin>>StuArr[i].Math;
std::cout<<"语文:";
std::cin>>StuArr[i].Chinese;
std::cout<<"物理:";
std::cin>>StuArr[i].Physics;
}
}
int main()
{
StudentInfo ss;
GetInfoFromKeyboard(ss.student,MAX);//录入信息
std::cout<<"录入学生信息如下:\n";
show(ss.student,MAX);
Calculate(ss.student,MAX);//计算10个学生各自的总分与平均分
aver(ss,MAX);//每门课的平均分
std::cout<<"录入学生信息统计如下:\n";
show(ss.student,MAX);
SortByTotal(ss.student,MAX);
std::cout<<"录入学生信息排序如下:\n";
show(ss.student,MAX);
return 0;
}
2016-03-11 11:26
2016-03-11 12:35

2016-03-11 14:57
2016-03-12 21:52
2016-03-15 23:12