山东科技大学面向对象程序设计c++答案
更新时间:2023-09-12 00:57:01 阅读量: 教育文库 文档下载
- Java面向对象程序设计推荐度:
- 相关推荐
Problem A: 平面上的点——Point类 (IV)Description
在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定。现在我们封装一个“Point类”来实现平面上的点的操作。 根据“append.cc”,完成Point类的构造方法和show()、showCounter()、showSumOfPoint()方法;实现showPoint()函数。 接口描述:
showPoint()函数:按输出格式输出Point对象,调用Point::show()方法实现。
Point::show()方法:按输出格式输出Point对象。Point::showCounter()方法:按格式输出当前程序中Point对象的计数。
Point::showSumOfPoint()方法:按格式输出程序运行至当前存在过的Point对象总数。 Input
输入多行,每行为一组坐标“x,y”,表示点的x坐标和y坐标,x和y的值都在double数据范围内。 Output
对每个Point对象,调用show()方法输出其值,或者用showPoint()函数来输出(通过参数传入的)Point对象的值:X坐标在前,Y坐标在后,Y坐标前面多输出一个空格。每个坐标的输出精度为最长16位。调用用showCounter()方法和showSumOfPoint()输出Point对象的计数统计,输出格式见sample。
C语言的输入输出被禁用。 Sample Input 1,2 3,3 2,1
Sample Output Point : (1, 2) Current : 2 points. Point : (3, 3) Current : 2 points. Point : (2, 1) Current : 2 points. In total : 4 points. Current : 3 points. Point : (0, 0) Point : (1, 1) Point : (0, 0) In total : 6 points.
#include
double x_,y_; static int sum,num; public:
Point():x_(0),y_(0){num++;sum++;}
Point(double
xx):x_(xx),y_(1){num++;sum++;} Point(double xx,double
yy):x_(xx),y_(yy){num++;sum++;}
Point(const
Point&p){x_=p.x_;y_=p.y_;num++;sum++;}
~Point(){num--;} void
show(){cout< (\ \ static void showCounter(){cout< void showSumOfPoint(){cout< void showPoint(Point &a,Point &b,Point &c) { a.show();b.show();c.show();} int Point::sum=0; int Point::num=0; int main() { char c; double a, b; Point q; while(std::cin>>a>>c>>b) { Point p(a, b); p.show(); p.showCounter(); } q.showSumOfPoint(); Point q1(q), q2(1); Point::showCounter(); showPoint(q1, q2, q); Point::showSumOfPoint(); } Problem A: 复数类的构造、析构和输出 Description 封装一个复数类CPLX,用来处理复数功能和运算,支持以下操作: 1. CPLX::CPLX(double, double)构造:参数为实部、虚部,用传入的参数初始化对象,产生一行以“CREATE()”开始的输出,并输出复数的实部和虚部; 2. CPLX::~CPLX()析构:产生一行以“RELEASE()”开始的输出,并输出复数的实部和虚部; 3. CPLX::print():产生一行以“PRINT()”开始的输出,并以格式“(a, bi)”的形式输出复数; ----------------------------------------------------------------------------- 你设计一个CPLX类,使得main()函数能够运行并得到正确的输出。调用格式见append.cc Input 输入的第一个整数n,表示用n组测试样例。每组测试输入两个实数,分别为实部和虚部。 Output 每组测试数据对应一组输出,两组输出之间用若干“===”分割,详细格式见sample。 Sample Input 5 2 3 10 0 0 100 1 -1 -7 -7 Sample Output ========================= CREATE(): 2 3 PRINT(): (2, 3i) RELEASE(): 2 3 ========================= CREATE(): 10 0 1 PRINT(): (10, 0i) RELEASE(): 10 0 ========================= CREATE(): 0 100 PRINT(): (0, 100i) RELEASE(): 0 100 ========================= CREATE(): 1 -1 PRINT(): (1, -1i) RELEASE(): 1 -1 ========================= CREATE(): -7 -7 PRINT(): (-7, -7i) RELEASE(): -7 -7 ========================= #include CPLX(double xx,double yy){ x=xx;y=yy; cout<<\ ~CPLX(){ cout<<\ void print() { cout<<\ (\ \ }; int main() { int cases; cin >> cases; for(int i = 1; i <= cases; ++i) { double a, b; cin >> a >> b; cout <<\ CPLX cplx(a, b); cplx.print(); } cout <<\ endl; } Problem B: 复数类的成员访问 Description 封装一个复数类CPLX,用来处理复数功能和运算,支持以下操作: 1. CPLX::CPLX()构造:初始化一个实部、虚部均为0的复数,产生一行以“CREATE()”开始的输出,并输出复数的实部和虚部; 2. CPLX::~CPLX()析构:产生一行以“RELEASE()”开始的输出,并输出复数的实部和虚部; 3. CPLX::real():返回实部; CPLX::imag():返回虚部。 4. CPLX::real(double):传参修改实部; CPLX::imag(double):传参修改虚部; ----------------------------------------------------------------------------- 你设计一个CPLX类,使得main()函数能够运行并得到正确的输出。调用格式见append.cc Input 输入的第一个整数n,表示用n组测试样例。每组测试输入两个实数,分别为实部和虚部。 Output 每组测试数据对应一组输出,两组输出之间用若干“===”分割,详细格式见sample。 Sample Input 5 2 3 10 0 0 100 1 -1 -7 -7 Sample Output ========================= CREATE(): 0 0 Complex real part is 2, imaginary part is 3. RELEASE(): 2 3 ========================= CREATE(): 0 0 Complex real part is 10, imaginary part is 0. RELEASE(): 10 0 ========================= CREATE(): 0 0 Complex real part is 0, imaginary part is 100. RELEASE(): 0 100 ========================= CREATE(): 0 0 Complex real part is 1, imaginary part is -1. RELEASE(): 1 -1 ========================= CREATE(): 0 0 Complex real part is -7, imaginary part is -7. RELEASE(): -7 -7 ========================= #include CPLX(double xx=0,double yy=0){this->x=xx;this->y=yy; cout<<\ ~CPLX(){ cout<<\ } double real() {return x; } double imag(){return y;} CPLX &real(double xx); CPLX &imag(double yy); }; CPLX& CPLX::real(double xx){ x=xx; return *this; } CPLX& CPLX::imag(double yy) {y=yy; return *this; 2 } int main() { int cases; cin >> cases; for(int i = 1; i <= cases; ++i) { double a, b; cin >> a >> b; cout <<\ CPLX cplx; cplx.real(a); cplx.imag(b); cout <<\real part is \cplx.real() <<\<<\ } cout <<\endl; } Problem A: 立体空间中的点(I) Description 设计一个平面上的点Point类和3维的点Point_3D类,满足Point_3D类继承自Point类,用于读取输入的数据,输出所构造的两种点的坐标。 设计Point类需支持一下操作: Point::Point()无参构造。 Point::Point(double,double)两个坐标参数构造。Point::showPoint()按格式输出Point对象 设计Point_3D类需支持一下操作: Point_3D::Point_3D()无参构造。 Point_3D::Point_3D(double,double,double)三个坐标参数构造。 Point_3D::showPoint()按格式输出Point_3D对象。 ----------------------------------------------------------------------------- 你设计Point类和Point_3D类,使得main()函数能够正确运行。 函数调用格式见append.cc。 append.cc中已给出main()函数。 Input 输入的第一个整数n,表示有n组测试数据,后面的输入每行为一组测试数据。每组测试数据的第一行是一个整数m,m有两种取值:2、3;m为2时,后面有两个浮点数x、y,表示一个平面上的点的坐标(x,y);m为3时后面有3个浮点数x、y、z,表示一个3维的点的坐标(x,y,z)。 Output 每组测试数据对应一行输出。 若输入为平面上的点,则输出:“2D Point (x,y)”,x和y为输入的坐标值。 若输入为3维的点,则输出:“3D Point (x,y,y)”,x、y和z为输入的坐标值。 Sample Input 5 3 1 2 3 3 0 0 0 2 -1 1 3 -1 -1 -1 2 0 0 Sample Output 3D Point (1,2,3) 3D Point (0,0,0) 2D Point (-1,1) 3D Point (-1,-1,-1) 2D Point (0,0) #include Point():x(0),y(0){} Point(double x1,double y1):x(x1),y(y1){} void showPoint(){cout<<\ Point (\}; class Point_3D:public Point{ //Point_3D从Point中派 生 protected: int z; public: Point_3D():z(0){} Point_3D(double x1,double y1,double z1):Point(x1,y1),z(z1){} void showPoint(){cout<<\ Point (\ }; int main() { int cases; cin>>cases; for(int i = 1; i <= cases; i++) { double x, y, z; int point_type; cin>>point_type; if(point_type == 2) { cin>>x>>y; Point p(x, y); p.showPoint(); } if(point_type == 3) { cin>>x>>y>>z; Point_3D p(x, y, z); p.showPoint(); } } } Problem A: 立体空间中的点(II Description 设计一个平面上的点Point类和3维的点Point_3D类,满足Point_3D类继承自Point类,用于读取输入的数据,输出所构造的两种点的坐标。并统计输入的两种点的个数。 设计Point类需支持一下操作: Point::Point()无参构造。 Point::Point(double,double)两个坐标参数构造。 Point::x()返回x坐标 Point::y()返回y坐标 Point::x(int)修改x坐标并返回 Point::y(int)修改y坐标并返回 3 Point::showPoint()按格式输出Point对象 Point::showNumber()返回Point对象总数的静态函数 设计Point_3D类需支持一下操作: Point_3D::Point_3D()无参构造。 Point_3D::Point_3D(double,double,double)三个坐标参数构造。 Point_3D::z()返回z坐标。 Point_3D::z(int)修改z坐标并返回。 Point_3D::showPoint()按格式输出Point_3D对象。 Point_3D::setPoint(double,double,double)根据三个坐标参数修改Point_3D对象的坐标。 Point_3D::showNumber()返回Point_3D对象总数的静态函数。 ----------------------------------------------------------------------------- 你设计Point类和Point_3D类,使得main()函数能够正确运行。 函数调用格式见append.cc。 append.cc中已给出main()函数。 Input 输入的第一个整数n,表示有n组测试数据,后面的输入每行为一组测试数据。每组测试数据的第一行是一个整数m,m有两种取值:2、3;m为2时,后面有两个浮点数x、y,表示一个平面上的点的坐标(x,y);m为3时后面有3个浮点数x、y、z,表示一个3维的点的坐标(x,y,z)。 Output 开始部分为由main()函数产生的固定输出,用于测试对象的某些方法的调用情况。输出“Test data output :”之后为测试数据对应的输出: 每组测试数据对应一行输出。 若输入为平面上的点,则输出:“2D Point (x,y)”,x和y为输入的坐标值。 若输入为3维的点,则输出:“3D Point (x,y,y)”,x、y和z为输入的坐标值。 最后,分别输出总共输入的平面上的点数和3维的点数。 Sample Input 5 3 1 2 3 3 0 0 0 2 -1 1 3 -1 -1 -1 2 0 0 Sample Output Invariable test output : 3D Point (-100,0,100) Point (0,100,100) Test data output : 3D Point (1,2,3) 3D Point (0,0,0) 2D Point (-1,1) 3D Point (-1,-1,-1) 2D Point (0,0) Number of 2D Points : 2 Number of 3D Points : 3 #include static int m; //n,m被初始化为0 public: Point():X(0),Y(0){n++;} //无参构造 Point(double x1,double y1):X(x1),Y(y1){n++;} int x(){return X;} int y(){return Y;} int x(int x1){X=x1;return X;} int y(int y1){Y=y1;return Y;} static int showNumber(){return n;} void showPoint(){cout<<\ Point (\}; class Point_3D:public Point{ //Point_3D从Point 派生 protected: int Z; public: Point_3D():Z(0){m++;} Point_3D(double xx,double yy,double zz):Point(xx,yy),Z(zz){m++;} // 构造函数初始化列表 int z(){return Z;} int z(int zz){return Z;} void showPoint(){cout<<\ Point (\ void setPoint(double xx,double yy,double zz){X=xx;Y=yy;Z=zz;} static int showNumber(){return m;} }; int Point::n=0; int Point::m=0; int main() { cout<<\ Point_3D p3d; p3d.setPoint(-100, 0, 100); p3d.showPoint(); p3d.x(0); p3d.y(100); cout<<\ (\ cout<<\ int cases; cin>>cases; for(int i = 1; i <= cases; i++) { double x, y, z; int point_type; cin>>point_type; if(point_type == 2) { cin>>x>>y; Point p(x, y); p.showPoint(); } if(point_type == 3) { cin>>x>>y>>z; Point_3D p(x, y, z); p.showPoint(); } } cout<<\ of 2D Points : \ - 4 Point_3D::showNumber()< Problem B: 还会用继承吗? Description 定义一个Base类,包括1个int类型的属性,以及满足输出格式要求的构造函数、拷贝构造函数和析构函数。 of 3D Points : \ class 派生 public: int b; Derived: public Sample Input Jerry m Jemmy f Tom m Droopy m Sample Output Base{ //Derived从Base中 Derived(int t):Base(t){cout<<\\ ~Derived(){cout<<\= 我叫Jerry,是一只男老鼠,我的叫声是:吱吱吱! 我叫Jemmy,是一只女老鼠,我的叫声是:吱= \is erased.\ 吱吱! 定义Base类的子类Derived,包括1个int类型的属性, 以及满足输出格式要求的构造函数、拷贝构造函数和析构函数。 Input 第1行N>0表示测试用例个数。 每个测试包括2个int类型的整数。 Output 见样例。 Sample Input 1 10 20 Sample Output Base = 10 is created. Base = 10 is copied. Base = 10 is created. Derived = 20 is created. Base = 10 is copied. Derived = 20 is copied. Derived = 20 is erased. Base = 10 is erased. Derived = 20 is erased. Base = 10 is erased. Base = 10 is erased. Base = 10 is erased. #include Base(int t):a(t){cout<<\= \is created.\ //拷贝构造函数 ~Base(){cout<<\ = \ is erased.\ //析构函数 Base(const Base& b){a=b.a;cout<<\= \}; //析构函数 Derived(const Derived& d):Base(d),b(d.b){cout<<\d = \ Derived(int x,int y):Base(x),b(y){cout<<\= \}; int main() { int cases, data1, data2; cin>>cases; for (int i = 0; i < cases; i++) { cin>>data1>>data2; Base base1(data1), base2(base1); Derived derived1(data1, data2), derived2(derived1); } } Problem A: 动物类-抽象类 Description 每种动物都有自己的叫声,如狗的叫声是\汪汪汪\,猫的叫声是\喵喵喵\,老鼠的叫声是\吱吱吱\。 构造类Animal,Dog,Cat,Mouse,他们都有成员数据name和sex,表示名字和性别。一个成员函数cry(),输出他们的叫声,在main函数中采用多态性调用他们。 Input 动物的姓名和性别 Output 动物的信息 我叫Tom,是一只男猫,我的叫声是:喵喵喵! 我叫Droopy,是一条男狗,我的叫声是:汪汪汪! #include string name; char sex; virtual void cry()=0;//纯虚函数 };//分号必不可少 class Mouse: public Animal{ public: string name; char sex; Mouse(string n,char m){name=n;sex=m;if(sex=='m') cout<<\我叫\,是一只男老鼠,\else cout<<\我叫\,是一只女老鼠,\ void cry(){cout<<\我的叫声是:吱吱吱!\};//分号必不可少 class Dog: public Animal{ public: string name; char sex; Dog(string n,char m){name=n;sex=m;if(sex=='m') cout<<\我叫\,是一条男狗,\else cout<<\我叫\,是一条女狗,\ void cry(){cout<<\我的叫声是:汪汪汪!\}; //分号必不可少 class Cat: public Animal{ 5 public: string name; char sex; Cat(string n,char m){name=n;sex=m;if(sex=='m') cout<<\我叫\,是一只男猫,\else cout<<\我叫\,是一只女猫,\ void cry(){cout<<\我的叫声是:喵喵喵!\坐标和y坐标,x和y的值都在double数据范围内。 Output 输出每个Point对象的构造和析构行为。对每个Point对象,调用show()方法输出其值:X坐标在前,Y坐标在后,Y坐标前面多输出一个空格。每个坐标的输出精度为最长16位。输出格式(\\created.\} Point(double xx=0) { x_=y_=xx; cout<<\ (\: is };//分号必不可少 int main( ) { string nam; char s; cin>>nam>>s; Animal *p; Mouse m1(nam, s); p=&m1; p->cry(); cin>>nam>>s; Mouse m2(nam, s); p=&m2; p->cry(); cin>>nam>>s; Cat c1(nam, s); p=&c1; p->cry(); cin>>nam>>s; Dog d1(nam, s); p=&d1; p->cry(); return 0; } Problem B: 平面上的点——Point类 (II) Description 在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定。现在我们封装一个“Point类”来实现平面上的点的操作。 根据“append.cc”,完成Point类的构造方法和show()方法,输出各Point对象的构造和析构次序。 接口描述: Point::show()方法:按输出格式输出Point对象。 Input 输入多行,每行为一组坐标“x,y”,表示点的x 见sample。 C语言的输入输出被禁用。 Sample Input 1,2 3,3 2,1 Sample Output Point : (0, 0) is created. Point : (1, 2) is created. Point : (1, 2) Point : (1, 2) is erased. Point : (3, 3) is created. Point : (3, 3) Point : (3, 3) is erased. Point : (2, 1) is created. Point : (2, 1) Point : (2, 1) is erased. Point : (0, 0) is copied. Point : (1, 1) is created. Point : (0, 0) Point : (1, 1) Point : (0, 0) Point : (1, 1) is erased. Point : (0, 0) is erased. Point : (0, 0) is erased. #include double x_,y_; public: Point(double xx,double yy) { x_=xx; y_=yy; cout<<\ \created.\} void show() { cout<<\ (\\} Point(Point &p) { x_=p.x_;y_=p.y_; cout<<\ (\\copied.\} ~Point(); }; Point::~Point() { cout<<\ (\\erased.\ }; int main() { char c; double a, b; Point q; while(std::cin>>a>>c>>b) { Point p(a, b); p.show(); } : Point q1(q), q2(1); is : : is : is 6 q1.show(); q2.show(); q.show(); } Problem C: 平面上的点——Point类 (III) Description 在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定。现在我们封装一个“Point类”来实现平面上的点的操作。 根据“append.cc”,完成Point类的构造方法和show()方法,输出各Point对象的构造和析构次序。实现showPoint()函数。 接口描述: showPoint()函数按输出格式输出Point对象,调用Point::show()方法实现。 Point::show()方法:按输出格式输出Point对象。 Input 输入多行,每行为一组坐标“x,y”,表示点的x坐标和y坐标,x和y的值都在double数据范围内。 Output 输出每个Point对象的构造和析构行为。showPoint()函数用来输出(通过参数传入的)Point对象的值:X坐标在前,Y坐标在后,Y坐标前面多输出一个空格。每个坐标的输出精度为最长16位。输出格式见sample。 C语言的输入输出被禁用。 Sample Input 1,2 3,3 2,1 Sample Output Point : (0, 0) is created. Point : (1, 2) is created. Point : (1, 2) is copied. Point : (1, 2) Point : (1, 2) is erased. Point : (1, 2) is erased. Point : (3, 3) is created. Point : (3, 3) is copied. Point : (3, 3) Point : (3, 3) is erased. Point : (3, 3) is erased. Point : (2, 1) is created. Point : (2, 1) is copied. Point : (2, 1) Point : (2, 1) is erased. Point : (2, 1) is erased. Point : (0, 0) is copied. Point : (1, 1) is created. Point : (0, 0) is copied. Point : (1, 1) is copied. Point : (0, 0) is copied. Point : (0, 0) Point : (1, 1) Point : (0, 0) Point : (0, 0) is erased. Point : (1, 1) is erased. Point : (0, 0) is erased. Point : (1, 1) is erased. Point : (0, 0) is erased. Point : (0, 0) is erased. #include double x,y; public: Point(double xx=0) { x=y=xx; cout<<\: (\\<<\ } Point(double,double); void show(){ cout<<\: (\\< Point(Point &p) { x=p.x;y=p.y; cout<<\: (\ \is copied.\ } ~Point()//析构函数 { cout<<\: (\\is erased.\}; Point::Point(double xx,double yy) { x=xx;y=yy; cout<<\: (\\is created.\ } void showPoint(Point p) {p.show();} void showPoint(Point q1,Point q2,Point q) {q1.show();q2.show();q.show();} int main() { char c; double a, b; Point q; while(std::cin>>a>>c>>b) { Point p(a, b); showPoint(p); } Point q1(q), q2(1); showPoint(q1, q2, q); } Problem A: 编写函数:Swap (I) (Append Code) Description 编写用来交换两个数的函数,使得“Append Code”中的main()函数能正确运行。 ----------------------------------------------------------------------------- 用C实现三个函数int_swap()、dbl_swap()、SWAP(),其中SWAP()是个带参宏。 用C++实现两个函数,都以swap()命名。 7 以上函数的调用格式见“Append Code”。这里不给出函数原型,它们的参数请通过main()函数自行确定。 Input 输入为4行,每行2个数。 Output 输出为4行,每行2个数。每行输出的两数为每行输入的逆序。 Sample Input 12 57 9 -3 -12 4 3 5 Sample Output 57 12 -3 9 4 -12 5 3 #include int temp; temp=a; a=b; b=temp; } void swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } void swap (double &a,double &b) { double temp; temp=a; a=b; b=temp; } void swap(double *a,double *b) { double temp; temp=*a; *a=*b; *b=temp; } int main() { int x1, y1; cin>>x1>>y1; swap(&x1, &y1); cout< cin>>x1>>y1; swap(x1, y1); cout< double x2, y2; cin>>x2>>y2; swap(&x2, &y2); cout< cin>>x2>>y2; swap(x2, y2); cout< 8
正在阅读:
山东科技大学面向对象程序设计c++答案09-12
一、询价公告03-24
2020年供电公司党委上半年党建工作总结08-30
城市商业银行高峰论坛实录全文 - 最新城商行竞争态势03-23
超市员工培训教材讲义07-17
校园啦啦操比赛作文400字06-23
固定资产采购业务操作流程04-30
2017-2022年中国汗布行业市场分析与发展前景分析报告(目录)05-17
在全市基层党建工作会议上的讲话2021年08-16
水处理滤料项目可行性研究报告(目录)05-23
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- c++
- 山东
- 程序设计
- 面向
- 对象
- 答案
- 大学
- 科技
- 会计思考题答案
- 2018版中国混流泵行业市场投资规划分析报告目录
- OS课设2 - 图文
- 大学生入党申请书范文1000字3篇
- 销售顶岗实习周记300字-总结报告模板
- 2019年最新办公室主任终个人工作总结工作总结文档
- 苏教版二年级数学上册口算天天练题卡25
- 国内外数字媒体产业发展现状与发展趋势
- 单晶铜键合引线生产项目可行性研究报告
- 初中物理实验教学生活化实践
- 钢材的机械性能
- 评语大全之护理论文指导评语
- 精选教育资料高考物理总复习优编题型增分练:小综合练九
- 安邦入主民生银行公司治理结构案例分析
- 《文明从我做起》教学设计及反思范文
- 最新p2p理财公司排行榜
- 氰化锌粉置换规范讲义
- 2016年浙江省义乌市中考数学试卷解析
- 国家教育考试标准化考点建设项目管理办法
- summer 2013非营利组织体验报告模板-中文