不知道该怎么解决这个问题?

题目描述: 

上机实习 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;
}

 

string a[1000]; //数组a存储学生的姓名

这个string是不是应该改为是String a[1000]; 

没看懂Sturealize.h是什么内容?按照题主的代码,Student和StudentList类应该是定义再Student.h和Student.cpp中的。

在定义Student时,只包含了<string>,没有指明std的命名空间,在定义变量a的时候也没有指明std::string,可不就报错了嘛

 

感觉你的程序没有大的问题呀,可能是编译器的问题吧?

建议用三个源代码文件:student.h, student.cpp, transcript.cpp

Linux/mac OS系统下编译和运行的命令为

g++ student.cpp transcript.cpp -o transcript && ./transcript

运行结果

请输入学生的人数:
2
请输入学生的姓名:
李明
王强
请依次输入学生的成绩:
60
97
以下是95分的人数和学生姓名:
王强
成绩大于等于95分的总人数是:1
以下是删除了成绩小于20的成绩信息表:
李明60王强97以下是经过调整后的成绩信息表:
李明60王强97%                                   

此外,不太理解这一句是啥意思?#include "stdafx.h"

student.h 文件

// file: student.h
#ifndef STUDENT_H_
#define STUDENT_H_

#include <string>
using namespace std;

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

student.cpp 文件

// file: student.cpp
// #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;
}

transcript.cpp 文件

// file: transcript.cpp
// #include "stdafx.h"
#include<string>
#include<iostream>
#include "student.h"
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;
}