第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分