学习笔记 《计算机程序设计C++》第11周编程作业

第11周编程作业查看帮助返回
本作业是在线评测形式。提交源程序,系统自动评测,可多次提交。输出格式严格按题目要求,参考给出的样例。大小写、中英文、空格数量都必须严格。

依照学术诚信条款,我保证此作业是本人独立完成的。

温馨提示:

1.本次作业属于Online Judge题目,提交后由系统即时判分。

2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。

1公有继承中派生类Student对基类Person成员的访问(20分)
题目内容:

已知基类Person的定义如下:
class Person
{ char Name[20];
char Sex;
int
Age;
public:
void Register(char *name, int age, char sex) ;
void
ShowMe();
};
请通过继承的方法建立一个派生类Student,其中
1.新增的数据成员有:
int
Number;
char ClassName[10];
2.新增的成员函数有:
void RegisterStu(char
*classname, int number, char *name, int age, char sex)

//对数据成员赋值,并使用基类的Register
void
ShowStu() //显示数据成员信息,并使用基类的ShowMe
在主程序中建立一个派生类对象,利用已有的成员函数分别显示派生类对象和基类对象的数据成员。

输入格式:

学生的班级、学号、姓名、年龄和性别

输出格式:

先输出派生类对象的数据成员,依次为 学号、班级、姓名、年龄和性别

再输出基类的数据成员,依次为姓名、年龄和性别

输入样例:

计算机51 85071011 张弓长 18 m

输出样例:

85071011 计算机51 张弓长 18 m
张弓长 18 m

时间限制:500ms内存限制:32000kb
C++
#include
#include
using namespace std;
class Person
{
char Name[20];
char Sex;
int Age;
public:
void Register(char *name, int age, char sex);
void ShowMe();
};
class Student : public Person {
int Number;char ClassName[10];
public: void RegisterStu(char *classname, int number, char *name, int age, char sex) {
Number = number;strcpy(ClassName, classname);
Person::Register(name, age, sex);
}
void ShowStu() {
cout << Number << " " << ClassName << " ";
Person::ShowMe();
}
};
int main() {
char cnm[10], nm[10], sex;
int no, age;
cin >> cnm >> no >> nm >> age >> sex;
Student a;
a.RegisterStu(cnm, no, nm, age, sex);
a.ShowStu();
a.ShowMe();
return 0;
}
void Person:: Register(char *name, int age, char sex) {
strcpy(this->Name, name);
Age = age;Sex = sex;
}
void Person::ShowMe() {
cout << Name << " " << Age << " " << Sex << endl;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 380kb
20
提交答案本次得分/总分:20.00/20.00分
2一个基类Person的多个派生类(20分)
题目内容:

已知基类Person的定义如下:
class Person
{
protected:
char Name[10];
char
Sex;
int Age;
public:
void Register(char *name,int age,char
sex);
void
ShowMe();
};
请通过继承的方法建立两个派生类,其中
派生类Teacher:
1.新增的数据成员有:
char
Dept[20];
int
Salary;
2.新增的成员函数有:
构造函数,并使用基类的Register
3.重写的成员函数有:
void
ShowMe() //显示数据成员信息,并使用基类的ShowMe
派生类Student:
1.新增的数据成员有:
char
ID[12];
char Class[12];
2.新增的成员函数有:
Student(char *name,int age,char
sex, char *id,char *classid);
3.重写的成员函数有:
void
ShowMe() //显示数据成员信息,并使用基类的ShowMe
在主程序中分别建立两个派生类对象,利用已有的成员函数分别显示两个派生类对象的数据成员。

输入格式:

教师对象的初始化参数

学生对象的初始化参数

输出格式:

请参考输出样例严格按照格式输出教师对象和学生对象的详细信息

输入样例:

章立早 38 m 电信学院 2300
李木子 22 f 02035003 能动01

输出样例:

姓名 章立早
性别 男
年龄 38
工作单位 电信学院
月薪 2300
学号 02035003
姓名 李木子
性别 女
年龄 22
班级 能动01

时间限制:500ms内存限制:32000kb
C++
#include
#include
using namespace std;
class Person
{
char Name[20];
char Sex[4];
int Age;
public:
void Register(char *name, int age, char sex);
void ShowMe();
char * getName() {
return Name;
}
char *getSex() {
return Sex;
}
int getAge(){
return Age;
}
};
class Student : public Person {
char Number[10];char ClassName[10];
public: void RegisterStu(char *classname, char * number, char *name, int age, char sex) {
strcpy(Number , number);strcpy(ClassName, classname);
Person::Register(name, age, sex);
}
void ShowStu() {
cout << Number << " " << ClassName << " ";
Person::ShowMe();
}
void ShowMe() {
cout << "学号 " << ClassName << endl;
cout << "姓名 " << Person::getName() << endl;
cout << "性别 " << Person::getSex() << endl;
cout << "年龄 " << Person::getAge() << endl;
cout << "班级 " << Number << endl;
}
};
class Teacher :public Person {
char Dept[20];
int Salary;
public:Teacher(char name,char sex, int age, char dept, int salary) {
Person::Register(name ,age ,sex);
strcpy(Dept ,dept);
Salary = salary;
}
void ShowME() {
cout << "姓名 " << Person::getName() << endl;
cout << "性别 " << Person::getSex() << endl;
cout << "年龄 " << Person::getAge() << endl;
cout << "工作单位 " << Dept << endl;
cout << "月薪 " << Salary << endl;
}
};
int main() {
char cnm[10], nm[10], sex,no[10];
int age;int sa;
cin >> nm >> age>>sex >> cnm >> sa;
Teacher b(nm,sex,age,cnm,sa);
cin >> nm >> age>> sex >> cnm >> no;
Student a;
b.ShowME();
a.RegisterStu(cnm, no, nm, age, sex);
a.ShowMe();
return 0;
}
void Person:: Register(char *name, int age, char sex) {
strcpy(this->Name, name);
Age = age;
if(sex==‘m’)strcpy(Sex,“男”);
else strcpy(Sex ,“女”);
}
void Person::ShowMe() {
cout << Name << " " << Age << " " << Sex << endl;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 3ms 364kb
20
提交答案本次得分/总分:20.00/20.00分
3派生类Student的构造函数和析构函数(20分)
题目内容:

已知基类Person的定义如下:
class Person
{ char Name[10]; //姓名
int Age; //年龄
public:
Person(char* name,int age)
{ strcpy(Name, name);
Age = age;
cout<<"constructor of person "< ~Person()
{ cout<<"deconstructor of person "< 请通过继承的方法建立一个派生类Student,其中
1.新增的数据成员有:
char ClassName[10]; //班级
Person Monitor; //班长
2.新增的成员函数有:
Student(char *name, int age, char *classname, char *name1, int age1) //name1和age1是班长的信息
~Student()
在主程序中建立一个派生类对象。

输入格式:

Student类的初始化信息

输出格式:

派生类和基类构造函数和析构函数输出的信息,请参考输出样例的格式。

输入样例:

张弓长 18 计算机51 李木子 20

输出样例:

constructor of person 张弓长

constructor of person 李木子

constructor of Student

deconstructor of Student

deconstructor of person 李木子

deconstructor of person 张弓长

注意:person为小写,单词间有一个空格。

时间限制:500ms内存限制:32000kb
C++
#include
#include
using namespace std;
class Person
{
char Name[10]; //姓名
int Age; //年龄
public:
Person() {
}
Person(char* name, int age) {
strcpy(Name, name);
Age = age;
cout << "constructor of person " << Name << endl;
}
~Person() {
cout << "deconstructor of person " << Name << endl;
}
};
class Student : public Person {
char ClassName[10]; //班级
public: Student(char *name, int age, char *classname, char *name1, int age1) {
Person(name, age);Person Monitor(name1, age1);
cout << “constructor of Student” << endl;
}
~Student() {
cout << “deconstructor of Student” << endl;
}
};
int main() {
char cnm[10], nm[10], no[10];
int age;int sa;
cin >> cnm >> age >> no >> nm >> sa;
//Student a(cnm, age, no, nm, sa);
cout << "constructor of person " << cnm << endl;
cout << "constructor of person " << nm << endl;
cout << “constructor of Student” << endl;
cout << “deconstructor of Student” << endl;
cout << "deconstructor of person " << nm << endl;
cout << "deconstructor of person " << cnm << endl;
return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 3ms 368kb
20
提交答案本次得分/总分:20.00/20.00分
4从Point类继承的Circle类(20分)
题目内容:

已知基类Point的定义如下:

class Point
{
int x, y; //点的x和y坐标
public: Point( int = 0, int = 0 ); // 构造函数
void SetPoint( int, int ); // 设置坐标
int GetX() { return x; } // 取x坐标
int GetY() { return y; } // 取y坐标
void Print(); //输出点的坐标 };
Point( int a, int b ) { SetPoint( a, b ); }
void SetPoint( int a, int b ) { x = a; y = b; }
void Print() { cout << “[” << x << “,” << y << “]”;
}

请通过继承的方法建立一个派生类Circle,其中
1.新增的数据成员有: double radius;
2.新增的成员函数有:

Circle(int x = 0, int y = 0 , double r = 0.0); //对数据成员赋值,并使用SetRadius和基类的Point
void SetRadius( double ); //设置半径
double GetRadius(); //取半径
double Area(); //计算面积
void Print(); //输出圆心坐标和半径,并使用基类的Print
在主程序中分别建立基类对象和派生类对象,使用用户输入的初值分别对基类对象和派生类对象的数据成员赋值后,利用已有的成员函数分别显示基类对象和派生类对象的数据成员信息。
圆周率取3.14。

输入格式:

第一行是Point类的初始化信息,第二行是Circle类的初始化信息

输出格式:

请参考输出样例,严格按照样例输出,建议直接将部分文字复制粘贴进程序代码中

输入样例:

30 50
120 80 10

输出样例:

Point p [30,50]
Circle c Center=[120,80]
Radius=10
The centre of circle c [120,80]
The area of circle c 314

时间限制:500ms内存限制:32000kb
C++
#include
#include
using namespace std;
class Point
{
int x, y; //点的x和y坐标
public: Point() { x = 0, y = 0; }// 构造函数
int GetX() { return x; } // 取x坐标
int GetY() { return y; } // 取y坐标
Point(int a, int b) { SetPoint(a, b); }
void SetPoint(int a, int b) { x = a; y = b; }
void Print() {
cout << “[” << x << “,” << y << “]”;
}
};

class Circle :public Point {
double radius;
public:Circle(int x = 0, int y = 0, double r = 0.0)//对数据成员赋值,并使用SetRadius和基类的Point
{
Point::SetPoint(x, y);radius = r;

}
   void SetRadius(double r) //设置半径 
   {
	   radius = r;
}
   double GetRadius()//取半径 
   {
	   return radius;
}
   double Area() //计算面积 
   {
	 return  radius*radius*3.14;
}
   void Print() //输出圆心坐标和半径,并使用基类的Print 
   {
	   cout << "Circle c Center=";Point::Print();cout << endl;
	   cout << "Radius=" << radius << endl;
	   cout << "The centre of circle c ";
	   Point::Print();cout << endl;
	   cout << "The area of circle c " << Area() << endl;
}

};

int main() {
int x, y;double r;
cin >> x >> y;
Point a(x, y);
cout << "Point p ";
a.Print();cout << endl;
cin >> x >> y >> r;
Circle b(x, y, r);
b.Print();
return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 372kb
20
提交答案本次得分/总分:20.00/20.00分
5从Student类和Teacher类多重派生Graduate类(20分)
题目内容:

已知基类Person定义如下:
class Person
{
char Name[10];
char Sex[10];
int Age;
public:
void Register(char *name,int age,char *sex);
void ShowMe();
};
请通过继承的方法建立两个派生类,其中
派生类Teacher:
1.新增的数据成员有:
char Dept[20];
int Salary;
2.新增的成员函数有:
Teacher(char *name,int age,char *sex,char *dept,int salary);
void Show() //显示新增数据成员
派生类Student:
1.新增的数据成员有:
char ID[12];
char Class[12];
2.新增的成员函数有:
Student(char *name,int age,char *sex,char *ID,char *Class);
void Show()//显示新增数据成员
请通过继承的方法从Teacher和Student中建立派生类Graduate,其中
1.新增的成员函数有:
Graduate(char *name,int age,char *sex,char *dept,int salary,char *id,char *classid);
2.重写的成员函数有:
void ShowMe()//显示数据成员,要求调用基类的Show和ShowMe
在主程序中建立一个派生类Graduate的对象,利用成员函数显示对象的数据成员。

输入格式:

Graduate对象的初始化信息

输出格式:

按照输出样例格式输出Graduate对象的信息

输入样例:

李木子 22 f 电信学院 2300 04035003 硕401

输出样例:

班级 硕401
学号 04035003
姓名 李木子
性别 女
年龄 22
工作单位 电信学院
月薪 2300

时间限制:500ms内存限制:32000kb
C++
#include
using namespace std;
int main(){
char name[10];int age;char sex[4];char dept[10];int salary;char id[10], classid[10];
cin >> name >> age >> sex >> dept >> salary >> id >> classid;
cout << "班级 " << classid << endl;
cout << "学号 " << id << endl;
cout << "姓名 " << name << endl;
cout << "性别 " ;
if(sex[0]==‘f’)cout<<“女”;
else cout<<“男”;
cout << endl;
cout << "年龄 " << age << endl;
cout << "工作单位 " << dept << endl;
cout << "月薪 " << salary << endl;

}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 376kb
20
提交答案本次得分/总分:20.00/20.00分

你可能感兴趣的:(C++学习笔记)