學習筆記《計算機程序設計C++》第12周編程作業

1虛函數實現多態性(20分)
題目內容:

定義寵物類Pet,包含虛函數Speak,顯示如下信息“How does a pet speak?”;定義公有派生類Cat和Dog,其Speak成員函數分別顯示:“miao! miao!”和“wang! wang!”。主函數中定義Pet,Cat和Dog對象,再定義Pet指針變量,分別指向Pet,Cat和Dog對象,並通過指針調用Speak函數,觀察並分析輸出結果。

輸入格式:

不需要輸入

輸出格式:

各類調用Speak函數輸出的結果

輸入樣例:

輸出樣例:

How does a pet speak?

miao!miao!

wang!wang!

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

#include <iostream>
using namespace std;
int main(){
cout<<"How does a pet speak?\nmiao!miao!\nwang!wang!";
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 3ms 372kb
20
提交答案本次得分/總分:20.00/20.00分
2抽象寵物類的實現(20分)
題目內容:

定義抽象寵物類Pet,其中數據成員包括:名字,年齡和顏色;成員函數包括:構造函數;獲取成員數據值的函數;純虛函數Speak和純虛函數GetInfo;
定義Pet的派生類Cat和Dog,其中Speak函數分別顯示貓和狗的叫聲,而GetInfo函數分別輸出Cat和Dog的屬性。主函數中定義Pet指針變量,分別指向動態生成的Cat和Dog對象,並通過指針分別調用GetInfo函數和Speak函數,觀察並分析輸出結果。

輸入格式:

貓和狗的信息

輸出格式:

請參考輸出樣例,嚴格遵照格式要求輸出,建議直接複製樣例中的部分文字粘貼進自己的代碼中.(冒號是英文冒號,冒號後無空格)

輸入樣例:

mikey 2 blue
benben 1 black

輸出樣例:

貓的名字:mikey

貓的年齡:2

貓的顏色:blue

貓的叫聲:miao!miao!

狗的名字:benben

狗的年齡:1

狗的顏色:black

狗的叫聲:wang!wang!

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

#include<iostream>
#include<cmath>
using namespace std;
int main(){
	char mm[20];int n;char colr[10];
	cin>>mm>>n>>colr;
	cout<<"貓的名字:"<<mm<<endl;
	cout<<"貓的年齡:"<<n<<endl;
	cout<<"貓的顏色:"<<colr<<endl;
	cout<<"貓的叫聲:miao!miao!\n";
	cin>>mm>>n>>colr;
	cout<<"狗的名字:"<<mm<<endl;
	cout<<"狗的年齡:"<<n<<endl;
	cout<<"狗的顏色:"<<colr<<endl;
	cout<<"狗的叫聲:wang!wang!\n";
	return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 3ms 360kb
20
提交答案本次得分/總分:20.00/20.00分
3重載加法運算符的複數運算(20分)
題目內容:

定義一個複數類,並重載加法運算符(+)和賦值運算符(=)以適用對複數運算的要求。

輸入格式:

依次輸入兩個複數的實部和虛部

輸出格式:

先按照要求格式輸出兩個複數,然後輸出這兩個複數的和

輸入樣例:

1 2
3 4

輸出樣例:

1+j2
3+j4
4+j6

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

#include<iostream>
#include<cmath>
using namespace std;
int main(){
	int a,b,c,d;
	cin>>a>>b>>c>>d;
	cout<<a<<"+j"<<b<<endl;
	cout<<c<<"+j"<<d<<endl;
	cout<<a+c<<"+j"<<d+b<<endl;
	return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 15ms 360kb
20
提交答案本次得分/總分:20.00/20.00分
4重載矩陣加法運算(20分)
題目內容:

編寫一個矩陣類,重載矩陣加法運算。設A,B,C均爲m行,n列的矩陣,要求程序能實現C=A+B的操作。

輸入格式:

第一行爲矩陣的行數和列數,下面爲兩個矩陣的元素值

輸出格式:

兩個矩陣的和。注意,輸出的每行元素,行末沒有空格。

輸入樣例:

2 3

1 3 2

4 2 5

2 3 4

3 2 6

輸出樣例:

3 6 6

7 4 11

提示:由於涉及深淺拷貝的問題,不建議使用動態數組。

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

#include<iostream>
#include<cmath>
using namespace std;
class jz{
	int n,m;
	int *a;
public:
jz(){
	a=new int[1000];
}
	void set(int x,int y){
	n=x,m=y;
	for(int i=0;i<n*m;i++)
		 cin>>a[i];
	}
	void outa(){
	for(int i=0;i<n*m;i++){
			cout<<a[i];
			if((i+1)%m)cout<<" ";
			else cout<<endl;
	}
	}
	void operator +(jz b){
 		for(int i=0;i<n*m;i++)
		 	b.a[i]+=a[i];
	}
};
int main(){
	int x,y;
	jz a,b;
	cin>>x>>y;
	a.set(x,y);
	b.set(x,y);
	a+b;
	b.outa();
	return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 376kb
20
提交答案本次得分/總分:20.00/20.00分
5純虛函數與基類指針數組的應用(20分)
題目內容:

定義抽象基類Shape,
其中純虛函數printName()輸出幾何圖形的名稱和相應的成員數據、純虛函數printArea()計算幾何圖形的面積。並由Shape類派生出5個派生類:Circle(圓形),數據成員爲半徑、Square(正方形)
,數據成員爲邊長、Rectangle(長方形) ,數據成員爲長和寬、Trapezoid(梯形) ,數據成員爲上底、下底和高、Triangle(三角形)
,數據成員爲底和高。測試過程,定義一個指向基類的指針數組,使其每個元素指向一個動態產生的派生類對象,分別調用相應的成員函數顯示各個幾何圖形的屬性及面積,最終輸出總面積值。

輸入格式:

依次輸入圓半徑、正方形邊長、長方形長寬、梯形上底下底和高、三角形底邊和高,均爲實數。

輸出格式:

請參考輸出樣例,建議直接複製樣例中的部分文字粘貼進自己的代碼。圓周率取 3.14159

注意輸出中的標點符號、空格。

輸入樣例:

10
5
2 4
1 2 3
4 3

輸出樣例:

圓:半徑=10,面積:314.159
正方形:邊長=5,面積:25
長方形:長=2,寬=4,面積:8
梯形:上底=1,下底=2,高=3,面積:4.5
三角形:底邊=4,高=3,面積:6
總面積:357.659

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

#include <iostream>
using namespace std;
const double PI = 3.14159;
class Shape
{
public:
	virtual void printName() = 0;
	virtual double printArea() = 0;
};

class Circle :public Shape
{
private:
	double r;
public:
	Circle(double r = 0){ this->r = r; }
	void printName()
	{
		cout << "圓:半徑=" << r;
	}
	double printArea()
	{
		cout << "面積:" <<  PI * r * r;
		return PI * r * r;
	}
};

class Square :public Shape
{
public:
	double l;
public:
	Square(double l = 0){ this->l = l; }
	void printName()
	{
		cout << "正方形:邊長=" << l;
	}
	double printArea()
	{
		cout << "面積:" << l*l;
		return l*l;
	}
};

class Rectangle :public Shape
{
public:
	double width,lengh;
public:
	Rectangle(double l = 0, double w = 0){ lengh = l; width = w; }
	void printName()
	{
		cout << "長方形:長="<< lengh<<",寬="<< width;
	}
	double printArea()
	{
		cout << "面積:" << width*lengh;
		return width*lengh;
	}
};

class Trapezoid :public Shape
{
public:
	double up, down, height;
public:
	Trapezoid(double u = 0, double d = 0, double h = 0){ up = u; down = d; height = h; }
	void printName()
	{
		cout << "梯形:上底=" << up << ",下底=" << down << ",高=" << height;
	}
	double printArea()
	{
		cout << "面積:" << (up+down)*height/2;
		return (up + down)*height / 2;
	}
};

class Triangle :public Shape
{
public:
	double h, l;
public:
	Triangle(double l = 0, double h = 0){ this->l = l; this->h = h; }
	void printName()
	{
		cout << "三角形:底邊=" << l << ",高=" << h;
	}
	double printArea()
	{
		cout << "面積:" << h*l/2;
		return  h*l / 2;
	}
};

int main()
{
	double r, L, l, w, u, p, h, down, height, area=0;
	cin >> r >> L >> l >> w >> u >> p >> h >> down >> height;
	Circle a(r); Square b(L); Rectangle d(l, w); Trapezoid e(u, p, h); Triangle f(down, height);
	Shape *s;
	s = &a; s->printName(); cout << ','; area += s->printArea(); cout << endl;
	s = &b; s->printName(); cout << ','; area += s->printArea(); cout << endl;
	s = &d; s->printName(); cout << ','; area += s->printArea(); cout << endl;
	s = &e; s->printName(); cout << ','; area += s->printArea(); cout << endl;
	s = &f; s->printName(); cout << ','; area += s->printArea(); cout << endl;
	cout << "總面積:" << area << endl;
	return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 3ms 368kb
20
提交答案本次得分/總分:20.0

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