题目描述:
上机实习 1. 对于最多由 100 名学生的姓名和成绩信息(王洪, 90 )构成的线性表建立顺序表,并完成下面的而操作: ( 1 )统计成绩大于等于 95 分的人数,并输出这些学生的姓名。 ( 2 )删除成绩小于 20 分的信息。 ( 3 )以 60 分为分界线,将表中所有小于 60 的信息放在表的前半部分,大于 60 的元素放在表的后半部分。
运行代码主要出错在:在Sturealize.h中的字符串数组a不属于Student类的变量
应该如何修改?
不要把类改成数组进行运行。
#include"stdafx.h"
#include"Student.h"
#include<iostream>
using namespace std;
Student StudentList:: Excellent(Student &s)
{
int j=0;
cout<<"以下是95分的人数和学生姓名:"<<endl;
for(int i=0;i<3;i++)
{
if(s.Grade[i]>=95)
{ j++;
cout<<s.a[i]<<endl;
}
}
cout<<"成绩大于等于95分的总人数是:"<<j<<endl;
return s;
}
Student StudentList::DeleteBad(Student &s)
{
int j=0;
for(int i=0;i<s.length;i++)
{
if(s.Grade[i]<20)
{
j=i;
for(int i=j-1;i<s.length-1;i++)
{
s.a[i]=s.a[i+1];
s.Grade[i]=s.Grade[i+1];
s.length--;
}
}
}
cout<<"以下是删除了成绩小于20的成绩信息表:"<<endl;
for(int i=0;i<s.length;i++)
{
cout<<s.a[i]<<s.Grade[i];
}
return s;
}
Student StudentList::Change(Student &s)
{
int m=60,i=0,j=s.length-1,temp;
while(i<j)
{
while(s.Grade[i]<m)
i++;
while(s.Grade[j]>m)
j--;
if(i<j&&s.Grade[i]>m&&s.Grade[j]<m)
{
temp=s.Grade[j];
s.Grade[j]=s.Grade[i];
s.Grade[i]=temp;
}
i++;
j--;
}
cout<<"以下是经过调整后的成绩信息表:"<<endl;
for(int i=0;i<s.length;i++)
{
cout<<s.a[i]<<s.Grade[i];
}
return s;
}
#include<string>
#ifndef STUDENT
#define STUDENT
class Student
{
public:
int Grade[1000];
string a[1000]; //数组a存储学生的姓名
int length;
};
class StudentList
{
public:
friend class Student;
Student Excellent(Student &s);
Student DeleteBad(Student &s);
Student Change(Student &s);
};
#endif
#include "stdafx.h"
#include"Student.h"
#include"Sturealize.h"
#include<string>
#include<iostream>
using namespace std;
int main()
{
Student s;
StudentList S;
cout<<"请输入学生的人数:"<<endl;
cin>>s.length;
cout<<"请输入学生的姓名:"<<endl;
for(int i=0;i<s.length;i++)
{
cin>>s.a[i];
}
cout<<"请依次输入学生的成绩:"<<endl;
for(int i=0;i<s.length;i++)
{
cin>>s.Grade[i];
}
S.Excellent(s);
S.DeleteBad(s);
S.Change(s);
return 0;
}