C++-实验3

1. (24分) C+±S3-1 Location类

题目描述
设计一个用来表示直角坐标系的Location类,有两个double型私有数据成员x,y;主程序中,输入相应的值,创建类Location的两个对象a和b,要求a的坐标点在第3 象限,b的坐标点在第2象限;分别采用成员函数和友元函数计算给定两个坐标点之间的距离。
【提示】类Location的参考框架如下:
class Location
{
public:
Location(double a,double b);//构造函数
double getX(); //成员函数,取x坐标的值
double getY(); //成员函数,取y坐标的值
double distance1(Location &);//成员函数,求给定两点之间的距离
//友元函数,求给定两点之间的距离
friend double distance1(Location &,Location&);
private:
double x,y;
};

输入描述
二行,每行分别为一个点的坐标

输出描述
四行:
第一、二行分别为第一个点、第二个点的坐标
第三行为调用成员函数求出的点之间的距离
第四行为调用友元函数求出的点之间的距离

输入样例
1 2
6 7

输出样例
第一个点:A(1,2)
第二个点:B(6,7)
调用成员函数,Distance=7.07107
调用友元函数,Distance=7.07107

用户代码

#include 
#include 
#include 
using namespace std;

class Location
{
	public:
		Location(double a,double b):x(a),y(b){};   //构造函数
 
		double getX(){return x;};    //成员函数,取x坐标的值
		double getY(){return y;	};    //成员函数,取y坐标的值
		double distance1(Location &c);   //成员函数,求给定两点之间的距离	
		friend double distance1(Location &,Location&);	  //友元函数,求给定两点之间的距离
		
	private:
		double x,y;
};
double Location::distance1(Location &c){
	return sqrt(pow(this->x - c.x,2)+pow(this->y - c.y ,2));
}
double distance1(Location &c,Location &d)
{
	return sqrt(pow(c.x-d.x,2)+pow(c.y-d.y ,2) );
}


int main()
{
	double a,b;
	cin>>a>>b;
	Location s1(a,b);
	cin>>a>>b;
	Location s2(a,b);
 	
 
	 cout<<"第一个点:A("<<s1.getX()<<","<<s1.getY()<<")"<<endl;
	cout<<"第二个点:B("<<s2.getX()<<","<<s2.getY()<<")"<<endl;
	
	cout<<"调用成员函数,Distance="<<s1.distance1(s2)<<endl;
	cout<<"调用友元函数,Distance="<<distance1(s1,s2)<<endl;
 

	return 0;
 }

2. (24分) C++ -S3-2 Payroll类

题目描述
设计一个计算薪水的类Payroll,数据成员包括:单位小时工资、周工作小时、每周应付工资,其中每周应付工资=单位小时工资*周工作小时。要求:定义构造函数、析构函数、拷贝构造函数,常成员函数output()用来输出对象的数据成员值。主函数中定义两个对象:第一个对象的单位小时工资、周工作小时由键盘输入,第二个对象定义为常对象,他的单位小时工资为第一个对象的1.5倍,周工作小时相同,输出每个对象的信息。

输入描述
一行:第一个对象的单位小时工资、周工作小时

输出描述
两个对象的小时工资、周工作时数、周应付工资
函数调用的相关信息

输入样例
25 38

输出样例
Constructor is called!
小时工资:25 周工作时数:38 周应付工资:950
Copy constructor is called!
小时工资:37.5 周工作时数:38 周应付工资:1425
Destructor is called!
Destructor is called!

用户代码

#include 
using namespace std;
class Salary
{
	public:
		Salary(double m,double h):money(m),hour(h){
			cout<<"Constructor is called!"<<endl;
		};
		Salary(const Salary &c)
		{
			money=c.money*1.5;
			hour=c.hour;
			cout<<"Copy constructor is called!"<<endl;
		}
		
		~Salary(){
			cout<<"Destructor is called!"<<endl;
		};
		void f(void) const
		{
			cout<<"小时工资:"<<money<<" 周工作时数:"<<hour<<" 周应付工资:"<<money*hour<<endl;
		}
		
	private:
		double money,hour;
};
int main()
{
	double a,b;
	cin>>a>>b;
	Salary s1(a,b);
	s1.f();
	Salary s2(s1);

	s2.f();
	return 0;
}

3. (30分) C+±S3-3 组合类:Triangle类与Point类

题目描述
定义一个平面坐标系下的点类Point,有整型数据成员x,y坐标值。成员函数包括:(1)带默认值的构造函数,默认值均为0;(2)拷贝构造函数;(3)置x,y坐标值;(4)取x,y的坐标值,参数为两个整型量的引用,分别用于获取x,y坐标值。(5)输出函数,用于输出x,y坐标值。(6)求两个点之间距离的函数,参数是Point类的对象引用。
定义一个平面坐标系下的三角形类Triangle,数据成员为三个Point类的对象p1、p2、p3。成员函数包括:(1)带参数的构造函数,参数为整型量x1,y1,x2,y2,x3,y3,分别是三角形三个顶点的坐标。(2)带参数的构造函数,参数是三个Point类对象的引用。(3)求三角形周长。(4)求三角形面积。(5)输出三角形的三个顶点坐标、周长和面积。
定义一个普通函数:判断三个顶点坐标能否构成三角形。
main()中,从键盘输入三个点坐标,判断这三个点能否构成三角形,不能,则提示重新输入,并重新输入点坐标;能,则输出三个顶点坐标、周长和面积。

输入描述
三个点的坐标,如果不能构成三角形,再重新输入三个点的坐标

输出描述
三个顶点坐标
三角形周长、三角形面积

输入样例
0 0
1 1
2 2

0 0
5 6
3 0

输出样例
顶点坐标不正确,不能构成三角形!请重新输入坐标!
三角形三个顶点坐标为:
(0,0) (5,6) (3,0)
三角形周长为:17.1348,面积为:9

用户代码

#include 
#include 
using namespace std;

class Point
{
	public:
		Point(int x_=0,int y_=0):x(x_),y(y_)//1)带默认值的构造函数,默认值均为0; 
		{
			
		}
		void fxy(int a,int b)
		{
			x=a;
			y=b;
		}
		Point(const Point &n)  //(2)拷贝构造函数;
		{
			x=n.x;
			y=n.y;
		}
		int get_x(){  //3)置x,y坐标值;
			return x;
		}
		int get_y(){
			return y;
		}
		void print()
		{
			cout<<"("<<x<<","<<y<<")"<<" ";
		}
	double length(Point &n)
		{
			return sqrt(pow(x-n.x,2)+pow(y-n.y ,2) );
		}
		

	private:
		int x,y;
		
 }; 
 
class Tri
{
	public:
		Tri(int x1,int y1,int x2,int y2,int x3,int y3) 
		{
			p1.fxy(x1,y1);
			p2.fxy(x2,y2);
			p3.fxy(x3,y3); 
		}
		void fuzhi(int x1,int y1,int x2,int y2,int x3,int y3) 
		{
			p1.fxy(x1,y1);
			p2.fxy(x2,y2);
			p3.fxy(x3,y3); 
		}
		
		bool f()
		{
			if(p1.length(p2)+p1.length(p3)>p2.length(p3)  && p1.length(p2)-p1.length(p3)<p2.length(p3)  
			&&	( p2.get_y()-p1.get_y() ) *1.0/  ( p2.get_x()-p1.get_x())  !=   (p3.get_y()-p1.get_y()  ) *1.0/ p3.get_x()-p1.get_x() )
				return true;
			else return false;
		}
		
		double zhouchang()
		{
			return p1.length(p2)+p1.length(p3)+p2.length(p3); 
		}
		double mianji()
		{
			double p=1.0/2*( p1.length(p2)+p1.length(p3)+p2.length(p3) );
			return sqrt(p* (p-p1.length(p2)) * (p-p1.length(p3)) * (p-p2.length(p3) ));
		}
		
		void print()
		{
			p1.print();
			p2.print();
			p3.print();
			cout<<endl;  
		}	
	private:
		Point p1,p2,p3;
};

int main()
{
	int a,b,c,d,e,f;
	cin>>a>>b>>c>>d>>e>>f;
	Tri D(a,b,c,d,e,f); 
	while(!D.f() )
	{
		cout<<"顶点坐标不正确,不能构成三角形!请重新输入坐标!"<<endl;
		cin>>a>>b>>c>>d>>e>>f;
		D.fuzhi(a,b,c,d,e,f); 
	}
	cout<<"三角形三个顶点坐标为:"<<endl;
	D.print();
 
	cout<<"三角形周长为:"<<D.zhouchang() <<",面积为:"<<D.mianji() ; 
		 
	return 0;
 }

4. (22分) C+±S3-4 标准类string的使用

题目描述
使用C++中的string标准类,将5个字符串按由小到大顺序输出(注意:使用string类中封装的成员函数)。
说明:查阅C++类库中的string类,了解类中的成员函数和运算符。

输入描述
五个字符串

输出描述
按由小到大排列的5个字符串

输入样例
string month attack price hello

输出样例
排序后的结果为:
attack hello month price string

用户代码

#include 
#include 
using namespace std;


int main()
{
	string s[5];
	for(int i=0;i<5;i++)
		cin>>s[i];
	int i,j;
	for(i=0;i<5;i++)
	{
		for(j=i+1;j<5;j++)
		if(s[i]>s[j])
		{
			string t;
			t=s[i];s[i]=s[j];s[j]=t;
		}
	}
	cout<<"排序后的结果为:";
	for(int i=0;i<5;i++)
		cout<<s[i]<<" ";
	return 0;
 }

你可能感兴趣的:(#,C++)