定义一个Tree(树)类,有成员ages(树龄),不带参数的构造函数对ages初始化为1,成员函数grow(int years)对ages加上years,age()显示tree对象的ages的值。
Tree类声明如下:
class Tree {
public:
Tree();//构造函数
void grow(int years);//对数龄ages加上years
void age();//显示数龄ages的值
private:
int ages;//树龄
};
请实现Tree类的构造函数和成员函数。
裁判测试程序样例:
#include
using namespace std;
class Tree {
public:
Tree();//构造函数
void grow(int years);//对数龄ages加上years
void age();//显示数龄ages的值
private:
int ages;//树龄
};
int main()
{
Tree tree;
int years;
cin >> years;
tree.grow(years);
tree.age();
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
30
输出样例:
31
Tree::Tree()//构造函数
{
ages=1;
}
void Tree::grow(int years)//对数龄ages加上years
{
ages+=years;
}
void Tree::age()//显示数龄ages的值
{
cout<<ages;
}
定义一个类DDate,内有数据成员year、month和day,分别代表年、月、日,并若干有成员函数:构造函数用于初始化数据成员,isLeap函数用于闰年的判断。编写主函数:创建日期对象,判断该年是否是闰年。
以上类名和函数名,均须按照题目要求,不得修改
输入格式:
每组测试数据仅包含一个测试用例,每个测试用例占一行包括三个数,分别表示年、月、日。
输出格式:
如果该年是闰年则输出yes,不是则输出no。
输入样例:
2006 3 5
输出样例:
no
#include
using namespace std;
class DDate
{//LHL
int year,month,day;
public:
void init(int y,int m,int d)
{//LHL
year=y;
month=m;
day=d;
}
int isLeap()
{
if(year%4==0&&year%100!=0||year%100==0)
return 1;
else return 0;
}//LHL
};
int main()
{
DDate date;//LHL
int year,month,day;
cin>>year>>month>>day;
date.init(year,month,day);
if(date.isLeap())
printf("yes");
else printf("no");
return 0;
}
7-2 设计带构造函数的Dog类 (20分)
题目内容:
设计一个Dog类,包含name、age、sex和weight等属性,在有参数的构造函数中对数据成员进行初始化。
公有成员函数有:GetName()、GetAge()、GetSex()和GetWeight()可获取名字、年龄、性别和体重。
编写成员函数speak() 显示狗的叫声。
编写主函数,输入狗的名字、年龄、性别和体重;声明Dog对象并用输入的数据通过构造函数初始化对象,通过成员函数获取狗的属性并显示出来。
输入格式:
狗的信息
输出格式:
狗的信息,外加叫声
输入样例:
jack 3 m 2.1
输出样例:
jack
3
m
2.1
wang!wang!
#include //LHL
#include
using namespace std;
class Dog
{
char name[20];
int age;
char sex;
double weight;
public:
void setdata(char* name, int age,char sex,double weight);
void GetName();
void GetAge();
void GetSex();
void GetWeight();
void speak(){cout<<"wang!wang!"<<endl;}
};
void Dog::setdata(char* _name, int _age, char _sex, double _weight)
{
strcpy(name, _name);
age = _age;
sex = _sex;
weight = _weight;
}
void Dog::GetAge() //LHL
{
cout << age <<endl;
}
void Dog::GetName()
{
cout << name <<endl;
}
void Dog::GetSex()
{
cout <<sex<< endl; }
void Dog::GetWeight()
{
cout <<weight<<endl;
}
int main()
{
Dog dog;
char name[20], sex;
int age;
double weight;
cin>>name>>age>>sex>>weight;
dog.setdata( name, age, sex, weight);
dog.GetName(); //LHL
dog.GetAge();
dog.GetSex();
dog.GetWeight();
dog.speak();
return 0;
}
7-3 设计并测试一个椭圆类 (20分)
题目内容:
设计并测试一个名为Ellipse的椭圆类,其属性为圆心坐标及长半轴和短半轴的长度。
设计一个构造函数(Ellipse(int,int,double,double))对这些属性进行初始化,并通过成员函数计算出椭圆的面积(double Area())。
提示:S(椭圆面积)=PI(圆周率)×a(长半轴)×b(短半轴), 其中PI取3.14
输入格式:
圆心坐标、长半轴和短半轴的长度
输出格式:
椭圆的面积
输入样例:
0 0 2 5
输出样例:
在这里给出相应的输出。例如:
31.4
#include
using namespace std;
class Ellipse
{
private://LHL
int coreX;
int coreY;
double a;
double b;
const double PI = 3.14;
public:
Ellipse(int _coreX,int _coreY,double _a,double _b)
{
coreX = _coreX;
coreY = _coreY;
a = _a;
b = _b;//LHL
}
double Area(double aa,double bb)
{
return a*b*PI;
}
};
int main()
{
int coreX,coreY;
double a,b;
cin>>coreX>>coreY>>a>>b;
Ellipse e(coreX,coreY,a,b);
cout<<e.Area(a,b)<<endl;
return 0;
}
7-4 设计一个多功能的MyTime类 (30分)
题目内容:
设计一个多功能的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、24小时制显示t1、t2的时间。
(3)再设置t1的时间,数据由用户输入。
(4)再输入待加减的时间。
(5)t1加输入的时间,并按12小时和24小时制显示。
(6)t2减输入的时间,并按12小时和24小时制显示。
输入格式:
第一行为t1的时间,第二行为待加减的时间
输出格式:
显示按12、14小时制显示t1、t2的初始时间
t1加输入的待加减的时间按12小时和24小时制显示。
t2减输入的待加减的时间按12小时和24小时制显示
输入样例:
10 25 35
3 50 25
输出样例:
00:00:00 AM
00:00:00
08:10:30 AM
08:10:30
02:16:00 PM
14:16:00
04:20:05 AM
04:20:05
#include
using namespace std;
class MyTime
{
private:
int hour;
int minute;
int second;
public:
MyTime()
{
hour = 0;
minute = 0;
second = 0;
}
MyTime(int _hour, int _minute, int _second)
{
hour = _hour;//LHL
minute = _minute;
second = _second;
}
void SetTime(int _hour, int _minute, int _second)
{
hour = _hour;
minute = _minute;
second = _second;
}
void addTime(int h,int m,int s)
{
hour += h;
minute += m;
second += s;
if(second>=60)
{
second = second -60;
minute = minute + 1;
}
if(minute>=60)
{
minute = minute - 60;
hour = hour + 1;
}
if(hour>=24)
{//LHL
hour = hour -24;
}
}
void reduceTime(int _h,int _m,int _s)
{
if(second<_s)
{
second += 60;
minute --;
}
if(minute<_m)
{
minute += 60;
hour --;
}
if(hour<_h)
{
hour = hour + 24;
}
hour -= _h;//LHL
minute -= _m;
second -= _s;
}
void print_12()
{
int tempHour;
hour>=12?tempHour=hour-12:tempHour=hour;
if(tempHour<10){
cout<<'0';
}
cout<<tempHour<<':';
if(minute<10){
cout<<'0';
}
cout<<minute<<':';
if(second<10){
cout<<'0';
}
cout<<second;
if(hour>12||((hour==12)&&((minute>0)||(second>0)))){
cout<<" "<<"PM"<<endl;
}else{
cout<<" "<<"AM"<<endl;
}
}
void print_24()
{
if(hour<10){
cout<<'0';
}
cout<<hour<<':';
if(minute<10){
cout<<'0';//LHL
}
cout<<minute<<':';
if(second<10){
cout<<'0';
}
cout<<second<<endl;
}
};
int main()
{
MyTime t1;
MyTime t2(8,10,30);
t1.print_12();
t1.print_24();
t2.print_12();//LHL
t2.print_24();
int h1,m1,s1,h2,m2,s2;
cin>>h1>>m1>>s1;
t1.SetTime(h1, m1, s1);
cin>>h2>>m2>>s2;
t1.addTime(h2,m2,s2);
t2.reduceTime(h2, m2, s2);
t1.print_12();
t1.print_24();//LHL
t2.print_12();
t2.print_24();
return 0;
}
函数第1题体会: 需要Tree初始化ages为1,grow加上输入的年,age输出数值
第1题体会: 这题可以在头部初始化,年月日,定义一个函数判断闰年,是返回1不是返回0,输出即可
第2题体会: 这题的name可以用string或char,个人觉得string方便些,可以全部头部初始化,但是sex理论上还是用char比较好,string也行,初始化完成,以此输出,最后再输出wang!wang!即可
第3题体会: 这题可以再头文件后定义一个常量pi #define pi 3.14 ,这样计算面积时比较方便,同样可以用头部初始化比较简洁些
第4题体会:这题与上一小节的Time比较相似,头部初始化0:0:0,最重要的是加与减。
其中比较简单的是加,先从秒开始,大于60,则分钟++,分钟大于60,则小时++,
然后是减法,需要先判断谁大谁先,从小时开始比较,到秒钟,大的放在前面,然后从秒钟开始相减,秒钟小于0,则分钟–,分钟小于0,则小时–,最后输出即可