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