现在需要录入一批学生的成绩(学号,成绩)。其中学号是正整数,并且录入时,后录入学生的学号会比前面的学号大;成绩分两等,通过(Pass,录入时用1代表),不通过(Fail,录入时用0代表)。
由于很多学号都是相邻的,并且学号相邻的学生成绩常常相同。所以在录入时,适当地加了速。如果当前学生的学号比前面的学号大1,且成绩与前面的成绩相同,则只输入0即可。
类定义:
完成Student类
裁判测试程序样例:
#include<iostream>
using namespace std;
/* 请在这里填写答案 */
int main(){
const int size=100;
int i, N, no, score;
Student *st[size];
cin>>N;
for(i=0; i<N; i++){
cin>>no;
if(no>0){
cin>>score;
st[i]=new Student(no, score);
}
else
st[i]=new Student(*st[i-1]);
}
cout<<Student::count<<" Students"<<endl;
for(i=0;i<N;i++) st[i]->display();
for(i=0;i<N;i++) delete st[i];
return 0;
}
输入样例:
5
3 0
0
7 1
0
12 1
输出样例:
5 Students
3 Fail
4 Fail
7 Pass
8 Pass
12 Pass
class Student{
int no;
int score;
public:
static int count;
Student(int n,int s)
{
no=n;
score=s;
count++;
}
Student(Student &p)
{
no=p.no+1;
score=p.score;
count++;
}
void display()
{
cout<<no<<" ";
if(score)
cout<<"Pass"<<endl;
else
cout<<"Fail"<<endl;
}
};
int Student::count=0;
class Student{
int no;
int score;
public:
static int count;
Student(int n,int s):no(n),score(s)
{
count++;
}
Student(Student &p)
{
no=p.no+1;
score=p.score;
count++;
}
void display()
{
cout<<no<<" ";
if(score)
cout<<"Pass"<<endl;
else
cout<<"Fail"<<endl;
}
};
int Student::count=0;
p
是一个对现有 Student
对象的引用。
no=p.no+1;
-
no
是新对象的成员变量。p.no
是现有对象的成员变量。- 这里的意思是,新对象的
no
值等于现有对象的no
值加 1。 - 例如,如果
p.no
是 2,那么新对象的no
值将是 3。
- score=p.score;
score
是新对象的成员变量。p.score
是现有对象的成员变量。- 这里的意思是,新对象的
score
值与现有对象的score
值相同。 - 例如,如果
p.score
是 85,那么新对象的score
值也将是 85。
count++;
count
是Student
类的静态成员变量,用于统计Student
对象的数量。- 每创建一个新的
Student
对象,无论是通过参数化构造函数还是拷贝构造函数,count
都会增加 1。
if(score)
if(score)
条件语句用于检查score
的值是否为非零值。- 如果
score
为非零值(例如正数),输出 "Pass"。 - 如果
score
为零,输出 "Fail"。