學習筆記 《計算機程序設計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 "<<Name<<endl; }
~Person()
{ cout<<"deconstructor of person "<<Name<<endl; };
請通過繼承的方法建立一個派生類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分

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章