学习笔记《计算机程序设计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 
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
#include
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
#include
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
#include
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 
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

你可能感兴趣的:(C++学习笔记)