类中对学生成绩的操作(static 学生的总成绩和人数)(2020.12.27)

题目内容:

根据下面部分代码,补充完成学生成绩类Score。在主函数中定义学生成绩对象数组。用Sum()计算每个学生的总成绩、用Show()显示每个学生的成绩。增加静态成员函数getAvg(),用于返回学生的总平均分。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <iomanip>
using namespace std;
class Score {
private:
    int Chinese, Math, English;
    static int TotalScore;
    static int TotalStudent;
public:
    Score() {}
    void setScore (int c, int m, int e) {
        /*补充代码*/
    }
    int Sum() {
       /*补充代码*/
    }
    void Show() {
       /*补充代码*/
    }
    double static getAve() {
       /*补充代码*/
    }
};
int main() {
    int n, op, i, c, m, e;
    cin >> n;
    int id = 1;
    Score sco[11];
while(n--)
{
        cin >> op;
        if(op == 1) {
            cin >> c >> m >> e;
             /*补充代码*/  }
        else if(op == 2) {
            cin >> i;
            /*补充代码*/   }
        else if(op == 3) {
            cin >> i;
            /*补充代码*/   }
        else {
            /*补充代码*/   }
    }
    return 0;
}

输入格式:

包含一组测试数据。第一行输入一个整数n(1<=n<=100)。

接下来n行。每行先输入一个整数op:

当op==1时,输入x, y, z。代表输入一位新同学i(i从1开始编号)的语文、数学、英语成绩,无需输出。

当op==2时,输入i,输出第i同学的总成绩。数据保证这位同学的成绩已经录入。

当op==3时,输入i,依次输出第i同学的语文数学英语成绩,成绩之间用空格隔开。

当op==4时,输出当前已经录入学生的总平均分,结果保留两位小数。

(1<=n<=100, 1<=id<=10, 1<=op<=3, 0<=x,y,z<=100,全部输入都为整型数)

输出格式:

当op==2,3,4时,输出所求答案,每个答案占一行。

输入样例:

【样例输入】 【对应样例输出】

10

1 90 85 90

1 80 90 75

2 1
265

3 2
80 90 75

4
255.00

1 80 80 85

1 50 60 65

1 30 90 75

3 5
30 90 75

4
225.00
下面是对上述题目的实现:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <iomanip>
using namespace std;
class Score {
private:
	int Chinese, Math, English;
	static int TotalScore;//设置静态数据成员学生总成绩
	static int TotalStudent;//设置静态数据成员学生总人数
public:
	Score() {}
	void setScore(int c, int m, int e) {
		Chinese = c;
		Math = m;
		English = e;
		TotalStudent++;/*意义:每产生一个类的对象时,
		TotalStudent就加1*/
		TotalScore = TotalScore + Chinese + Math + English;/*意义:记录所有产生的对象的数据总和*/
	}
	int Sum() {
		int sum;
		sum = Chinese + Math + English;
		cout << sum << endl;
		return 1;
	}
	void Show() {
		cout << Chinese << " " << Math << " " << English << endl;
	}
	double static getAve() {
		cout << TotalScore << endl;/*这个就是我对TotalScore的测试,
		与题目要求无关*/
		return double(TotalScore) / double(TotalStudent);/*不转化为double的话,
		结果后的小数会丢失,因为整形除整形为整形*/
	}
};
int Score::TotalScore = 0;/*对于静态数据成员,
其只能在类体外进行初始化*/
int Score::TotalStudent = 0;
int main() {
	int n, op, i, c, m, e;
	cin >> n;
	int id = 1;
	Score sco[11];
	while (n--)
	{
		cin >> op;
		if (op == 1) {
			cin >> c >> m >> e;
			sco[id].setScore(c, m, e); id++;
		}
		else if (op == 2) {
			cin >> i;
			sco[i].Sum();
		}
		else if (op == 3) {
			cin >> i;
			sco[i].Show();
		}
		else {
			cout << setiosflags(ios::fixed) << setprecision(2) << Score::getAve() << endl;
		}
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值