第9周基础练习

1.点类(10分)

题目内容:

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

编写主函数,使用POINT类定义两个点对象,输入并设置两个点的坐标,显示依次两个点的坐标信息,计算并显示两个点的距离。
输入:两行,每行是一个点的x,y坐标,用空格隔开。

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

样例1输入:

0 0

1 1

样例1输出:

(0,0)

(1,1)

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

#include <iostream>
#include <cmath>
using namespace std;
class POINT{
	private:
		double x, y;
	public:
		void set(double a, double b);
		void show();
		double distance(POINT b);
};
int main()
{
	POINT a, b;
	double x, y;
	cin>>x>>y;
	a.set(x,y);
	cin>>x>>y;
	b.set(x,y);
	a.show();
	b.show();
	cout<<a.distance(b)<<endl;
	return 0;
}
void POINT::set(double a, double b)
{
	x = a;
	y = b;
}
void POINT::show()
{
	cout<<"("<<x<<","<<y<<")"<<endl;
}
double POINT::distance(POINT b)
{
	double s = sqrt((x-b.x)*(x-b.x)+(y-b.y)*(y-b.y));
	return s;
}
//挺简单的题,而且题目上有了答案

2.圆类(10分)

题目内容:

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

编写主函数,使用CIRCLE类定义一个圆的对象,输入并设置圆心和半径,显示圆的静态成员信息信息,计算并显示圆的周长和面积。
输入:圆心坐标和半径,用空格隔开。
输出:三行,一行是圆心、半径,在括号中,用逗号隔开;一行是周长;一行是面积

样例1输入

1 2 1

样例1输出:

(1,2,1)

6.28

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

#include <iostream>
using namespace std;
class CIRCLE{
	private:
		double x, y;
		double r;
	public:
		void set(double x0, double y0, double r0);
		void show();
		double perimeter();
		double area();
};
int main()
{
	CIRCLE a;
	double x, y, r;
	cin>>x>>y>>r;
	a.set(x,y,r);
	a.show();
	cout<<a.perimeter()<<endl;
	cout<<a.area()<<endl;
	return 0;
}
void CIRCLE::set(double x0, double y0, double r0)
{
	x = x0;
	y = y0;
	r = r0;
}
void CIRCLE::show()
{
	cout<<"("<<x<<","<<y<<","<<r<<")"<<endl;
}
double CIRCLE::perimeter()
{
	double c = 2*3.14*r;
	return c;
}
double CIRCLE::area()
{
	double s = 3.14*r*r;
	return s;
}
//pai取3.14
//这些简单的函数都可以直接在类的声明中定义

3.矩形类(10分)

题目内容:

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

编写主函数,使用RECT类定义一个矩形类对象,输入并设置矩形的两个顶点,显示矩形的静态成员信息,计算并显示矩形的周长和面积,显示由“”组成的矩形。
输入:两个顶点的坐标,用空格隔开。
输出:三部分:一行是顶点坐标,在括号中,用逗号隔开;一行是周长;一行是面积;最后是由
组成的矩形,宽是矩形的宽度,高是矩形的高度

样例1输入:

1 1 10 5

样例1输出:

(1,1,10,5)

26

36

*********
********* 
*********
*********

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

#include <iostream>
#include <cmath>
using namespace std;
class RECT{
	private:
		int x1, y1, x2, y2;
	public:
		void set(double a1 ,double b1, double a2, double b2);
		void showinfo();
		void show();
		int perimeter();
		int area();
};
int main()
{
	RECT a;
	double x1, y1, x2, y2;
	cin>>x1>>y1>>x2>>y2;
	a.set(x1,y1,x2,y2);
	a.showinfo();
	cout<<a.perimeter()<<endl;
	cout<<a.area()<<endl;
	a.show();
	return 0;
}
void RECT::set(double a1 ,double b1, double a2, double b2)
{
	x1 = a1;
	y1 = b1;
	x2 = a2;
	y2 = b2;
}
void RECT::showinfo()
{
	cout<<"("<<x1<<","<<y1<<","<<x2<<","<<y2<<")"<<endl;
}
void RECT::show()
{
	for(int i=0; i<abs(y2-y1); i++)
	{
		for(int j=0; j<abs(x2-x1); j++)
			cout<<"*";
		cout<<endl;
	}
}
int RECT::perimeter()
{
	int c;
	c = 2*abs(x2-x1)+2*abs(y2-y1);//无法确定大小,要取绝对值
	return c;
}
int RECT::area()
{
	int s;
	s = abs((x2-x1)*(y2-y1));
	return s;
}

4.复数类(10分)

题目内容:

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

编写主函数,使用COMPLEX类定义两个对象表示两个复数,输入两个复数的实部和虚部并设置两个复数对象,显示和,显示和的实部,显示和的虚部,显示和的模。
输入:两行,每行是一个复数的实部和虚部,用空格隔开。
输出:四行,分别是复数、实部、虚部和模。复数为0时显示0+0j,虚部为负数时显示如0-1j。

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

样例1输入:

1 2

3 4

样例1输出:

4+6j

4

6

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

#include <iostream>
#include <cmath>
using namespace std;
class COMPLEX{
	private:
		double r;
		double i;
	public:
		void set(double x, double y);
		void show();
		double getReal();
		double getImag();
		double module();
		COMPLEX add(COMPLEX b);
};
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<<c.getReal()<<endl;
	cout<<c.getImag()<<endl;
	cout<<c.module()<<endl;
	return 0;
}
void COMPLEX::set(double x, double y)
{
	r = x;
	i = y;
}
void COMPLEX::show()
{
	cout<<r;//实部的格式不用考虑,主要是虚部
	if(i>=0)//大于等于0的时候补上加号
		cout<<"+";
	cout<<i<<"j"<<endl;
}
double COMPLEX::getReal()
{
	return r;
}
double COMPLEX::getImag()
{
	return i;
}
double COMPLEX::module()
{
	return sqrt(r*r+i*i);
}
COMPLEX COMPLEX::add(COMPLEX b)
{
	COMPLEX c;
	c.r = r+b.r;
	c.i = i+b.i;
	return c;
}
//个人感觉这题最难的是输出格式,我没看题,所以做了好长时间。。

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。
输入:分数的分子和分母,整数,用空格隔开,分母不为0。

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

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

样例1输入:

8 -24

样例1输出:

-1/3

-0.333333

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

#include <iostream>
#include <cmath>
using namespace std;
class FRACTION{
	private:
		int a;
		int b;
		void reduce();
	public:
		void set(int x,int y);
		void show();
		double real();
};
int main()
{
	FRACTION a;
	int x, y;
	cin>>x>>y;
	a.set(x,y);
	a.show();
	cout<<a.real()<<endl;
	return 0;
}
void FRACTION::reduce()
{
	if(a==0)//分子是0的话,就不要找了
		return;
	for(int i=b; i>0; i--)//枚举寻找最大公约数
	{
		if(abs(a)%i==0&&b%i==0)//把分子带上绝对值
		{
			a/=i;
			b/=i;
			break;
		}
	}
}
void FRACTION::set(int x, int y)
{
	a = x;
	b = y;
	if(b<0&&a)
	{
		a = -a;
		b = -b;
	}//这是把负号变到分子上,可以把各种情况列出来看看,能化简成这个
	reduce();
}
void FRACTION::show()
{
	cout<<a<<"/"<<b<<endl;
}
double FRACTION::real()
{
	return 1.0*a/b;
}
//这和上面那道题有点像,很容易把格式搞错
发布了28 篇原创文章 · 获赞 38 · 访问量 7181

猜你喜欢

转载自blog.csdn.net/weixin_45543556/article/details/105410786
今日推荐