学习笔记《计算机程序设计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分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值