《计算机程序设计(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;
}