學習筆記《計算機程序設計C++》第9周基礎練習

第9周基礎練習

依照學術誠信條款,我保證此作業是本人獨立完成的。

溫馨提示:

1.本次作業屬於Online Judge題目,提交後由系統即時判分。

2.學生可以在作業截止時間之前不限次數提交答案,系統將取其中的最高分作爲最終成績。

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
C++

#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);
}; 
double POINT::distance(POINT b){
	return sqrt(pow(x-b.x,2)+pow(y-b.y,2));
}
void POINT::set(double a,double b){
			x=a;y=b;}
void POINT::show(){
			cout<<"("<<x<<","<<y<<")";} 

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; }

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 3ms 236kb
2
用例2通過 2ms 380kb
2
用例3通過 3ms 368kb
2
用例4通過 2ms 372kb
2
用例5通過 2ms 360kb
1
用例6通過 3ms 256kb
1
提交答案本次得分/總分:10.00/10.00分
2圓類(10分)
題目內容:

定義圓類CIRCLE,圓心座標和半徑是其數據成員,double類型,私有;成員函數有set()設置圓心座標和半徑,area()計算圓的面積,perimeter()計算周長,show()顯示圓心和半徑信息。成員函數均爲公有。

編寫主函數,使用CIRCLE類定義一個圓的對象,輸入並設置圓心和半徑,顯示圓的靜態成員信息信息,計算並顯示圓的周長和麪積。主函數和運行結果如下:

運行結果

輸入:圓心座標和半徑,用空格隔開。

輸出:三行,一行是圓心、半徑,在括號中,用逗號隔開;一行是周長;一行是面積

【提示】

樣例1輸入:

1 2 1

樣例1輸出:

(1,2,1)

6.28

3.14

時間限制:500ms內存限制:32000kb
C++

#include<iostream>
#include<cmath>
using namespace std;

class CIRCLE {
private: double x, y, r;
public:
	void set(double a, double b, double c) {
		x = a;y = b, r = c;
	}
	void show() {
		cout << "(" << x << "," << y << "," << r << ")";
	}

	double perimeter(){
	  return 2 * r*3.14; }
	double area() {
		return r * r*3.14;
	}
	};
	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通過 2ms 364kb
3
用例2通過 2ms 244kb
3
用例3通過 3ms 256kb
2
用例4通過 12ms 256kb
2
提交答案本次得分/總分:10.00/10.00分
3矩形類(10分)
題目內容:

定義屏幕矩形類RECT,邊和座標軸平行,左上角和右下角的兩個頂點座標是其數據成員,int類型,私有;成員函數有set()設置兩個頂點座標,area()計算面積,perimeter()計算周長,showinfo()顯示兩個頂點信息,show()顯示由“*”組成的矩形(寬是矩形的寬度,高是矩形的高度)。成員函數均爲公有。

編寫主函數,使用RECT類定義一個矩形類對象,輸入並設置矩形的兩個頂點,顯示矩形的靜態成員信息,計算並顯示矩形的周長和麪積,顯示由“*”組成的矩形。主函數和運行結果如下:

結果:

輸入:兩個頂點的座標,用空格隔開。

輸出:三部分:一行是頂點座標,在括號中,用逗號隔開;一行是周長;一行是面積;最後是由*組成的矩形,寬是矩形的寬度,高是矩形的高度。

【提示】

樣例1輸入:

1 1 10 5

樣例1輸出:

(1,1,10,5)

26

36





時間限制:500ms內存限制:32000kb
C++

#include<iostream>
#include<cmath>
using namespace std;

class RECT {
private: struct point {
		int x, y;
	};
		 point p1, p2;
public:
	void set(int a, int b, int c,int d) {
		p1.x = a;p1.y = b, p2.x = c,p2.y=d;
	}
	void showinfo() {
		cout << "(" << p1.x << "," <<p1.y << "," << p2.x <<","<<p2.y<<")";
	}
	int perimeter(){
		return 2 * (abs(p2.x - p1.x) +abs(p2.y - p1.y));
	}
	int area() {
		return abs((p1.x - p2.x)*(p1.y - p2.y));
	}
	void show() {
		for (int i = abs(p2.y - p1.y);i >0;--i) {
			for (int j = abs(p2.x - p1.x);j >0;--j)
				cout << "*";cout << endl;
		}
	}
};
	int main() {
		RECT a;
		int x, y, r,s;
		cin >> x >> y >> r>>s;
		a.set(x, y, r,s);
		a.showinfo();cout << endl;
		cout << a.perimeter() << endl;
		cout << a.area() << endl;
		a.show();
		return 0;
	}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 256kb
4
用例2通過 2ms 380kb
3
用例3通過 2ms 256kb
3
提交答案本次得分/總分:10.00/10.00分
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
C++

#include<iostream>
#include<cmath>
using namespace std;

class COMPLEX { 
	double x, y;
public:
	void set(double a, double b) {
		x = a, y = b;
	}
	double getReal() {
		return x;
	}
	double getLmag() {
		return y;
	}
	double module() {
		return sqrt(x*x + y * y);
	}
	COMPLEX add( COMPLEX b) {
		COMPLEX c;
		c.x = x + b.x;
		c.y = y + b.y;
		return c;
	}
	void show() {
		cout << x;
		if (y >= 0)cout << "+";
		cout << y << "j";
	}
};
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();cout << endl;
		cout <<c.getLmag() << endl;
		cout << c.module() << endl;
		return 0;
	}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 15ms 368kb
2
用例2通過 3ms 364kb
2
用例3通過 3ms 368kb
2
用例4通過 3ms 364kb
1
用例5通過 2ms 368kb
1
用例6通過 15ms 364kb
1
用例7通過 3ms 364kb
1
提交答案本次得分/總分:10.00/10.00分
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
C++

#include<iostream>
#include<cmath>
using namespace std;

class FRACTION {
	int x, y;
public:
	void set(int a, int b) {
		x = a, y = b;
		reduce();
		if (y < 0 && x) {
			y = 0-y;
			x = 0-x;
		}
	}
	void reduce(){
		if (x&&y) {
			int i;
			if (abs(x) < abs(y))i =abs (x);
			else i =abs( y);
			for (;i >= 2;--i) {
				if (x%i == 0 && y%i == 0) {
					x /= i;y /= i;
				}
			}
		}
	}
	void show() {
		if (y < 0)cout << "-";
		cout << x;
		cout << "/";
		if (y < 0)cout << -y;
		else cout << y;
	}
	double real() {
		double a = 1.0*x / y;
		if (fabs(a) < 0.0000001)return 0;
		return a;
	}
};
int  main() {
		FRACTION a;
		int x, y;
		cin >> x >> y;
		a.set(x, y);
		a.show();
		cout << endl;
		cout<<a.real();cout << endl;
		return 0;
	}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 236kb
2
用例2通過 2ms 256kb
1
用例3通過 2ms 236kb
1
用例4通過 3ms 256kb
1
用例5通過 2ms 256kb
1
用例6通過 2ms 240kb
1
用例7通過 2ms 256kb
1
用例8通過 2ms 368kb
1
用例9通過 1ms 256kb
1
提交答案本次得分/總分:10.00/10.00分

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章