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 <iostream>
#include <string>
#include <cmath>
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 <iostream>
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 <iostream>
#include <cmath>
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 <iostream>
#include <string>
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;
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章