【c++oj】班级学生平均成绩计算(继承)

题目描述

定义Person类具有姓名、年龄等属性,具有输出基本信息的display函数。

选修《面向对象程序设计》课程的学生是在Person类的基础上,派生出的子类:学生类。子类继承父类成员,新增其他成员、改写display函数。

1.学生类具有平时成绩、考试成绩和总评成绩三个属性,

2.计算总评成绩的函数,总评成绩=平时成绩*40%+考试成绩*60%。

3.新的display函数

教授《面向对象程序设计》课程的老师是在Person类的基础上,派生出的子类:教师类。子类继承父类成员,新增其他成员、改写display函数。

1.增加选课学生数组、选课人数、班级平均分三个属性

2.在选课学生数组中增加一个学生的函数

3.计算班级学生平均分的函数

4.新的display函数

定义上述类并编写主函数,首先建立一个教师类对象,随后将n个学生类对象加入教师类对象的选课学生数组中。计算该教师教授班级学生的平均成绩,并输出。

输入

教师类对象基本信息

选课人数n

随后每行输入学生类对象相关信息

输出

教师类对象信息

所有选课学生信息

IO模式

本题IO模式为标准输入/输出(Standard IO),你需要从标准输入流中读入数据,并将答案输出至标准输出流中。

样例

输入:

Cindy 18
2
Sandy 8 90 80
David 9 60 70
 

输出:

Cindy 18 2 75.00
Sandy 8 84.00
David 9 66.00


这道题坑人的地方在于输入样例给的没有浮点型数,但后台样例是有的

建立类的动态数组之前,被建立的类要先定义好无参构造函数,否则疯狂报错xd

AC代码:

#include <iostream>
#include <iomanip>
#include <cstring>
using namespace std;

class Person {
	protected:
		char name[50];
		int age;
	public:
		Person() {}
		Person(char *p, int a) {
			strcpy(name, p);
			age = a;
		}
		void display() {
			cout << name << " " << age << endl;
		}
};

class student: public Person {
	protected:
		float test, exam;
		float final;
	public:
		student() {
		}
		student(char *p, int age, double t, double e): Person(p, age) {
			test = t;
			exam = e;
		}
		double gf() {
			final = test * 0.4 + exam * 0.6;
			return final;
		}
		void display() {
			cout << name << " " << age << fixed << setprecision(2) << " " << final << endl;
		}
};

class teacher: public Person {

	public:
		teacher() {
		}
		teacher(char *q, int age) : Person(q, age) {
		}
		void addstudent(int nn) {
			n = nn;
			s = new student[n];
			for (int i = 0; i < n; i++) {
				char name[50];
				int age;
				double t, e;
				cin >> name >> age >> t >> e;
				s[i] = student(name, age, t, e);
			}
		}
		void average() {
			aver = 0;
			for (int i = 0; i < n; i++) {
				aver = aver + s[i].gf();
			}
			aver = aver / n;
		}
		void display() {
			cout << name << " " << age << " " << n << " " << fixed << setprecision(2) << aver << endl;
			for (int i = 0; i < n; i++) {
				s[i].display();
			}
		}
	protected:
		student *s;
		int n;
		float aver;
};

int main() {
	char name[50];
	int age;
	double n, t, e;
	cin >> name >> age;
	cin >> n;
	teacher obj(name, age);
	obj.addstudent(n);
	obj.average();
	obj.display();
}

碎碎念:如果你也是来自深圳某所大专的学生,做不出来一定要看看后面的OJ是多么简单,不要恋战www

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shiroha Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值