1. 程式人生 > ># C++題目(SDUST-OJ)--(更新中)

# C++題目(SDUST-OJ)--(更新中)

CSDN的更新不及時,而且CSDN的排版感覺有問題==,可以去這看。

C++題目(OJ)

1.陣列類(1)

Description

封裝一個整型陣列類,用於儲存整數和處理的相關功能,支援以下操作:

  1. Array::Array()無參構造方法:建立一個空陣列物件。
  2. Array::size()方法:返回Array物件中元素個數。
  3. Array::get(int n)方法:按格式從輸入讀取n元素。
  4. 下標運算子:返回下標所指的元素。

-----------------------------------------------------------------------------

你設計一個數組類Array,使得main()函式能夠正確執行。

append.cc中已給出main()函式

Input

輸入的第一個整數n,表示有n組測試資料。

後面的每行以一個整數k開頭,表示後面有k個整數。

Output

把輸入的陣列,輸出出來。每行資料對應一個輸出。格式見sample。

Sample Input

4

2 10 20

1 0

0

3 1 2 3

Sample Output

10 20

0

1 2 3

HINT

Append Code

#include <iostream>
#include <vector>
using namespace std;
class Array{
private:
	vector<int> arr;
	int l;
public:
	Array(){l=0;}
	int size(){return arr.size();}
	void get(int n){
		arr.resize(n);
		l=n;
		for(int i=0;i<l;i++){
			int m;
			cin >> m;
			arr[i]=m;
		}
	}
	int operator[](int n){return arr[n];}
};
/////////////////////////////////////
int main()
{
    int cases;
    Array arr;
    cin >> cases;
    for(int ca = 1; ca <= cases; ca++)
    {
        int len;
        cin >> len;
        arr.get(len);
        for(int i = 0; i < arr.size(); i++)
            if(i + 1 == arr.size())
                cout << arr[i];
            else
                cout << arr[i] << " ";
        cout << endl;
    }
}

詳細的函式實現功能:其中vector c.

​ c.clear() 移除容器中所有資料。

​ c.empty() 判斷容器是否為空。

​ c.erase(pos) 刪除pos位置的資料

​ c.erase(beg,end) 刪除[beg,end)區間的資料

​ c.front() 傳回第一個資料。

​ c.insert(pos,elem) 在pos位置插入一個elem拷貝

​ c.pop_back() 刪除最後一個數據。

​ c.push_back(elem) 在尾部加入一個數據。

​ c.resize(num) 重新設定該容器的大小

​ c.size() 回容器中實際資料的個數。

​ c.begin() 返回指向容器第一個元素的迭代器

​ c.end() 返回指向容器最後一個元素的迭代器

2. Base與Derived

Description

定義Base和Derived類,Derived類是Base類的子類,兩個類都只有1個int型別的屬性。定義它們的建構函式和解構函式,輸出資訊如樣例所示。

Input

輸入2個整數。

Output

見樣例。

Sample Input

100

200

Sample Output

Base 100 is created.Base 100 is created.Derived 200 is created.Derived 200 is created.Base 100 is created.Base 100 is created.

HINT

Append Code

#include <bits/stdc++.h>
using namespace std;
class Base{
public:
	int a;
	Base(int aa):a(aa){cout << "Base " << a << " is created." << endl;}
	~Base(){cout << "Base " << a << " is created." << endl;}
};
class Derived: public Base{
public:
	int b;
	Derived(int aa,int bb):Base(aa),b(bb){cout << "Derived " << a << " is created." << endl;}
	~Derived(){cout << "Derived " << a << " is created." << endl;}
};
int main()
{
    int a, b;
    cin>>a>>b;
    Base base(a);
    Derived derived(a, b);
    return 0;
}

3. 編寫函式:三個數的最大最小值 (Append Code)

Description

給出三個數a,b,c,最大值是?最小值是?

-----------------------------------------------------------------------------

編寫以下兩個函式:

get_num()的功能是讀取輸入的三個整數a,b,c;

max_min()的功能是求出a,b,c的最大值和最小值。

以上函式的呼叫格式見“Append Code”。這裡不給出函式原型,請通過main()函式自行確定。

Input

輸入的第一個整數n,表示有n組測試資料,每組3個整數:a,b,c。a,b,c都在int類型範圍內。

Output

每組測試資料對應輸出一行:為a,b,c的最大值和最小值,格式見sample。

Sample Input

520 15 1010 15 20100 100 00 1 -10 0 0

Sample Output

case 1 : 20, 10case 2 : 20, 10case 3 : 100, 0case 4 : 1, -1case 5 : 0, 0

HINT

Append Code

#include <bits/stdc++.h>
using namespace std;
void get_num(int &a,int &b,int &c){
	cin >> a >> b >> c;
}
void max_min(int &mmax,int &mmin,int &a,int &b,int &c){
	mmax = a;
	mmin = a;
	if(b > mmax)
		mmax = b;  
	if(b < mmin)
		mmin = b;
	if(c > mmax)
		mmax = c;
	if(c < mmin)
		mmin = c;
}
////////////////////////////
int main()
{
    int cases;
    int mmax, mmin, a, b, c;
 
    cin>>cases;
    for(int i = 1; i <= cases; ++i)
    {
        get_num(a, b, c);
        max_min(mmax, mmin, a, b, c);
        cout<<"case "<<i<<" : "<<mmax<<", "<<mmin<<endl;
    }
}

4. 過載函式:max

Description

編寫兩個名為max的函式,它們是過載函式 ,用於求兩個整數或實數的最大值。它們的原型分別是:

int max(int a,int b);

double max(double a,double b);

返回值是a和b的最大值。

Input

輸入4個數,前兩個數是int型別的整數,後2個數是double型別的實數。

Output

輸出2個數,每個數佔一行。第一個數對應於輸入的兩個整數的最大值,第二個數對應於輸入的兩個實數的最大值。

Sample Input

1 21.4 1.3

Sample Output

21.4

HINT

Append Code

#include <iostream>
using namespace std;
int max(int a,int b){
	int max;
	if(a > b)
		max = a;
	else
		max = b;
	return max;
}
double max(double a,double b){
	double max;
	if(a > b)
		max = a;
	else
		max = b;
	return max;
}
////////////////////
int main()
{
    int a,b;
    double c,d;
    cin>>a>>b;
    cout<<max(a,b)<<endl;
    cin>>c>>d;
    cout<<max(c,d)<<endl;
    return 0;
}

5. 預設引數:求圓面積

Description

編寫一個帶預設值的函式,用於求圓面積。其原型為:

double area(double r=1.0);

當呼叫函式時指定引數r,則求半徑為r的圓的面積;否則求半徑為1的圓面積。

其中,PI取值3.14。

Input

一個實數,是圓的半徑。

Output

輸出有2行。第一行是以輸入數值為半徑的圓面積,第二行是半徑為1的圓面積。

Sample Input

19

Sample Output

1133.543.14

HINT

Append Code

#include <iostream>
using namespace std;
#define PI 3.14
double area(double r = 1.0){
	return PI*r*r;
} 

/////////////////////////
int main()
{
    double r;
    cin>>r;
    cout<<area(r)<<endl;
    cout<<area()<<endl;
    return 0;
}

6. 求(x-y+z)*2

Description

編寫一個程式,求解以下三個函式:

f(x,y,z)=2*(x-y+z)

f(x,y) =2*(x-y)

f(x) =2*(x-1)

append.cc中已給出main()函式。

Input

輸入的測試資料為多組。每組測試資料的第一個數是n(1<=n<=3),表示後面有n個整數。

當n為3時,後跟3個輸入為x,y,z;

當n為2時,後跟2個輸入為x,y;

當n為1時,後跟1個輸入為x;

當n為0時,表示輸入結束

輸入的n不會有其他取值。

所有運算都不會超出int類型範圍。

Output

每組測試資料對應一個輸出。輸出x-y+z的值。

Sample Input

3 121 38 452 39 111 73

Sample Output

25656144

HINT

Append Code

#include <bits/stdc++.h>
using namespace std;
int f(int x,int y,int z){
	return 2*(x-y+z);
}
int f(int x,int y){
	return 2*(x-y);
}
int f(int x){
	return 2*(x-1);
}

////////////////////////
int main()
{
    int n, x, y, z;
    while(cin>>n)
    {
        if(n == 3)
        {
            cin>>x>>y>>z;
            cout<<f(x, y, z)<<endl;
        }
        if(n == 2)
        {
            cin>>x>>y;
            cout<<f(x, y)<<endl;
        }
        if(n == 1)
        {
            cin>>x;
            cout<<f(x)<<endl;
        }
        if(n == 0)
            break;
    }
}

7. 編寫函式:Swap (I) (Append Code)

Description

編寫用來交換兩個數的函式,使得“Append Code”中的main()函式能正確執行。

-----------------------------------------------------------------------------

用C實現三個函式int_swap()、dbl_swap()、SWAP(),其中SWAP()是個帶參巨集。

用C++實現兩個函式,都以swap()命名。

以上函式的呼叫格式見“Append Code”。這裡不給出函式原型,它們的引數請通過main()函式自行確定。

Input

輸入為4行,每行2個數。

Output

輸出為4行,每行2個數。每行輸出的兩數為每行輸入的逆序。

Sample Input

12 579 -3-12 43 5

Sample Output

57 12-3 94 -125 3

HINT

“Append Code”中用到的標頭檔案、全域性變數或巨集的定義應自行補充。

Append Code

#include <bits/stdc++.h>
using namespace std;
int swap(int *a,int *b){
	int c;
	c = *a;
	*a = *b;
	*b = c;
}
double swap(double *a,double *b){
	double c;
	c = *a;
	*a = *b;
	*b = c;

}
////////////////////
int main()
{
    int x1, y1;
     
    cin>>x1>>y1;
    swap(&x1, &y1);
    cout<<x1<<" "<<y1<<endl;
     
    cin>>x1>>y1;
    swap(x1, y1);
    cout<<x1<<" "<<y1<<endl;
 
    double x2, y2;
     
    cin>>x2>>y2;
    swap(&x2, &y2);
    cout<<x2<<" "<<y2<<endl;
     
    cin>>x2>>y2;
    swap(x2, y2);
    cout<<x2<<" "<<y2<<endl;
}

8. 你會定義類嗎?

Description

定義一個類Demo,有建構函式、解構函式和成員函式show(),其中show()根據樣例的格式輸出具體屬性值。該類只有一個int型別的成員。

Input

輸入只有一個整數,int類型範圍內。

Output

見樣例。

Sample Input

-100

Sample Output

A data 10 is created!A data 0 is created!A data -100 is created!This is data 10This is data 0This is data -100A data -100 is erased!A data 0 is erased!A data 10 is erased!

HINT

Append Code

[append.cc](file:///D:/郝佳偉的檔案/學習資料/OJ-C++/實驗/1/Problem%20A_%20你會定義類嗎?_files/Source%20Code.html),

#include <iostream>
using namespace std;
class Demo{
public:
	int a;
	Demo(int aa=0):a(aa){cout << "A data " << a << " is created!" << endl;}
	~Demo(){cout << "A data " << a << " is erased!" << endl;}
	void show(){cout << "This is data " << a << endl;}
};
/////////////////////
int main()
{
    Demo tmp(10), tmp2;
    int d;
    cin>>d;
    Demo tmp3(d);
 
    tmp.show();
    tmp2.show();
    tmp3.show();
    return 0;
}

9. 一元二次方程類

Description

定義一個表示一元二次方程的類Equation,該類至少具有以下3個數據成員:a、b和c,用於表示方程“axx + b*x +c = 0”。同時,該類還至少具有以下兩個成員函式:

\1. void solve():用於求方程的根。

\2. void printRoot():用於輸出方程的根。

設定:

\1. 所有輸入的a、b、c所生成的方程必定有個2個不同的實根。

\2. 輸出的兩個根按照從大到小的順序輸出,兩個根之間用一個空格隔開,而且每個根必須且僅能保留2位小數,即使小數部分為0。

\3. 請根據樣例和給出的main()函式定義相應的建構函式。

Input

輸入有若干行,每行有3個實數,分別為方程“axx + b*x + c = 0”中的係數a、b、c。

Output

按照題目要求中的設定條件2輸出方程的根。

Sample Input

1 3 2

Sample Output

-1.00 -2.00

HINT

可以使用fixed和setprecision()來實現輸出固定小數位數的數值。

Append Code

[append.cc](file:///D:/郝佳偉的檔案/學習資料/OJ-C++/實驗/1/Problem%20B_%20一元二次方程類_files/Source%20Code.html),

#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
class Equation{
public:
	double a,b,c,drt,x1,x2;
	Equation(double aa,double bb,double cc):a(aa),b(bb),c(cc){}
	void solve(){
		drt=sqrt(b*b-4*a*c);
	}
	void printRoot(){
		x1=(-b+drt)/(2*a);
		x2=(-b-drt)/(2*a);
		 cout << setiosflags(ios::fixed) << setprecision(2) << x1 << " " << x2 << endl; 
	}
};
////////////////////////////////
int main()
{
    double a, b, c;
    while (cin>>a>>b>>c)
    {
        Equation equ(a,b,c);
        equ.solve();
        equ.printRoot();
    }
    return 0;
}

fixed 和setprecision()的用法

使用setprecision(n)可控制輸出流顯示浮點數的數字個數。C++預設的流輸出數值有效位是6。
如果setprecision(n)與setiosflags(ios::fixed)合用,可以控制小數點右邊的數字個數。setiosflags(ios::fixed)是用定點方式表示實數。
如果與setiosnags(ios::scientific)合用, 可以控制指數表示法的小數位數。setiosflags(ios::scientific)是用指數方式表示實數。

10. 整數的封裝

Description

現在,請編寫一個Integer類,將整數封裝起來。目前,只需要你來實現最基本的功能:

\1. 具有2個建構函式:

(1)Integer::Integer(int):根據引數構建一個整數物件。

(2)Integer::Integer(char*, int):根據給定的字串和進位制來構建一個整數物件。

\2. 具有一個int Integer::getValue()方法,用於返回Integer類中所封裝的整數的具體數值。

Input

輸入分為多行。

第一行是一個正整數M,表示其後面的M行為M個整數,每行一個整數。

第M+2行是一個正整數N,表示其後有N行。每行由利用一個空格隔開的2部分組成:前半部分是一個字串,後半部分是該字串所使用的進位制。

注意:

\1. 所有的輸入,均在int型別的表示範圍內,且所有的輸入均為合法輸入。

\2. 利用09和az可最大可以表示36進位制的數值。

Output

輸出為M+N行,每行為一個十進位制整數,且輸出順序應與輸入順序相同。

Sample Input

2999-199940111 21a 16z 36a 16

Sample Output

999-19997263510

HINT

Append Code

[append.cc](file:///D:/郝佳偉的檔案/學習資料/OJ-C++/實驗/1/Problem%20C_%20整數的封裝_files/Source%20Code.html),

11. 平面上的點——Point類 (I)

Description

在數學上,平面直角座標系上的點用X軸和Y軸上的兩個座標值唯一確定。現在我們封裝一個“Point類”來實現平面上的點的操作。

根據“append.cc”,完成Point類的構造方法和show()方法。

介面描述:
Point::show()方法:按輸出格式輸出Point物件。

Input

輸入多行,每行為一組座標“x,y”,表示點的x座標和y座標,x和y的值都在double資料範圍內。

Output

輸出為多行,每行為一個點,X座標在前,Y座標在後,Y座標前面多輸出一個空格。每個座標的輸出精度為最長16位。輸出格式見sample。

C語言的輸入輸出被禁用。

Sample Input

1,23,32,1

Sample Output

Point : (1, 2)Point : (3, 3)Point : (2, 1)Point : (0, 0)

HINT

注意精度控制,C語言的輸入輸出被禁用。

Append Code

#include <iostream>
using namespace std;
class Point{
public:
	double x,y;
	Point():x(0),y(0){}
	Point(double xx,double yy):x(xx),y(yy){}
	void show(){cout << "Point : (" << x << ", " << y << ")" << endl;}
};
//////////////////////
int main()
{
    char c;
    double a, b;
    Point q;
    while(std::cin>>a>>c>>b)
    {
        Point p(a, b);
        p.show();
    }
    q.show();
}

12. 平面上的點——Point類 (II)

Description

在數學上,平面直角座標系上的點用X軸和Y軸上的兩個座標值唯一確定。現在我們封裝一個“Point類”來實現平面上的點的操作。

根據“append.cc”,完成Point類的構造方法和show()方法,輸出各Point物件的構造和析構次序。

介面描述:
Point::show()方法:按輸出格式輸出Point物件。

Input

輸入多行,每行為一組座標“x,y”,表示點的x座標和y座標,x和y的值都在double資料範圍內。

Output

輸出每個Point物件的構造和析構行為。對每個Point物件,呼叫show()方法輸出其值:X座標在前,Y座標在後,Y座標前面多輸出一個空格。每個座標的輸出精度為最長16位。輸出格式見sample。

C語言的輸入輸出被禁用。

Sample Input

1,2

3,3

2,1

Sample Output

Point : (0, 0) is created.Point : (1, 2) is created.Point : (1, 2)Point : (1, 2) is erased.Point : (3, 3) is created.Point : (3, 3)Point : (3, 3) is erased.Point : (2, 1) is created.Point : (2, 1)Point : (2, 1) is erased.Point : (0, 0) is copied.Point : (1, 1) is created.Point : (0, 0)Point : (1, 1)Point : (0, 0)Point : (1, 1) is erased.Point : (0, 0) is erased.Point : (0, 0) is erased.

HINT

思考建構函式、拷貝建構函式、解構函式的呼叫時機。

Append Code

#include <iostream>
using namespace std;
class Point{
public:
	double x,y;
	Point():x(0),y(0){cout << "Point : (" << x << ", " << y << ") is created." << endl;}
	Point(double xx,double yy):x(xx),y(yy){cout << "Point : (" << x << ", " << y << ") is created." << endl;}
	Point(const Point& p):x(p.x),y(p.y){cout << "Point : (0, 0) is copied." << endl;}
	Point(double xx):x(xx),y(xx){cout << "Point : (" << x << ", " << y << ") is created." << endl;}
	~Point(){cout << "Point : (" << x << ", " << y << ") is erased." << endl;}
	void show(){cout << "Point : (" << x << ", " << y << ")" << endl;}
};
//////////////////////////
int main()
{
    char c;
    double a, b;
    Point q;
    while(std::cin>>a>>c>>b)
    {
        Point p(a, b);
        p.show();
    }
    Point q1(q), q2(1);
    q1.show();
    q2.show();
    q.show();
}

13. 平面上的點——Point類 (III)

Description

在數學上,平面直角座標系上的點用X軸和Y軸上的兩個座標值唯一確定。現在我們封裝一個“Point類”來實現平面上的點的操作。

根據“append.cc”,完成Point類的構造方法和show()方法,輸出各Point物件的構造和析構次序。實現showPoint()函式。

介面描述:
showPoint()函式按輸出格式輸出Point物件,呼叫Point::show()方法實現。
Point::show()方法:按輸出格式輸出Point物件。

Input

輸入多行,每行為一組座標“x,y”,表示點的x座標和y座標,x和y的值都在double資料範圍內。

Output

輸出每個Point物件的構造和析構行為。showPoint()函式用來輸出(通過引數傳入的)Point物件的值:X座標在前,Y座標在後,Y座標前面多輸出一個空格。每個座標的輸出精度為最長16位。輸出格式見sample。

C語言的輸入輸出被禁用。

Sample Input

1,2

3,3

2,1

Sample Output

Point : (0, 0) is created.

Point : (1, 2) is created.

Point : (1, 2) is copied.

Point : (1, 2)

Point : (1, 2) is erased.

Point : (1, 2) is erased.

Point : (3, 3) is created.

Point : (3, 3) is copied.

Point : (3, 3)

Point : (3, 3) is erased.

Point : (3, 3) is erased.

Point : (2, 1) is created.

Point : (2, 1) is copied.

Point : (2, 1)

Point : (2, 1) is erased.

Point : (2, 1) is erased.

Point : (0, 0) is copied.

Point : (1, 1) is created.

Point : (0, 0) is copied.

Point : (1, 1) is copied.

Point : (0, 0) is copied.

Point : (0, 0)

Point : (1, 1)

Point : (0, 0)

Point : (0, 0) is erased.

Point : (1, 1) is erased.

Point : (0, 0) is erased.

Point : (1, 1) is erased.

Point : (0, 0) is erased.

Point : (0, 0) is erased.

HINT

思考建構函式、拷貝建構函式、解構函式的呼叫時機。

Append Code

#include <iostream>
using namespace std;
class Point{
public:
	double x,y;
	Point():x(0),y(0){cout << "Point : (" << x << ", " << y << ") is created." << endl;}
	Point(double xx,double yy):x(xx),y(yy){cout << "Point : (" << x << ", " << y << ") is created." << endl;}
	Point(const Point& p):x(p.x),y(p.y){cout << "Point : (0, 0) is copied." << endl;}
	Point(double xx):x(xx),y(xx){cout << "Point : (" << x << ", " << y << ") is created." << endl;}
	~Point(){cout << "Point : (" << x << ", " << y << ") is erased." << endl;}
	void show(){cout << "Point : (" << x << ", " << y << ")" << endl;}
};
void showPoint(Point s){s.show();}
void showPoint(Point a,Point b,Point c){a.show();b.show();c.show();}
////////////////////////////////
int main()
{
    char c;
    double a, b;
    Point q;
    while(std::cin>>a>>c>>b)
    {
        Point p(a, b);
        showPoint(p);
    }
    Point q1(q), q2(1);
    showPoint(q1, q2, q);
}

14. 平面上的點——Point類 (IV)

Description

在數學上,平面直角座標系上的點用X軸和Y軸上的兩個座標值唯一確定。現在我們封裝一個“Point類”來實現平面上的點的操作。
根據“append.cc”,完成Point類的構造方法和show()、showCounter()、showSumOfPoint()方法;實現showPoint()函式。
介面描述:
showPoint()函式:按輸出格式輸出Point物件,呼叫Point::show()方法實現。
Point::show()方法:按輸出格式輸出Point物件。
Point::showCounter()方法:按格式輸出當前程式中Point物件的計數。
Point::showSumOfPoint()方法:按格式輸出程式執行至當前存在過的Point物件總數。

Input

輸入多行,每行為一組座標“x,y”,表示點的x座標和y座標,x和y的值都在double資料範圍內。

Output

對每個Point物件,呼叫show()方法輸出其值,或者用showPoint()函式來輸出(通過引數傳入的)Point物件的值:X座標在前,Y座標在後,Y座標前面多輸出一個空格。每個座標的輸出精度為最長16位。呼叫用showCounter()方法和showSumOfPoint()輸出Point物件的計數統計,輸出格式見sample。
C語言的輸入輸出被禁用。

Sample Input

1,2

3,3

2,1

Sample Output

Point : (1, 2)

Current : 2 points.

Point : (3, 3)

Current : 2 points.

Point : (2, 1)

Current : 2 points.

In total : 4 points.

Current : 3 points.

Point : (0, 0)

Point : (1, 1)

Point : (0, 0)

In total : 6 points.

HINT

物件計數通過靜態成員來實現

Append Code

#include <iostream>
using namespace std;
class Point{  
private:  
    double x,y;  
    static int sum,num;  
public:  
    Point():x(0),y(0){num++;sum++;}  
    Point(double a):x(a),y(1){num++;sum++;}  
    Point(double a,double b):x(a),y(b){num++;sum++;}  
    Point(const Point&p){x=p.x;y=p.y;num++;sum++;}  
    ~Point(){num--;}  
    void show(){cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<")"<<endl;}  
    static void showCounter(){cout<<setprecision(16)<<"Current : "<<num<<" points."<<endl;}  
    static void showSumOfPoint(){cout<<setprecision(16)<<"In total : "<<sum<<" points."<<endl;}  
};  
void showPoint(Point &a,Point &b,Point &c){a.show();b.show();c.show();}  
int Point::sum=0;  
int Point::num=0;  
////////////////////////////
int main()
{
    char c;
    double a, b;
    Point q;
    while(std::cin>>a>>c>>b)
    {
        Point p(a, b);
        p.show();
        p.showCounter();
    }
    q.showSumOfPoint();
    Point q1(q), q2(1);
    Point::showCounter();
    showPoint(q1, q2, q);
    Point::showSumOfPoint();
}

15. 平面上的點——Point類 (V)

Description

在數學上,平面直角座標系上的點用X軸和Y軸上的兩個座標值唯一確定。現在我們封裝一個“Point類”來實現平面上的點的操作。
根據“append.cc”,完成Point類的構造方法和介面描述中的方法。
介面描述:
showPoint()函式:按輸出格式輸出Point物件。
Point::show()方法:按輸出格式輸出Point物件。
Point::showSumOfPoint()方法:按格式輸出程式執行至當前存在過的Point物件總數。
Point::x()方法:取x座標。
Point::y()方法:取y座標。
Point::x(double)方法:傳引數設定x座標並返回。
Point::y(double)方法:傳引數設定y座標並返回。
Point::getX()方法:取x座標。
Point::getY()方法:取y座標。
Point::setX()方法:傳引數設定x座標並返回。
Point::setY()方法:傳引數設定y座標並返回。
Point::setPoint(double,double)方法:設定Point物件的x座標(第一個引數)和y座標(第二個引數)並返回本物件

Input

輸入多行,每行為一組座標“x,y”,表示點的x座標和y座標,x和y的值都在double資料範圍內。

Output

用ShowPoint()函式來輸出(通過引數傳入的)Point物件的值或座標值:X座標在前,Y座標在後,Y座標前面多輸出一個空格。每個座標的輸出精度為最長16位。
對每個Point物件,呼叫show()方法輸出其值,輸出格式與ShowPoint()函式略有不同:“Point[i] :”,i表示這是程式執行過程中第i個被建立的Point物件。
呼叫showSumOfPoint()輸出Point物件的計數統計,輸出格式見sample。
C語言的輸入輸出被禁用。

Sample Input

1,2

3,3

2,1

Sample Output

Point : (1, 2)

Point : (3, 3)

Point : (2, 1)

Point : (1, 1)

Point : (4, -3)

gorgeous separator

Point[1] : (1, 0)

Point[2] : (3, 3)

Point[3] : (0, 0)

Point[4] : (4, -3)

Point[64] : (1, 0)

Point[64] : (1, 0)

gorgeous separator

In total : 66 points.

HINT

傳遞和返回引用是不構造新物件的。給函式正確的返回值。

Append Code

#include <iostream>  
#include <iomanip>  
using namespace std;  
class Point  
{  
private :  
    double x_,y_;  
    static int total_num;  
    int id;  
public:  
    Point(){ x_ = 0;y_ = 0;total_num++; id = total_num; }  
    Point (double xx )  
    {  
        x_ = xx;  
        y_ = xx ;  
         total_num++;  
         id = total_num;  
    }  
    Point(double xx, double yy)  
    {  
        x_ = xx;  
        y_ = yy;  
        total_num++;  
        id = total_num;  
    }  
    Point(const Point & pt)  
    {  
        x_ = pt.x_;  
        y_ = pt.y_;  
        total_num++;  
        id = total_num;  
    }  
    double x() const  
    {  
        return x_;  
    }  
    double y() const  
    {  
        return y_;  
    }  
    double x( double xx)  
    {  
        return ( x_ = xx);  
    }  
    double y(double yy)  
    {  
        return ( y_ = yy);  
    }  
    double getX() const  
    {  
        return x_;  
    }  
    double getY() const  
    {  
        return y_;  
    }  
    double setX(double xx)  
    {  
        return ( x_ = xx);  
    }  
    double setY(double yy)  
    {  
        return (y_ = yy);  
    }  
    Point & setPoint(double xx,double yy)  
    {  
        x_ = xx;  
        y_ = yy;  
        return *this;  
    }  
    void show() const  
    {  
          cout<<setprecision(16)<<"Point["<<id<<"] : ("<< x_ << ", " << y_ << ")" <<endl;  
       //cout << "Current : " <<num << " points."  <<endl;  
    }  
   static void showSumOfPoint()  
    {  
        cout << setprecision(16) <<"In total : " <<  total_num << " points."<<endl;  
    }  
};  
int Point::total_num;  
void ShowPoint(Point p)  
{  
    cout<<std::setprecision(16)<<"Point : ("<<p.x()<<", "<<p.y()<<")"<<endl;  
}  
   
void ShowPoint(double x, double y)  
{  
    Point p(x, y);  
    cout<<std::setprecision(16)<<"Point : ("<<p.x()<<", "<<p.y()<<")"<<endl;  
}  
   
void ShowPoint(Point &p, double x, double y)  
{  
    cout<<std::setprecision(16)<<"Point : ("<<p.x(x)<<", "<<p.x(y)<<")"<<endl;  
}  
   
int main()  
{  
    int l(0);  
    char c;  
    double a, b;  
    Point pt[60];  
    while(std::cin>>a>>c>>b)  
    {  
        if(a == b)  
            ShowPoint(pt[l].setPoint(a, b));  
        if(a > b)  
            ShowPoint(a, b);  
        if(a < b)  
            ShowPoint(pt[l], a, b);  
        l++;  
    }  
    Point p(a), q(b);  
    ShowPoint(q);  
    double x(0), y(0);  
    for(int i = 0; i < l; i++)  
        x += pt[i].getX(), y -= pt[i].getY();  
    ShowPoint(pt[l].setX(x), pt[l].setY(y));  
    cout<<"==========gorgeous separator=========="<<endl;  
    for(int i = 0; i <= l; i++)  
        pt[i].show();  
    q.setPoint(q.x() - p.x() + a, q.y() - p.y() + b).show();  
    q.show();  
    cout<<"==========gorgeous separator=========="<<endl;  
    p.showSumOfPoint();  
}  

16. 平面上的點——Point類 (VI)

Description

在數學上,平面直角座標系上的點用X軸和Y軸上的兩個座標值唯一確定。現在我們封裝一個“Point類”來實現平面上的點的操作。

根據“append.cc”,完成Point類的構造方法和介面描述中的方法和函式。

介面描述:
showPoint()函式:按輸出格式輸出Point物件。
Point::show()方法:按輸出格式輸出Point物件。
Point::showSumOfPoint()方法:按格式輸出程式執行至當前存在過的Point物件總數。
Point::x()方法:取x座標。
Point::y()方法:取y座標。
Point::x(double)方法:傳引數設定x座標並返回。
Point::y(double)方法:傳引數設定y座標並返回。
Point::setPoint(double,double)方法:設定Point物件的x座標(第一個引數)和y座標(第二個引數)並返回本物件。
Point::isEqual()方法:判斷傳入的引數與物件的座標是否相同,相同返回true。
Point::copy()方法:傳引數複製給物件。
Point::inverse()方法,有兩個版本:不傳引數則將物件自身的x座標和y座標互換;若將Point物件做引數傳入,則將傳入物件的座標交換複製給物件自身,不修改引數的值。

Input

輸入多行,每行為一組座標“x,y”,表示點的x座標和y座標,x和y的值都在double資料範圍內。

Output

用ShowPoint()函式來輸出(通過引數傳入的)Point物件的值或座標值:X座標在前,Y座標在後,Y座標前面多輸出一個空格。每個座標的輸出精度為最長16位。
對每個Point物件,呼叫show()方法輸出其值,輸出格式與ShowPoint()函式略有不同:“Point[i] :”,i表示這是程式執行過程中第i個被建立的Point物件。
呼叫showSumOfPoint()輸出Point物件的計數統計,輸出格式見sample。
C語言的輸入輸出被禁用。

Sample Input

1,2

3,3

2,1

Sample Output

Point[3] : (1, 2)

Point[1] : (2, 1)

Point[4] : (3, 3)

Point[1] : (3, 3)

Point[5] : (1, 2)

Point[1] : (1, 2)

Point[2] : (0, 0)

gorgeous separator

Point[2] : (-7, 5)

Point[3] : (1, 2)

Point[4] : (3, 3)

Point[5] : (1, 2)

Point[6] : (-7, 5)

gorgeous separator

Point[63] : (3, 3)

Point : (3, 3)

Point : (3, 3)

Point : (3, 3)

In total : 64 points.

HINT

給函式正確的返回值。注意常量物件呼叫的函式。

Append Code

#include <iostream>
#include <iomanip>
using namespace std;
class Point
{

    double m,n;
    int count;
    static int sum;
public :

    friend void ShowPoint(Point);
    friend void ShowPoint(double, double);

    void show()const
    {
        cout<<setprecision(16)<<"Point["<<count<<"] : ("<<m<<", "<<n<<")"<<endl;
    }
    double x(double a)
    {
        m = a;
        return a;

    }
    double y(double b)
    {
        n = b;
        return b;
    }
    double x()const
    {
        return m;
    }
    double y()const
    {

        return n;
    }
    Point  &setPoint(double a,double b)
    {
        m=a;
        n=b;
        return *this;
    }void showSumOfPoint()const
    {
        cout << "In total : " <<sum << " points." << endl;
    }
    Point(double a,double b)
    {

        m = a;
        n = b;
        sum++;
        count =sum;
    }
    Point():m(0),n(0)
    {
        sum++;
        count =sum;
    }
    Point (Point p)
    {
        setPoint(p.getx(),p.gety());
        return *this;
    }
    Point& inverse()
    {
        double temp=m;
        m=n;
        n=temp;
        return *this;
    }
    Point& inverse(Point p)
    {

        m=p.n;
        n=p.m;
        return *this;
    }
    double getx()
    {
     return this->m;
    }
    double gety()
    {
     return this->n;
    }

    bool isEqual(const Point &p)const
    {
        if(p.m == m && p.n == n)
            return true;
        return false;
    }

};
void ShowPoint(Point p)
{
    cout<<std::setprecision(16)<<"Point : ("<< p.x() <<", "<< p.y() <<")"<<endl;
}
void ShowPoint(double a,double b)
{
    cout<<std::setprecision(16)<<"Point : ("<<a<<", "<<b<<")"<<endl;
}
int Point::sum = 0;
int main()
{
    int l(0);
    char c;
    double a, b;
    Point p, q, pt[60];
    while(std::cin>>a>>c>>b)
    {
        if(a == b)
            p.copy(pt[l].setPoint(a, b));
        if(a > b)
            p.copy(pt[l].setPoint(a, b).inverse());
        if(a < b)
            p.inverse(pt[l].setPoint(a, b));
        if(a < 0)
            q.copy(p).inverse();
        if(b < 0)
            q.inverse(p).copy(pt[l]);
        pt[l++].show();
        p.show();
    }
    q.show();
    cout<<"==========gorgeous separator=========="<<endl;
    double x(0), y(0);
    for(int i = 0; i < l; i++)
        x += pt[i].x(), y -= pt[i].y();
    pt[l].x(y), pt[l].y(x);
    q.copy(pt[l]).show();
    for(int i = 0; i <= l; i++)
        pt[i].show();
    cout<<"==========gorgeous separator=========="<<endl;
    const Point const_point(3, 3);
    const_point.show();
    for(int i = 0; i <= l; i++)
    {
        if(const_point.isEqual(pt[i]))
        {
            ShowPoint(const_point);
            ShowPoint(const_point.x(), const_point.y());
            ShowPoint(Point(const_point.x(), const_point.y()));
        }
    }
    const_point.showSumOfPoint();
}

17. 平面上的點和線——Point類、Line類 (I)

Description

在數學上,平面直角座標系上的點用X軸和Y軸上的兩個座標值唯一確定,兩點確定一條線段。現在我們封裝一個“Point類”和“Line類”來實現平面上的點的操作。

根據“append.cc”,完成Point類和Line類的構造方法和show()方法。

介面描述:

Point::show()方法:按格式輸出Point物件。

Line::show()方法:按格式輸出Line物件。

Input

輸入的第一行為N,表示後面有N行測試樣例。

每行為兩組座標“x,y”,分別表示線段起點和終點的x座標和y座標,兩組座標間用一個空格分開,x和y的值都在double資料範圍內。

Output

輸出為多行,每行為一條線段,起點座標在前終點座標在後,每個點的X座標在前,Y座標在後,Y座標前面多輸出一個空格,用括號包裹起來。輸出格式見sample。

Sample Input

4

0,0 1,1

1,1 2,3

2,3 4,5

0,1 1,0

Sample Output

Point : (0, 0)

Line : (0, 0) to (1, 1)

Line : (1, 1) to (2, 3)

Line : (2, 3) to (4, 5)

Line : (0, 1) to (1, 0)

Line : (1, -2) to (2, -1)

Line : (1, -2) to (0, 0)

Line : (2, -1) to (0, 0)

Line : (0, 0) to (2, -1)

HINT

Append Code

#include <bits/stdc++.h>
using namespace std;
class Point{
	friend class Line;
public:
	double x,y;
	Point(){x=y=0;}
	Point(double xx,double yy):x(xx),y(yy){}
	void show(){cout << "Point : (0, 0)" << endl;}
};
class Line{
	friend class Point;
public:
	Point p1,p2;
	Line(Point p,Point q):p1(p),p2(q){}
	Line(double x1,double y1,double x2,double y2):p1(x1,y1),p2(x2,y2){}
	void show(){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ")" << endl;}
};

/////////////////////////////////
int main()
{
    char c;
    int num, i;
    double x1, x2, y1, y2;
    Point p(1, -2), q(2, -1), t;
    t.show();
    std::cin>>num;
    for(i = 1; i <= num; i++)
    {
        std::cin>>x1>>c>>y1>>x2>>c>>y2;
        Line line(x1, y1, x2, y2);
        line.show();
    }
    Line l1(p, q), l2(p, t), l3(q, t), l4(t, q);
    l1.show();
    l2.show();
    l3.show();
    l4.show();
}

18. 平面上的點和線——Point類、Line類 (II)

Description

在數學上,平面直角座標系上的點用X軸和Y軸上的兩個座標值唯一確定,兩點確定一條線段。現在我們封裝一個“Point類”和“Line類”來實現平面上的點的操作。

根據“append.cc”,完成Point類和Line類的構造方法和show()方法,輸出各Line物件的構造和析構次序。

介面描述:

Point::show()方法:按格式輸出Point物件。

Line::show()方法:按格式輸出Line物件。

Input

輸入的第一行為N,表示後面有N行測試樣例。每行為兩組座標“x,y”,分別表示線段起點和終點的x座標和y座標,兩組座標間用一個空格分開,x和y的值都在double資料範圍內。

Output

輸出為多行,每行為一條線段,起點座標在前終點座標在後,每個點的X座標在前,Y座標在後,Y座標前面多輸出一個空格,用括號包裹起來。輸出格式見sample。

Sample Input

4

0,0 1,1

1,1 2,3

2,3 4,5

0,1 1,0

Sample Output

Point : (0, 0)Line : (0, 0) to (1, 1) is created.

Line : (0, 0) to (1, 1)Line : (0, 0) to (1, 1) is erased.

Line : (1, 1) to (2, 3) is created.

Line : (1, 1) to (2, 3)

Line : (1, 1) to (2, 3) is erased.

Line : (2, 3) to (4, 5) is created.

Line : (2, 3) to (4, 5)Line : (2, 3) to (4, 5) is erased.

Line : (0, 1) to (1, 0) is created.

Line : (0, 1) to (1, 0)

Line : (0, 1) to (1, 0) is erased.

Line : (1, -2) to (2, -1) is created.

Line : (1, -2) to (0, 0) is created.

Line : (2, -1) to (0, 0) is created.

Line : (0, 0) to (2, -1) is created.

Line : (1, -2) to (2, -1)

Line : (1, -2) to (0, 0)

Line : (2, -1) to (0, 0)

Line : (0, 0) to (2, -1)

Line : (0, 0) to (2, -1) is erased.

Line : (2, -1) to (0, 0) is erased.

Line : (1, -2) to (0, 0) is erased.

Line : (1, -2) to (2, -1) is erased.

HINT

Append Code

#include <bits/stdc++.h>
using namespace std;
class Point{
	friend class Line;
public:
	double x,y;
	Point(){x=y=0;}
	Point(double xx,double yy):x(xx),y(yy){}
	void show(){cout << "Point : (0, 0)" << endl;}
};
class Line{
	friend class Point;
public:
	Point p1,p2;
	Line(Point p,Point q):p1(p),p2(q){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ") is created." << endl;}
	Line(double x1,double y1,double x2,double y2):p1(x1,y1),p2(x2,y2){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ") is created." << endl;}
	~Line(){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ") is erased." << endl;}
    void show(){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ")" << endl;}
};

/////////////////////////////////
int main()
{
    char c;
    int num, i;
    double x1, x2, y1, y2;
    Point p(1, -2), q(2, -1), t;
    t.show();
    std::cin>>num;
    for(i = 1; i <= num; i++)
    {
        std::cin>>x1>>c>>y1>>x2>>c>>y2;
        Line line(x1, y1, x2, y2);
        line.show();
    }
    Line l1(p, q), l2(p, t), l3(q, t), l4(t, q);
    l1.show();
    l2.show();
    l3.show();
    l4.show();
}

19. 平面上的點和線——Point類、Line類 (III)

Description

在數學上,平面直角座標系上的點用X軸和Y軸上的兩個座標值唯一確定,兩點確定一條線段。現在我們封裝一個“Point類”和“Line類”來實現平面上的點的操作。

根據“append.cc”,完成Point類和Line類的構造方法和show()方法,輸出各Line物件和Point物件的構造和析構次序。

介面描述:

Point::show()方法:按格式輸出Point物件。

Line::show()方法:按格式輸出Line物件。

Input

輸入的第一行為N,表示後面有N行測試樣例。每行為兩組座標“x,y”,分別表示線段起點和終點的x座標和y座標,兩組座標間用一個空格分開,x和y的值都在double資料範圍內。

Output

輸出為多行,每行為一條線段,起點座標在前終點座標在後,每個點的X座標在前,Y座標在後,Y座標前面多輸出一個空格,用括號包裹起來。輸出格式見sample。

C語言的輸入輸出被禁用。

Sample Input

4

0,0 1,1

1,1 2,3

2,3 4,5

0,1 1,0

Sample Output

Point : (1, -2) is created.

Point : (2, -1) is created.

Point : (0, 0) is created.

Point : (0, 0)

=========================

Point : (0, 0) is created.

Point : (1, 1) is created.

Line : (0, 0) to (1, 1) is created.

Line : (0, 0) to (1, 1)

Line : (0, 0) to (1, 1) is erased.

Point : (1, 1) is erased.

Point : (0, 0) is erased.

=========================

Point : (1, 1) is created.

Point : (2, 3) is created.

Line : (1, 1) to (2, 3) is created.

Line : (1, 1) to (2, 3)

Line : (1, 1) to (2, 3) is erased.

Point : (2, 3) is erased.

Point : (1, 1) is erased.

=========================

Point : (2, 3) is created.

Point : (4, 5) is created.

Line : (2, 3) to (4, 5) is created.

Line : (2, 3) to (4, 5)

Line : (2, 3) to (4, 5) is erased.

Point : (4, 5) is erased.

Point : (2, 3) is erased.

=========================

Point : (0, 1) is created.

Point : (1, 0) is created.

Line : (0, 1) to (1, 0) is created.

Line : (0, 1) to (1, 0)

Line : (0, 1) to (1, 0) is erased.

Point : (1, 0) is erased.

Point : (0, 1) is erased.

=========================

Point : (1, -2) is copied.

Point : (2, -1) is copied.

Line : (1, -2) to (2, -1) is created.

Point : (1, -2) is copied.

Point : (0, 0) is copied.

Line : (1, -2) to (0, 0) is created.

Point : (2, -1) is copied.

Point : (0, 0) is copied.

Line : (2, -1) to (0, 0) is created.

Point : (0, 0) is copied.

Point : (2, -1) is copied.

Line : (0, 0) to (2, -1) is created.

Line : (1, -2) to (2, -1)

Line : (1, -2) to (0, 0)

Line : (2, -1) to (0, 0)

Line : (0, 0) to (2, -1)

Line : (0, 0) to (2, -1) is erased.

Point : (2, -1) is erased.

Point : (0, 0) is erased.

Line : (2, -1) to (0, 0) is erased.

Point : (0, 0) is erased.

Point : (2, -1) is erased.

Line : (1, -2) to (0, 0) is erased.

Point : (0, 0) is erased.

Point : (1, -2) is erased.

Line : (1, -2) to (2, -1) is erased.

Point : (2, -1) is erased.

Point : (1, -2) is erased.

Point : (0, 0) is erased.

Point : (2, -1) is erased.

Point : (1, -2) is erased.

HINT

Append Code

#include <bits/stdc++.h>
using namespace std;
class Point{
	friend class Line;
public:
	double x,y;
	Point(){x=y=0;cout << "Point : (" << x << ", " << y <<") is created." << endl;}
	Point(double xx,double yy):x(xx),y(yy){ cout << "Point : (" << x << ", " << y <<") is created." << endl;}
	Point(const Point& p){x=p.x;y=p.y; cout << "Point : (" << x << ", " << y <<") is copied." << endl;  }
	void show(){cout << "Point : (0, 0)" << endl;}
	 ~Point ()  {cout << "Point : (" << x << ", " << y <<") is erased." << endl;}  
};
class Line{
	friend class Point;
public:
	Point p1,p2;
	Line(Point &p,Point &q):p1(p),p2(q){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ") is created." << endl;}
	Line(double x1,double y1,double x2,double y2):p1(x1,y1),p2(x2,y2){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ") is created." << endl;}
	~Line(){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ") is erased." << endl;}
    void show(){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ")" << endl;}
};
////////////////////////////////
int main()
{
    char c;
    int num, i;
    double x1, x2, y1, y2;
    Point p(1, -2), q(2, -1), t;
    t.show();
    std::cin>>num;
    for(i = 1; i <= num; i++)
    {
        std::cout<<"=========================\n";
        std::cin>>x1>>c>>y1>>x2>>c>>y2;
        Line line(x1, y1, x2, y2);
        line.show();
    }
    std::cout<<"=========================\n";
    Line l1(p, q), l2(p, t), l3(q, t), l4(t, q);
    l1.show();
    l2.show();
    l3.show();
    l4.show();
}

20. 平面上的點和線——Point類、Line類 (IV)

Description

在數學上,平面直角座標系上的點用X軸和Y軸上的兩個座標值唯一確定,兩點確定一條線段。現在我們封裝一個“Point類”和“Line類”來實現平面上的點的操作。

根據“append.cc”,完成Point類和Line類的構造方法和show()方法,輸出各Line物件和Point物件的構造和析構次序。

介面描述:

Point::show()方法:按格式輸出Point物件。

Line::show()方法:按格式輸出Line物件。

Input

輸入的第一行為N,表示後面有N行測試樣例。

每行為兩組座標“x,y”,分別表示線段起點和終點的x座標和y座標,兩組座標間用一個空格分開,x和y的值都在double資料範圍內。

Output

輸出為多行,每行為一條線段,起點座標在前終點座標在後,每個點的X座標在前,Y座標在後,Y座標前面多輸出一個空格,用括號包裹起來。輸出格式見sample。

C語言的輸入輸出被禁用。

Sample Input

4

0,0 1,1

1,1 2,3

2,3 4,5

0,1 1,0

Sample Output

Point : (1, -2) is created.Point : (2, -1) is created.Point : (0, 0) is created.Point : (0, 0)Point : (0, 0) is created.Point : (0, 0) is created.Line : (0, 0) to (0, 0) is created.Point : (0, 0) is created.Point : (0, 0) is created.Line : (0, 0) to (0, 0) is created.Point : (0, 0) is created.Point : (0, 0) is created.Line : (0, 0) to (0, 0) is created.Point : (0, 0) is created.Point : (0, 0) is created.Line : (0, 0) to (0, 0) is created.=========================Line : (0, 0) to (1, 1)=========================Line : (1, 1) to (2, 3)=========================Line : (2, 3) to (4, 5)=========================Line : (0, 1) to (1, 0)=========================Point : (1, -2) is copied.Point : (2, -1) is copied.Line : (1, -2) to (2, -1) is created.Point : (1, -2) is copied.Point : (0, 0) is copied.Line : (1, -2) to (0, 0) is created.Point : (2, -1) is copied.Point : (0, 0) is copied.Line : (2, -1) to (0, 0) is created.Point : (0, 0) is copied.Point : (2, -1) is copied.Line : (0, 0) to (2, -1) is created.Line : (1, -2) to (2, -1)Line : (1, -2) to (0, 0)Line : (2, -1) to (0, 0)Line : (0, 0) to (2, -1)Line : (0, 0) to (2, -1) is erased.Point : (2, -1) is erased.Point : (0, 0) is erased.Line : (2, -1) to (0, 0) is erased.Point : (0, 0) is erased.Point : (2, -1) is erased.Line : (1, -2) to (0, 0) is erased.Point : (0, 0) is erased.Point : (1, -2) is erased.Line : (1, -2) to (2, -1) is erased.Point : (2, -1) is erased.Point : (1, -2) is erased.Line : (0, 1) to (1, 0) is erased.Point : (1, 0) is erased.Point : (0, 1) is erased.Line : (2, 3) to (4, 5) is erased.Point : (4, 5) is erased.Point : (2, 3) is erased.Line : (1, 1) to (2, 3) is erased.Point : (2, 3) is erased.Point : (1, 1) is erased.Line : (0, 0) to (1, 1) is erased.Point : (1, 1) is erased.Point : (0, 0) is erased.Point : (0, 0) is erased.Point : (2, -1) is erased.Point : (1, -2) is erased.

HINT

Append Code

#include <bits/stdc++.h>
using namespace std;
class Point{
	friend class Line;
public:
	double x,y;
	Point(){x=y=0;cout << "Point : (" << x << ", " << y <<") is created." << endl;}
	Point(double xx,double yy):x(xx),y(yy){ cout << "Point : (" << x << ", " << y <<") is created." << endl;}
	Point(const Point& p){x=p.x;y=p.y; cout << "Point : (" << x << ", " << y <<") is copied." << endl;  }
	void show(){cout << "Point : (0, 0)" << endl;}
	 ~Point ()  {cout << "Point : (" << x << ", " << y <<") is erased." << endl;}  
};
class Line{
	friend class Point;
public:
	Point p1,p2;
	Line():p1(0,0),p2(0,0){cout<<"Line : ("<<p1.x<<", "<<p1.y<<") to ("<<p2.x<<", "<<p2.y<<") is created."<<endl;}
	Line(Point &p,Point &q):p1(p),p2(q){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ") is created." << endl;}
	Line(double x1,double y1,double x2,double y2):p1(x1,y1),p2(x2,y2){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ") is created." << endl;}
	~Line(){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ") is erased." << endl;}
    void show(){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ")" << endl;}
	void SetLine(double a,double b,double c,double d)  
    {  
        p1.x = a;  
        p1.y = b;  
        p2.x = c;  
        p2.y = d;  
    }  
};
//////////////////////////////
int main()
{
    char c;
    int num, i;
    double x1, x2, y1, y2;
    Point p(1, -2), q(2, -1), t;
    t.show();
    std::cin>>num;
    Line line[num];
    for(i = 0; i < num; i++)
    {
        std::cout<<"=========================\n";
        std::cin>>x1>>c>>y1>>x2>>c>>y2;
        line[i].SetLine(x1, y1, x2, y2);
        line[i].show();
    }
    std::cout<<"=========================\n";
    Line l1(p, q), l2(p, t), l3(q, t), l4(t, q);
    l1.show();
    l2.show();
    l3.show();
    l4.show();
}

21.平面上的點和線——Point類、Line類 (V)

Description

在數學上,平面直角座標系上的點用X軸和Y軸上的兩個座標值唯一確定,兩點確定一條線段。現在我們封裝一個“Point類”和“Line類”來實現平面上的點的操作。

根據“append.cc”,完成Point類和Line類的構造方法和show()方法,輸出各Line物件和Point物件的構造和析構次序。

介面描述:

Point::show()方法:按格式輸出Point物件。

Line::show()方法:按格式輸出Line物件。

Line::SetLine(double, double, double, double)方法:設定Line物件起點的x,y座標(第一個和第二引數)和終點的x,y座標(第三個和第四個座標),並返回本物件

Line::SetLine(const Point &, const Point &)方法:設定Line物件的起點(第一個引數)和終點(第二個座標),並返回本物件

Line::SetLine(const Line&)方法:設定Line物件,複製引數的座標,並返回本物件

Line::readLine()方法:從標準輸入上讀入座標,格式見Sample

Input

輸入的第一行為N,表示後面有N行測試樣例。

每行為兩組座標“x,y”,分別表示線段起點和終點的x座標和y座標,兩組座標間用一個空格分開,x和y的值都在double資料範圍內。

Output

輸出為多行,每行為一條線段,起點座標在前終點座標在後,每個點的X座標在前,Y座標在後,Y座標前面多輸出一個空格,用括號包裹起來。輸出格式見sample。

C語言的輸入輸出被禁用。

Sample Input

4

0,0 1,1

1,1 2,3

2,3 4,5

0,1 1,0

Sample Output

Point : (1, -2) is created.Point : (2, -1) is created.Point : (0, 0) is created.Point : (0, 0)Point : (0, 0) is created.Point : (0, 0) is created.Line : (0, 0) to (0, 0) is created.Point : (0, 0) is created.Point : (0, 0) is created.Line : (0, 0) to (0, 0) is created.Point : (0, 0) is created.Point : (0, 0) is created.Line : (0, 0) to (0, 0) is created.Point : (0, 0) is created.Point : (0, 0) is created.Line : (0, 0) to (0, 0) is created.Line : (0, 0) to (1, 1)Line : (1, 1) to (2, 3)Line : (2, 3) to (4, 5)Line : (0, 1) to (1, 0)Point : (1, -2) is copied.Point : (2, -1) is copied.Line : (1, -2) to (2, -1) is created.Point : (1, -2) is copied.Point : (0, 0) is copied.Line : (1, -2) to (0, 0) is created.Point : (2, -1) is copied.Point : (0, 0) is copied.Line : (2, -1) to (0, 0) is created.Point : (1, -2) is copied.Point : (2, -1) is copied.Line : (1, -2) to (2, -1) is copied.Line : (1, -2) to (2, -1)Line : (1, -2) to (2, -1)Line : (2, -1) to (0, 0)Line : (0, 0) to (2, -1)Line : (0, 0) to (2, -1) is erased.Point : (2, -1) is erased.Point : (0, 0) is erased.Line : (2, -1) to (0, 0) is erased.Point : (0, 0) is erased.Point : (2, -1) is erased.Line : (1, -2) to (2, -1) is erased.Point : (2, -1) is erased.Point : (1, -2) is erased.Line : (1, -2) to (2, -1) is erased.Point : (2, -1) is erased.Point : (1, -2) is erased.Line : (0, 1) to (1, 0) is erased.Point : (1, 0) is erased.Point : (0, 1) is erased.Line : (2, 3) to (4, 5) is erased.Point : (4, 5) is erased.Point : (2, 3) is erased.Line : (1, 1) to (2, 3) is erased.Point : (2, 3) is erased.Point : (1, 1) is erased.Line : (0, 0) to (1, 1) is erased.Point : (1, 1) is erased.Point : (0, 0) is erased.Point : (0, 0) is erased.Point : (2, -1) is erased.Point : (1, -2) is erased.

HINT

Append Code

#include <bits/stdc++.h>
using namespace std;
class Point{
	friend class Line;
public:
	double x,y;
	Point(){x=y=0;cout << "Point : (" << x << ", " << y <<") is created." << endl;}
	Point(double xx,double yy):x(xx),y(yy){ cout << "Point : (" << x << ", " << y <<") is created." << endl;}
	Point(const Point& p){x=p.x;y=p.y; cout << "Point : (" << x << ", " << y <<") is copied." << endl;  }
	void show(){cout << "Point : (0, 0)" << endl;}
	 ~Point ()  {cout << "Point : (" << x << ", " << y <<") is erased." << endl;}  
};
class Line{
	friend class Point;
public:
	Point p1,p2;
	Line():p1(0,0),p2(0,0){cout<<"Line : ("<<p1.x<<", "<<p1.y<<") to ("<<p2.x<<", "<<p2.y<<") is created."<<endl;}
	Line(Point &p,Point &q):p1(p),p2(q){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ") is created." << endl;}
	Line(double x1,double y1,double x2,double y2):p1(x1,y1),p2(x2,y2){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ") is created." << endl;}
	~Line(){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ") is erased." << endl;}
    void show(){cout << "Line : (" << p1.x << ", " << p1.y << ") to (" << p2.x << ", " << p2.y << ")" << endl;}
	void readLine(){
        double x1, y1, x2, y2;  
        char c;  
        cin >> x1 >> c >> y1 >> x2 >> c >> y2;  
        SetLine(x1, y1, x2, y2);  

	}
	Line& SetLine(double a,double b,double c,double d)  
    {  
        p1.x = a;  
        p1.y = b;  
        p2.x = c;  
        p2.y = d;
        return *this;  
    }  
    Line& setLine(const Point& p, const Point& q){
        p1.x = p.x;  
        p1.y = p.y;  
        p2.x = q.x;  
        p2.y = q.y;
        return *this;     	
    }
    Line& setLine(const Line& l){
        p1.x = l.p1.x;  
        p1.y = l.p1.y;  
        p2.x = l.p2.x;  
        p2.y = l.p2.y;
        return *this;     	
    }
};
/////////////////////////
int main()
{
    int num, i;
    Point p(1, -2), q(2, -1), t;
    t.show();
    std::cin>>num;
    Line line[num];
    for(i = 0; i < num; i++)
    {
        line[i].readLine();
        line[i].show();
    }
    Line l1(p, q), l2(p,t), l3(q,t), l4(l1);
    l1.show();
    l2.setLine(l1).show();
    l3.show();
    l4.setLine(t,q).show();
}

22.平面上的點和線——Point類、Line類 (VI)

Description

在數學上,平面直角座標系上的點用X軸和Y軸上的兩個座標值唯一確定,兩點確定一條線段。現在我們封裝一個“Point類”和“Line類”來實現平面上的點的操作。

根據“append.cc”,完成Point類和Line類的構造方法和show()方法,輸出各Line物件和Point物件的構造和析構次序。

介面描述:

Point::show()方法:按格式輸出Point物件。

Point::x()方法:取x座標。

Point::y()方法:取y座標。

Line::show()方法:按格式輸出Line物件。

Line::SetLine(double, double, double, double)方法:設定Line物件起點的x,y座標(第一個和第二引數)和終點的x,y座標(第三個和第四個座標),並返回本物件

Line::SetLine(const Point &, const Point &)方法:設定Line物件的起點(第一個引數)和終點(第二個座標),並返回本物件

Line::SetLine(const Line&)方法:設定Line物件,複製引數的座標,並返回本物件

Line::readLine()方法:從標準輸入上讀入座標,格式見Sample

Line::start()方法:取Line的起點

Line::end()方法:取Line的終點

Line::setStart()方法:設定Line的起點

Line::setEnd()方法:設定Line的終點

以下三個函式