第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分