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

第10周編程作業查看幫助返回
本作業是在線評測形式。提交源程序,系統自動評測,可多次提交。輸出格式嚴格按題目要求,參考給出的樣例。大小寫、中英文、空格數量都必須嚴格。

依照學術誠信條款,我保證此作業是本人獨立完成的。

溫馨提示:

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

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

1定義一個帶重載構造函數的日期類(20分)
題目內容:

定義一個帶重載構造函數的日期類Date,數據成員有年、月、日;成員函數包括:一個帶參數的構造函數Date(int,int,int),一個不帶參數的構造函數(設置日期爲1900年1月1日),一個按“年-月-日”格式顯示日期的函數,一個對數據成員賦值的函數void
init(int,int,int)。

主函數中對類的測試要求:
1.
分別使用兩個不同的重載構造函數創建兩個日期類對象(必須爲d1,d2,d2初始值爲2100-12-12);
2.
按“年-月-日”格式分別顯示兩個對象的值;
3. 輸入數據,用init函數爲d1賦值;
2.按“年-月-日”格式顯示對象d1的值;。

輸入格式:

給d1賦值的數據

輸出格式:

d1的默認值

d2的初始值

d1賦值後的值

輸入樣例:

2011 4 29

輸出樣例:

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

時間限制:500ms內存限制:32000kb
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;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 3ms 256kb
10
用例2通過 2ms 364kb
10
提交答案本次得分/總分:20.00/20.00分
2動態生成Person類的對象(20分)
題目內容:

編寫Person類,數據成員爲姓名(20字符長度)、年齡(int)和性別(char)。
編寫無參數的構造函數,其中姓名賦值爲“XXX”,年齡0,性別’m’;
編寫析構函數,在其中輸出字符串“Now
destroying the instance of
Person”;
編寫Register成員函數,爲數據成員賦值;
編寫showme成員函數,顯示姓名、年齡和性別。

編寫主函數:
用Person類創建2個指針,p1和
p2;
用new創建兩個Person對象,分別將指針賦值給p1,p2;
用showme成員函數顯示p1,p2所指對象的值;
再輸入一組“姓名、年齡和性別”值,用成員函數Register爲p1的成員賦值;
將p1所指對象的值賦值給p2所指對象;
用showme顯示p1、p2所指對象的值。
刪除動態對象。

輸入格式:

爲p1的成員賦值時使用的數據

輸出格式:

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

時間限制:500ms內存限制:32000kb
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;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 3ms 360kb
20
提交答案本次得分/總分:20.00/20.00分
3設計帶構造函數的Dog類(20分)
題目內容:

設計一個Dog類,包含name、age、sex和weight等屬性,在有參數的構造函數中對數據成員進行初始化。

公有成員函數有:GetName()、GetAge()、GetSex()和GetWeight()可獲取名字、年齡、性別和體重。編寫成員函數speak()
顯示狗的叫聲。編寫主函數,輸入狗的名字、年齡、性別和體重;聲明Dog對象並用輸入的數據通過構造函數初始化對象,通過成員函數獲取狗的屬性並顯示出來。

輸入格式:

狗的信息

輸出格式:

狗的信息,外加叫聲

輸入樣例:

Tom 4 m 2.4

輸出樣例:

Tom

4

m

2.4

Arf!Arf!

時間限制:500ms內存限制:32000kb
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;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 11ms 364kb
20
提交答案本次得分/總分:20.00/20.00分
4設計並測試一個橢圓類(20分)
題目內容:

設計並測試一個名爲Ellipse的橢圓類,其屬性爲圓心座標及長半軸和短半軸的長度。設計一個構造函數(Ellipse(int,int,double,double))對這些屬性進行初始化,並通過成員函數計算出橢圓的面積(double
Area())。

S(橢圓面積)=PI(圓周率)×a(長半軸)×b(短半軸)
其中PI取3.14

輸入格式:

圓心座標、長半軸和短半軸的長度

輸出格式:

橢圓的面積

輸入樣例:

1 1 1 2

輸出樣例:

6.28

時間限制:500ms內存限制:32000kb
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;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 3ms 256kb
10
用例2通過 2ms 364kb
10
提交答案本次得分/總分:20.00/20.00分
5設計一個多功能的MyTime類(20分)
題目內容:

設計一個多功能的MyTime類,設計多個重載的構造函數,可以設置時間,進行時間的加減運算,按各種可能的格式(24小時制、12小時制)輸出時間。

注意:

(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、14小時制顯示t1、t2的初始時間

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

時間限制:500ms內存限制:32000kb
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;
	}
	void add(char ad, int h, int m, int s) {
		if (h >= 24)h = 0;if (m >= 60)m = 0;if (s >= 60)s = 0;
		if (ad == '+') {
			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.add('+', hh0, mm0, ss0);
	t1.show();
	t2.add('-', hh0, mm0, ss0);
	t2.show();

	return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 380kb
10
用例2通過 2ms 380kb
10
提交答案本次得分/總分:20.00/20.00分

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