《计算机程序设计(C++)》第9周编程作业


《计算机程序设计(C++)》第9周编程作业


1 设计Person类(20分)

题目内容:

设计一个Person类,包含name、age、sex属性以及对这些属性操作的方法。实现并测试这个类。
根据类的封装性要求,把name、age、sex声明为私有的数据成员,声明公有的成员函数Register()、ShowMe()来访问这些属性,在Register()函数中对数据成员进行初始化。person1通过cin来得到信息,person2通过Register(“Zhang3”,19, ‘m’) 来得到信息。

输入格式:

person1的信息

输出格式:

person1和person2的信息

输入样例:

Li4 18 f

输出样例:

Li4 18 f

Zhang3 19 m

时间限制:500ms内存限制:32000kb

#include<iostream>
#include<cstring>
using namespace std;

class Person
{
private:
	char name[20];
	int age;
	char sex[2];
public:
	void Register(char* n, int a, char* s);
	void ShowMe() { cout << name << ' ' << age << ' ' << sex << endl; }
};

void Person::Register(char* n, int a, char* s)
{
	strcpy(name, n);
	age = a;
	strcpy(sex, s);
}


int main() {
	Person person[2];
	char n[20], s[2];
	int a;
	cin >> n >> a >> s;
	person[0].Register(n, a, s);
	strcpy(n, "Zhang3");
	a = 19;
	strcpy(s, "m");
	person[1].Register(n, a, s);
	person[0].ShowMe();
	person[1].ShowMe();
	return 0;
}

2 设计Dog类(20分)

题目内容:

设计一个Dog类,包含name、age、sex和weight等属性以及对这些属性操作的方法。实现并测试这个类。
根据类的封装性要求,把name、age、sex和weight声明为私有的数据成员,编写公有成员函数setdata()对数据进行初始化,GetName()、GetAge()、GetSex()和GetWeight()获取相应属性。初始化数据由用户输入。

输入格式:

Dog类对象的初始化数据

输出格式:

根据Dog类对象的初始化数据输出一句话,请严格按照格式输出,句末有点号。

输入样例:

ahuang 3 m 2.4

输出样例:

It is my dog.

Its name is ahuang.

It is 3 years old.

It is male.

It is 2.4 kg.

时间限制:500ms内存限制:32000kb

#include<iostream>
#include<cstring>
using namespace std;

class Dog
{
private:
	char name[20];
	int age;
	char sex[2];
	double weight;
public:
	void setdata(char* n, int a, char* s, double w);
	void GetName() { cout << "Its name is " << name << '.' << endl; }
	void GetAge() { cout << "It is " << age << " years old." << endl; }
	void GetSex();
	void GetWeight() { cout << "It is " << weight << " kg." << endl; }
};

void Dog::setdata(char* n, int a, char* s, double w)
{
	strcpy(name, n);
	age = a;
	strcpy(sex, s);
	weight = w;
	cout << "It is my dog." << endl;
}

void Dog::GetSex()
{
	if(strcmp(sex, "f" ) == 0)
		cout << "It is female." << endl;
	else
		cout << "It is male." << endl;
}


int main() {
	Dog mydog;
	char n[20], s[2];
	int a;
	double w;
	cin >> n >> a >> s >> w;
	mydog.setdata(n, a, s, w);
	mydog.GetName();
	mydog.GetAge();
	mydog.GetSex();
	mydog.GetWeight();
	return 0;
}

3 设计并测试Trapezium类(20分)

题目内容:

设计并测试一个名为Trapezium的梯形类,其属性为梯形的四个顶点的坐标。该梯形上边和下边均和x轴平行。
根据类的封装性要求,在类的声明中用8个私有的整型变量表示4个点的坐标值,声明成员函数initial(int,int,int,int,int,int,int,int)初始化数据成员,函数GetPosition(int&,int&,int&,int&,int&,int&,int&,int&)读取坐标值,函数Area()计算面积。

输入格式:

梯形四个顶点的坐标,

输出格式:

梯形的面积,依次为左上(x1,y1)、右上(x2,y2)、左下(x3,y3)和右下(x4,y4)角的顶点。

输入样例:

3 2 5 2 1 -4 7 -4

输出样例:

24

时间限制:500ms内存限制:32000kb

#include<iostream>
using namespace std;

class Trapezium
{
private:
	int x[4], y[4];
public:
	void initial(int, int, int, int, int, int, int, int);
	void GetPosition(int&, int&, int&, int&, int&, int&, int&, int&);
	double Area() { return ((x[1] - x[0] + x[3] - x[2]) * (y[1] - y[2]) * 0.5); }
};

void Trapezium::initial(int a, int b, int c, int d, int e, int f, int g, int h)
{
	x[0] = a;
	x[1] = c;
	x[2] = e;
	x[3] = g;
	y[0] = b;
	y[1] = d;
	y[2] = f;
	y[3] = h;
}


int main() {
	Trapezium tz;
	int num[8];
	for (int i = 0; i < 8; i++) {
		cin >> num[i];
	}
	tz.initial(num[0], num[1], num[2], num[3], num[4], num[5], num[6], num[7]);
	cout << tz.Area();
	return 0;
}

4 设计MyTime类(20分)

题目内容:

设计一个MyTime类,成员函数SetTime()设置时间,print_12()以12(0-11)小时制显示时间(AM上午,PM下午),print_24()以24(0-23)小时制显示时间。

输入格式:

所需设置时间的时、分、秒

输出格式:

按照12小时制和24小时制依次显示时间,注意时间格式中的冒号是英文冒号,时分秒都是两位,AM,PM前有一个空格,晚上12:00是00:00:00
AM,中午十二点是00:00:00 PM。

输入样例:

13 23 34

输出样例:

01:23:34 PM

13:23:34

时间限制:500ms内存限制:32000kb

#include<iostream>
#include<string>
using namespace std;

class MyTime
{
private:
	int hour, mit, scd;
public:
	void timeinit(int, int, int);
	void print_12();
	void print_24();
};

void MyTime::timeinit(int h, int m, int s)
{
	hour = h;
	mit = m;
	scd = s;
}

void MyTime::print_12()
{
	if (hour < 10)
		cout << '0' << hour;
	else if (hour < 12)
		cout << hour;
	else if (hour < 20)
		cout << '0' << hour - 12;
	else
		cout << hour - 12;

	if (mit < 10)
		cout << ":0" << mit;
	else
		cout << ":" << mit;

	if (scd < 10)
		cout << ":0" << scd;
	else
		cout << ":" << scd;

	if (hour < 12)
		cout << " AM" << endl;
	else if (hour < 24)
		cout << " PM" << endl;
	else
		cout << '\r' << "00:00:00 AM" << endl;
}

void MyTime::print_24()
{
	if (hour < 10)
		cout << '0' << hour;
	else
		cout << hour;

	if (mit < 10)
		cout << ":0" << mit;
	else
		cout << ":" << mit;

	if (scd < 10)
		cout << ":0" << scd << endl;
	else
		cout << ":" << scd << endl;
}

int main() {
	int h, m, s;
	MyTime time;
	cin >> h >> m >> s;
	time.timeinit(h, m, s);
	time.print_12();
	time.print_24();
	return 0;
}

5 设计Weekday类(20分)

题目内容:

设计一个Weekday类,成员函数SetDay()设置星期几,IncDay()前进一天,NowDay()打印当前是星期几。

输入格式:

用户输入一个数字,0表示星期日,1表示星期一,类推,6表示星期六,用该数字初始化Weekday类

输出格式:

使用中文打印出从当日起连续3天是星期几(不够三天时,循环)

输入样例:

0

输出样例:

星期日

星期一

星期二

时间限制:500ms内存限制:32000kb

#include<iostream>
using namespace std;

class Weekday
{
private:
	int day;
	string q[7] = { "日", "一", "二", "三", "四", "五", "六" };
public:
	void SetDay(int d) { day = d; }
	void IncDay();
	void NowDay();
};

void Weekday::IncDay()
{
	day++;
	if (day > 6)
		day = 0;
}

void Weekday::NowDay()
{
	cout << "星期" << q[day] << endl;
}

int main() {
	int d;
	Weekday myweek;
	cin >> d;
	myweek.SetDay(d);
	for (int i = 0; i < 3; i++)
	{
		myweek.NowDay();
		myweek.IncDay();
	}

	return 0;
}