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

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