# 學習筆記《計算機程序設計C++》第10周編程作業

1.本次作業屬於Online Judge題目，提交後由系統即時判分。

2.學生可以在作業截止時間之前不限次數提交答案，系統將取其中的最高分作爲最終成績。

1定義一個帶重載構造函數的日期類（20分）

init(int,int,int)。

1.

2.

3. 輸入數據，用init函數爲d1賦值；
2．按“年-月-日”格式顯示對象d1的值；。

d1的默認值

d2的初始值

d1賦值後的值

2011 4 29

1900-1-1
2100-12-12
2011-4-29

C++

``````#include<iostream>
using namespace std;
class date{
int year,month,day;

public:
date(){
year=1900,month=1,day=1;
}
date(int y,int m,int d){
year=y,month=m,day=d;
}
void init(int y,int m,int d){
year=y,month=m,day=d;
}
void show(){
cout<<year<<"-"<<month<<"-"<<day<<endl;
}
};
int main(){
date d1,d2(2100,12,12);
d1.show();d2.show();
int y,m,d;
cin>>y>>m>>d;
d1.init(y,m,d);d1.show();
return 0;
}
``````

10

10

2動態生成Person類的對象（20分）

destroying the instance of
Person”；

p2；

person1和person2的默認值

person1和person2的賦值後的值

Bobs 24 m

person1:XXX 0 m
person2:XXX 0 m
person1:Bobs 24 m
person2:Bobs 24
m
Now destroying the instance of Person
Now destroying the instance of
Person

C++

``````#include<iostream>
#include<cstring>
using namespace std;
class Person {
char name[20];int age;char sex;
public:
Person() {
strcpy(name, "XXX"), age = 0, sex = 'm';
}
~Person() {
cout << "Now destroying the instance of Person\n";
}
void Register(char n[],int a,char s) {
strcpy(name, n), age = a;sex = s;
}
void show() {
cout << name << " " << age << " " << sex<< endl;
}
};
int main() {
Person *p1 = new Person;
Person *p2 = new Person;
char name[20];int age;char s;
cin >> name >> age >> s;
cout << "person1:";p1->show();cout << "person2:";p2->show();
p1->Register(name, age, s);
*p2 = *p1;
cout << "person1:";p1->show();
cout<<"person2:";p2->show();
delete p1;delete p2;
return 0;
}
``````

20

3設計帶構造函數的Dog類（20分）

Tom 4 m 2.4

Tom

4

m

2.4

Arf!Arf!

C++

``````#include<iostream>
#include<cstring>
using namespace std;
class Dog {
char name[20];int age;char sex;double wight;
public:
Dog() {
strcpy(name, "xxx"), age = 0, sex = 'm',wight=2.4;
}
~Dog() {
cout << "Now destroying the instance of	Dog\n";
}
void Register(char n[],int a,char s,double w) {
strcpy(name, n), age = a;sex = s;wight = w;
}
void speak() {
cout << "Arf!Arf!\n";
}
void show() {
cout << name << "\n" << age << "\n" << sex<< endl<<wight<<endl;
}
};
int main() {
Dog *p1 = new Dog;
char name[20];int age;char s;double wight;
cin >> name >> age >> s>>wight;
p1->Register(name, age, s,wight);
p1->show();
p1->speak();
return 0;
}
``````

20

4設計並測試一個橢圓類（20分）

Area()）。

S（橢圓面積）=PI(圓周率)×a（長半軸）×b（短半軸）

1 1 1 2

6.28

C++

``````#include<iostream>
#include<cstring>
using namespace std;
class Ellipse {
double x, y, l, r;
public:
Ellipse() {
x = y = l = r = 0;
}
~Ellipse() {
cout << "Now destroying the instance of	Ellipse\n";
}
void Register(double x,double y,double l,double r) {
this->x = x;
this->y = y;
this->l = l;
this->r = r;
}
double area() {
return l * r*3.14;
}
};
int main() {
Ellipse *p1 = new Ellipse;
double x, y, l, r;
cin >> x>>y>>l>>r;
p1->Register(x, y, l, r);
cout << p1->area();
return 0;
}
``````

10

10

5設計一個多功能的MyTime類（20分）

（1）請考慮設置的時間的合理性（時0-23； 分0-59；秒0-59）。

（2）12小時制中，12:00:00前爲AM， 12:00:00及以後爲PM

（3）加減運算的加數、減數是一個時間的長度，單位爲“時、分、秒”

（4）構造函數：沒參數時，設置時間爲0時 0分 0秒；有參數時，設置成給定的時、分、秒。

（1）聲明兩個對象t1,t2，並通過構造函數初始化它們（t2初始化爲爲8：10：30）

（2）顯示按12、14小時制顯示t1、t2的時間。

（3）再設置t1的時間，數據由用戶輸入。

（4）再輸入待加減的時間。

（5）t1加輸入的時間，並按12小時和24小時制顯示。

（6）t2減輸入的時間，並按12小時和24小時制顯示。

t1加輸入的待加減的時間按12小時和24小時制顯示。

t2減輸入的待加減的時間按12小時和24小時制顯示

11 30 30

5 15 20

00:00:00 AM

00:00:00

08:10:30 AM

08:10:30

04:45:50 PM

16:45:50

02:55:10 AM

02:55:10

C++

``````#include<iostream>
#include<cstring>
using namespace std;
class MyTime {
int hh,mm,ss;
public:
MyTime() {
hh =  mm = ss = 0;
}
MyTime(int h, int m, int s) {
if (h >= 24)h = 0;if (m >= 60)m = 0;if (s >= 60)s = 0;
hh = h, mm = m, ss = s;
}
void Register(int h, int m, int s) {
if (h >= 24)h = 0;if (m >= 60)m = 0;if (s >= 60)s = 0;
hh = h, mm = m, ss = s;
}
if (h >= 24)h = 0;if (m >= 60)m = 0;if (s >= 60)s = 0;
ss += s;
if (ss >= 60) { mm++;ss -= 60; }
mm += m;
if (mm >= 60) { hh++;mm -= 60; }
hh += h;
if (hh > 23) { hh -= 24; }
}
else {
ss -= s;
if (ss < 0) {
ss += 60;mm--;
}
mm -= m;
if (mm < 0) {
mm += 60;hh--;
}
hh -= h;
if(hh < 0){
hh += 24;
}
}
}
void show() {
int h = hh;
if (h > 11)h -= 12;
if (h < 10)cout << 0;
cout << h << ":";
if (mm < 10)cout << 0;
cout << mm << ":";
if (ss < 10)cout << 0;
cout << ss << " ";
if (hh >= 12)cout << "PM\n";
else cout << "AM\n";
if (hh < 10)cout << 0;
cout << hh << ":";
if (mm < 10)cout << 0;
cout << mm << ":";
if (ss < 10)cout << 0;
cout << ss << endl;
}
};
int main() {
int hh, mm, ss, hh0, mm0, ss0;
cin >> hh >> mm >> ss;
cin >> hh0 >> mm0 >> ss0;
MyTime t1, t2(8, 10, 30);
t1.show();t2.show();
t1.Register(hh, mm, ss);
t1.show();
t2.show();

return 0;
}
``````

10

10