第10周基础练习(dnweuibf)

第10周基础练习

1带构造函数的点类

题目内容:

定义平面点类POINT,点的x,y坐标是其数据成员,double类型,私有;成员函数有默认构造函数,带两参数设置点的x,y坐标的构造函数,set()设置点的x,y坐标,distance()计算和另一个点的距离,show()显示坐标的位置信息。成员函数均为公有,默认构造函数将点的坐标设为(0,0)。

编写主函数,输入两个点的坐标并由此定义两个点对象,依次两个点的坐标信息,计算并显示两个点的距离。主函数和运行结果如下下:

主函数:

int main()
{
	double x, y;
	cin >> x >> y;
	POINT a(x, y);
	cin >> x >> y;
	POINT b(x, y);	
	a.show(); cout << endl;
	b.show(); cout << endl;
	cout << a.distance(b) << endl;
	return 0;
}

输入:两行,每行是一个点的x,y坐标,用空格隔开。

输出:三行,前两行分别是两个点的坐标,在括号中用逗号隔开,是英文符号。第3行是两个点的距离,非负实数。

样例1输入:

0 0

1 1

样例1输出:

(0,0)

(1,1)

1.41421

//带构造类的点类
#include<iostream>
#include<cmath>
using namespace std;
class POINT {
public:
	POINT(double a=0,double b=0)
	{
		x = a;
		y = b;
	}
	void set(double xx, double yy);
	void show();
	double distance(POINT b);
private:
	double x;
	double y;
protected:
};
int main()
{
	double x, y;
	cin >> x >> y;
	POINT a(x, y);
	cin >> x >> y;
	POINT b(x, y);	
	a.show(); cout << endl;
	b.show(); cout << endl;
	cout << a.distance(b) << endl;
	return 0;
}
void POINT::set(double xx, double yy)
{
	x = xx;
	y = yy;
}
void POINT::show()
{
	cout << "(" << x << "," << y << ")";
}
double POINT::distance(POINT b)
{
	double dis;
	dis = sqrt((b.x - x) * (b.x - x) + (b.y - y) * (b.y - y));
	return dis;
}

2带构造函数的圆类

题目内容:

定义圆类CIRCLE,圆心坐标和半径是其数据成员,double类型,私有;成员函数有默认构造函数设置参数值均为0,三参数构造函数设置圆心坐标和半径,set()设置圆心坐标和半径,area()计算圆的面积,perimeter()计算周长,show()显示圆心和半径信息。成员函数均为公有。圆周率取3.14.

编写主函数,使用CIRCLE类定义一个圆的对象a(默认构造),输入一个圆的圆心和半径并由此定义另一个圆对象b,分别显示两个圆的静态成员信息信息,计算并显示圆的周长和面积。主函数和运行结果如下:

int main()
{
	CIRCLE a;
	double x, y, r;
	cin >> x >> y >> r;
	CIRCLE b(x, y, r);
	a.show(); cout << endl;
	cout << a.perimeter() << endl;
	cout << a.area() << endl;
	b.show(); cout << endl;
	cout << b.perimeter() << endl;
	cout << b.area() << endl;
	return 0;
}

输入:圆心坐标和半径,用空格隔开。

输出:两组,每组三行,一行是圆心、半径,在括号中,用逗号隔开;一行是周长;一行是面积。

【提示】

样例1输入:

1 2 1

样例1输出:

(0,0,0)

0

0

(1,2,1)

6.28

3.14

//带构造的圆类
#include<iostream>
#include<cmath>
#define _USE_MATH_DEFINES//用库里的pi
#define pi 3.14
using namespace std;
class CIRCLE {
private:
	double x, y, r;
public:
	CIRCLE(double xx = 0, double yy = 0, double rr = 0)
	{
		x = xx;
		y = yy;
		r = rr;
	}
	void set(double xx, double yy, double rr);
	double area();//面积
	double perimeter();//周长
	void show();//显示坐标和周长
};
int main()
{
	CIRCLE a;
	double x, y, r;
	cin >> x >> y >> r;
	CIRCLE b(x, y, r);
	a.show(); cout << endl;
	cout << a.perimeter() << endl;
	cout << a.area() << endl;
	b.show(); cout << endl;
	cout << b.perimeter() << endl;
	cout << b.area() << endl;
	return 0;
}

void CIRCLE::set(double xx, double yy, double rr)
{
	x = xx;
	y = yy;
	r = rr;
}
void CIRCLE::show()
{
	cout << "(" << x << "," << y << "," << r << ")";
}
double CIRCLE::perimeter()
{
	return double(2 * pi * r);
}
double CIRCLE::area()
{
	return double(pi * r * r);
}

3带拷贝构造函数和析构函数的矩形类

题目内容:

定义屏幕矩形类RECT,边和坐标轴平行,两个对角顶点坐标是其数据成员,int类型,私有;成员函数有默认构造设置所有数据成员值为0,四参数构造函数设置两个顶点坐标,拷贝构造函数,set()设置两个顶点坐标,area()计算面积,perimeter()计算周长,showinfo()显示两个顶点信息,show()显示由“*”组成的矩形(宽是矩形的宽度,高是矩形的高度),析构函数。成员函数均为公有,析构函数中显示两个顶点信息和字符串“deconstruct”。

编写主函数,使用RECT类定义一个矩形类对象a(默认构造),输入并设置矩形的两个顶点,显示矩形的静态成员信息,计算并显示矩形的周长和面积,显示由“”组成的矩形;由刚输入的顶点向右平移2单位构造对象b,再由对象b构造对象c,显示矩形c的静态成员信息,计算并显示矩形c的周长和面积,显示由“”组成的矩形c。主函数和运行结果如下:

int main()
{
	RECT a;
	double x1, x2, y1, y2;
	cin >> x1 >> y1 >> x2 >> y2;
	a.set(x1, y1, x2, y2);
	a.showinfo(); cout << endl;
	cout << a.perimeter() << endl;
	cout << a.area() << endl;
	a.show();
	RECT b(x1 + 2, y1, x2 + 2, y2);
	RECT c(b);//拷贝构造函数
	c.showinfo(); cout << endl;
	cout << c.perimeter() << endl;
	cout << c.area() << endl;
	c.show();

	return 0;
}

输入:两个顶点的坐标,用空格隔开。

输出:见样例,其中最后三行是析构函数的输出,每行是一个对象的析构。析构函数不需调用。

【提示】

样例1输入:

1 1 10 5

样例1输出:

1 1 10 5

(1,1,10,5)

26

36

*********

*********

*********

*********

(3,1,12,5)

26

36

*********

*********

*********

*********

(3,1,12,5)deconstruct

(3,1,12,5)deconstruct

(1,1,10,5)deconstruct

带构造函数和析构函数的矩形类
#include<iostream>
#include<cmath>
using namespace std;
class RECT {
	double x1, x2, y1, y2;
public:
	RECT(double xx1 = 0, double yy1 = 0, double xx2 = 0, double yy2 = 0)
	{
		x1 = xx1;
		x2 = xx2;
		y1 = yy1;
		y2 = yy2;
	}
	void set(double xx1, double yy1, double xx2, double yy2);
	void showinfo();//顶点坐标
	double perimeter();//周长
	double area();//面积
	void show();//显示矩形
	~RECT()
	{
		cout << "(" << x1 << "," << y1 << ',' << x2 << ',' << y2 << ')';
		cout << "deconstruct" << endl;
	}
};
int main()
{
	RECT a;
	double x1, x2, y1, y2;
	cin >> x1 >> y1 >> x2 >> y2;
	a.set(x1, y1, x2, y2);
	a.showinfo(); cout << endl;
	cout << a.perimeter() << endl;
	cout << a.area() << endl;
	a.show();
	RECT b(x1 + 2, y1, x2 + 2, y2);
	RECT c(b);//拷贝构造函数
	c.showinfo(); cout << endl;
	cout << c.perimeter() << endl;
	cout << c.area() << endl;
	c.show();

	return 0;
}
void RECT::set(double xx1, double yy1, double xx2, double yy2)
{
	x1 = xx1;
	x2 = xx2;
	y1 = yy1;
	y2 = yy2;
}
double RECT::area()
{
	double are;
	are = abs(x2 - x1) * abs(y2 - y1);
	return are;
}
double RECT::perimeter()
{
	double L;
	L = 2 * (abs(y2 - y1) + abs(x2 - x1));
	return L;
}
void RECT::show()
{
	for (int i = 0; i < abs(y2 - y1); i++)
	{
		for (int j = 0; j < abs(x2 - x1); j++)
		{
			cout << "*";
		}
		cout << endl;
	}
}
void RECT::showinfo()
{
	cout << "(" << x1 << "," << y1 << ',' << x2 << ',' << y2 << ')';
}

4向量类的构造函数和析构函数

题目内容:

定义向量类VECTOR,数据成员是一个int指针p和一个整数n,私有;编写两个构造函数:默认构造函数,设置n=10,动态申请大小为10的int数组,指针赋值给成员p,设置元素值为0;带整型参数m的构造函数,设置n=m, 动态申请大小为m的int数组,指针赋值给成员p,设置元素值为0。编写析构函数释放动态申请的空间。编写成员函数显示向量的元素,一行,数据间用空格隔开,末尾无空格,不换行。

编写主函数,定义两个对象,一个使用默认构造函数,一个设置元素个数为5,调用成员函数显示数据,每个向量在一行中。

int main()
{
VECTOR a,b(5);//定义两个对象,α用默认构造,b用有参构造a.show();/显示下列
cout<<endl;//换行
b.show();
cout<<endl;
return 0;
}

输入:无

输出:两行,第1行有10个0,第2行有5个0。

样例1输入:

样例1输出:

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0

//向量类的构造函数和析构函数
#include<iostream>
using namespace std;
class VECTOR
{
private:
	int* p;
	int n;
public:
	 VECTOR();//无参(默认)构造函数
	 VECTOR(int m);//带整型参数的构造函数
	 ~VECTOR()//析构函数
	 {
		 delete[] p;
	 }
	 void show();
};
VECTOR::VECTOR()
{
	n = 10;
	p = new int[n];
	for (int i = 0; i < 10; i++)
		p[i] = 0;
}
VECTOR::VECTOR(int m)
{
	n = m;
	p = new int[n];
	for (int i = 0; i < n; i++)
		p[i] = 0;
}
void VECTOR::show()
{
	if (n <= 0)
		return;
	int* q = p;
	cout << *q;
	for (int i = 1; i < n; i++)
	{
		cout << " " << *(q + i);
	}
	cout << endl;
}
int main()
{
	VECTOR a;
	VECTOR b(5);
	a.show();
	b.show();
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值