6-1 学生成绩的快速录入(构造函数)

现在需要录入一批学生的成绩(学号,成绩)。其中学号是正整数,并且录入时,后录入学生的学号会比前面的学号大;成绩分两等,通过(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++;

  • countStudent 类的静态成员变量,用于统计 Student 对象的数量。
  • 每创建一个新的 Student 对象,无论是通过参数化构造函数还是拷贝构造函数,count 都会增加 1。

   if(score) 

  • if(score) 条件语句用于检查 score 的值是否为非零值。
  • 如果 score 为非零值(例如正数),输出 "Pass"。
  • 如果 score 为零,输出 "Fail"。

 

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值