输入学生信息,姓名 成绩(成绩的数目不一定)
输出每个学生的学号和平均成绩,以及不及格课程数超过2的学生,按不及格课程数从大到小排好序输出。
这道题目按照正常的思路做即可,就是题中输入结束的条件基本没有,因此我这里按照一定的规则将数据输入。
1以00结束大循环的输入,2以-1结束成绩的输入。
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
struct student{
string number;
string name;
double score[100];
int num;
double ave;
};
void show(vector<student> ve){
vector<student>::iterator it;
for(it=ve.begin();it!=ve.end();it++){
cout<<(*it).name<<" "<<(*it).number<<" ";
for(int i=0;(*it).score[i];i++){
cout<<(*it).score[i]<<" ";
}
cout<<(*it).num<<" "<<(*it).ave;
cout<<endl;
}
}
bool cmp(student s1,student s2){
return s1.num>s2.num;
}
void ave(vector<student> &ve){
vector<student>::iterator it;
for(it=ve.begin();it!=ve.end();it++){
double sum=0;
int i=0;
for( i=0;(*it).score[i];i++){
sum+=(*it).score[i];
}
(*it).ave=sum/i;
}
}
void shuchu(vector<student> ve){
vector<student>::iterator it;
int ave=0;
for(it=ve.begin();it!=ve.end();it++){
cout<<(*it).number<<" "<<(*it).ave<<" "<<(*it).num<<endl;
}
}
int main(){
string number,name;
double score=0;
vector<student> ve;
student s;
cout<<"请输入 姓名 学号 成绩,以空格分隔,以-1结束成绩的输入"<<endl;
while(cin>>name>>number){
if(name=="00")break;
int i=0;
for(int i=0;i<100;i++)
s.score[i]=0;
s.number=number;
s.name=name;
s.num=0;
s.ave=0;
while(cin>>score){
if(score==-1)break;
s.score[i++]=score;
if(score<60) s.num++;
}
ve.push_back(s);
getchar();
}
ave(ve);
sort(ve.begin(),ve.end(),cmp);
cout<<"预览,展示存储的信息:(姓名 学号 成绩 不及格门数 平均成绩)"<<endl;
show(ve);
cout<<"接下来输出学生的学号和平均成绩以及不及格科目门数:(按顺序排好)"<<endl;
shuchu(ve);
}