第9周基础练习(bdeuibfwef)

1点类(10分)
题目内容:

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

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

int main()
{
	POINT a, b;
	double x, y;
	cin >> x >> y;
	a.set(x, y);
	cin >> x >> y;
	b.set(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:
	void set(double xx, double yy);
	void show();
	double distance(POINT b);
private:
	double x;
	double y;
protected:
};
int main()
{
	POINT a, b;
	double x, y;
	cin >> x >> y;
	a.set(x, y);
	cin >> x >> y;
	b.set(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圆类(10分)
题目内容:

定义圆类CIRCLE,圆心坐标和半径是其数据成员,double类型,私有;成员函数有set()设置圆心坐标和半径,area()计算圆的面积,perimeter()计算周长,show()显示圆心和半径信息。成员函数均为公有。

编写主函数,使用CIRCLE类定义一个圆的对象,输入并设置圆心和半径,显示圆的静态成员信息信息,计算并显示圆的周长和面积。主函数和运行结果如下:

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

输入:圆心坐标和半径,用空格隔开。
输出:三行,一行是圆心、半径,在括号中,用逗号隔开;一行是周长;一行是面积

【提示】

样例1输入:

1 2 1

样例1输出:

(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:
	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;
	a.set(x, y, r);
	a.show(); cout << endl;
	cout << a.perimeter() << endl;
	cout << a.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);
}//圆类
#include<iostream>
#include<cmath>
#define _USE_MATH_DEFINES//用库里的pi
#define pi 3.14
using namespace std;
class CIRCLE {
private:
	double x, y, r;
public:
	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;
	a.set(x, y, r);
	a.show(); cout << endl;
	cout << a.perimeter() << endl;
	cout << a.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矩形类(10分)
题目内容:

定义屏幕矩形类RECT,边和坐标轴平行,左上角和右下角的两个顶点坐标是其数据成员,int类型,私有;成员函数有set()设置两个顶点坐标,area()计算面积,perimeter()计算周长,showinfo()显示两个顶点信息,show()显示由“*”组成的矩形(宽是矩形的宽度,高是矩形的高度)。成员函数均为公有。

编写主函数,使用RECT类定义一个矩形类对象,输入并设置矩形的两个顶点,显示矩形的静态成员信息,计算并显示矩形的周长和面积,显示由“*”组成的矩形。主函数和运行结果如下:
输入:两个顶点的坐标,用空格隔开。

输出:三部分:一行是顶点坐标,在括号中,用逗号隔开;一行是周长;一行是面积;最后是由*组成的矩形,宽是矩形的宽度,高是矩形的高度。

【提示】

样例1输入:

1 1 10 5

样例1输出:

(1,1,10,5)

26

36

*********

*********

*********

*********
markdown 中显示*号需要加上\;

//矩形类
#include<iostream>
#include<cmath>
using namespace std;
class RECT {
	double x1, x2, y1, y2;
public:
	void set(double xx1, double yy1, double xx2, double yy2);
	void showinfo();//顶点坐标
	double perimeter();//周长
	double area();//面积
	void show();//显示矩形
};
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();
	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复数类(10分)
题目内容:

定义复数类COMPLEX,实部和虚部是其数据成员,double类型,私有;成员函数有set()设置实部和虚部,getReal()获得实部,getImag()获得虚部,module()获得复数的模,add()计算和另一个复数的和返回复数(不改变原复数),show()显示复数。成员函数均为公有。

编写主函数,使用COMPLEX类定义两个对象表示两个复数,输入两个复数的实部和虚部并设置两个复数对象,显示和,显示和的实部,显示和的虚部,显示和的模。主函数和运行结果如下:

int main()
{
    COMPLEX a,b,c;
    double x,y;
    cin>>x>>y;
    a.set(x,y);
    cin>>x>>y;
    b.set(x,y);
    c=a.add(b);
    c.show();
    cout<<endl;
    cout<<c.getReal()<<endl;
    cout<<c.getImag()<<endl;
    cout<<c.module()<<endl;
    return 0;
}

输入:两行,每行是一个复数的实部和虚部,用空格隔开。

输出:四行,分别是复数、实部、虚部和模。复数为0时显示0+0j,虚部为负数时显示如0-1j。

【提示】使用if…else…判断虚部的正负,从而采用不同的显示格式。

样例1输入:

1 2

3 4

样例1输出:

4+6j

4

6

7.2111

//复数类
#include<iostream>
#include<cmath>
using namespace std;
class COMPLEX {
public:
    void set(double xx, double yy);
    double getReal();
    double getImag();
    double module();
    COMPLEX add(COMPLEX b);
    void show();
private:
    double x;
    double y;
};
int main()
{
    COMPLEX a, b, c;
    double x, y;
    cin >> x >> y;
    a.set(x, y);
    cin >> x >> y;
    b.set(x, y);
    c = a.add(b);
    c.show();
    cout << endl;
    cout << c.getReal() << endl;
    cout << c.getImag() << endl;
    cout << c.module() << endl;
    return 0;
}
void COMPLEX::set(double xx, double yy)
{
    x = xx;
    y = yy;
}
double COMPLEX::getReal()
{
    return x;
}
double COMPLEX::getImag()
{
    return y;
}
COMPLEX COMPLEX::add(COMPLEX b)
{
    COMPLEX  c;
    c.x = this->x + b.x;//this指针有无都可以
    c.y = y + b.y;
    return c;
}
void COMPLEX::show()
{
    if (y >= 0)//按照虚部的正负输出有所不同
    {
        cout << x << "+" << y << 'j';
    }
    else
    {
        cout << x << '-' << abs(y) << 'j';
    }
}
double COMPLEX::module()
{
    return double(sqrt(x * x + y * y));
}

5分数类(10分)
题目内容:

定义分数(有理数)类FRACTION,分子和分母是其数据成员,int,私有;成员函数有set()设置分子和分母,Real()返回其小数形式,show()显示分数,公有。成员函数reduce()实现约分,私有。

编写主函数,使用FRACTION类定义一个对象表示分数,输入分数的分子和分母,设置分数对象,显示分数,显示分数的小数形式。

注意:(1)程序自动约分,如输入2 4 ,显示分数1/2;(2)负数设置在分子上,如输入1 -3 显示的分数为 -1/3;(3)分子为0时,不约分,如输入0 8 ,显示分数0/8。

主函数和运行结果:

int main()
{
	F a;
	int x, y;
	cin >> x >> y;
	a.set(x, y);
	a.show();
	cout << endl;
	cout << a.real() << endl;
	return 0;
}

输入:分数的分子和分母,整数,用空格隔开,分母不为0。

输出:两行,一行为分数形式,一行为分数的小数形式(自然近似)。

【提示】(1)约分函数格式为void reduce(void),直接对成员变量约分,不需参数,不需返回值;(2)set()中为数据成员赋值后直接调用reduce()即可。(3)分母为负数时,分子、分母都变号,就将符号转到分子上,如分子分母分别为1和-2,都变号,为-1和2。

样例1输入:

8 -24

样例1输出:

-1/3

-0.333333

//分数类
#include<iostream>
#include<cmath>
using namespace std;
int func(int a, int b);//最大公约数
class F {
private:
	int a;
	int b;
public:
	void set(int xx, int yy);//设置分子分母并化简
	double real();
	void show();
	void reduce();
};
int main()
{
	F a;
	int x, y;
	cin >> x >> y;
	a.set(x, y);
	a.show();
	cout << endl;
	cout << a.real() << endl;
	return 0;
}
double F::real()
{
	return double((double)a/(double)b);
}
void F::reduce()
{
	int c = func(a, b);//c为分子分母绝对值的最大公约数
	a = a / c;
	b = b / c;
}
void F::set(int aa, int bb)
{
	a = aa;
	b = bb;
	if (a == 0)
		return;//分子为0分母为正就不约分了
	
		//这个操作留到输出再做吧
	if (a > 0 && b < 0)//若分子正分母负则交换符号
	{
		a = -a;
		b = -b;
	}
	if (a < 0 && b < 0)//分子分母都为负数的话就全部取反,其时可以和上边组合成b<0的情况
	{
		a = -a;
		b = -b;
	}
	reduce();
}
int func(int a,int b)
{
	a = abs(a);
	b = abs(b);//实际上是他们的绝对值的最大公约数
	if (a < b)
	{
		int temp = a;
		a = b;
		b = temp;
	}
	while (b != 0)
	{
		int temp = a % b;
		a = b;
		b = temp;
	}
	return  a;
}
void F::show()
{
	if (a == 0 && b < 0)
	{
		cout << '-' << a << '/' << abs(b);
		return;
	}
	cout << a << '/' << b;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值