C++编程题,对我来说难度有点大╭(°A°`)╮有点点不会写?

已知坐标于x,y且半径为r的圆类如下

class Circle
{ private: int x,y,r;
};

int main()
{ int c;
do
{ cout<<"1-创建圆,2-列出圆,其他-退出";
//请在此补全程序
}while(c);
return 0;
}
请在派生类完善此类

1. (5')在main()编写程序,键盘按1可以创建圆,2可以列出圆,其他退出

2. (5') 编写构造函数,将外部传入的坐标和半径保存到数据成员中。

3. (3') 功能1:实现创建圆功能,输入x0,y0,r0。转到要求4.

4. (5') 遍历cop数组取出已有圆对象的坐标,计算所输入圆与已有圆的距离d=(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1),若d<(r0+r1)*(r0+r1)说明所输入圆与已有圆相交,应放弃创建圆操作并提示。不相交则转到要求5.

5. (5') 创建圆对象,并将创建对象的地址保存到指针数组Circle *cop[]。

6. (5') 功能2:用cout列出cop数组各个圆的坐标和半径。

第1个回答  2021-12-08
#include <iostream>

using namespace std;

class Circle{
private:
int x;
int y;
int r;
public:
Circle(int x,int y,int r):x(x),y(y),r(r){}
int getX()const{return x;}
int getY()const{return y;}
int getR()const{return r;}
};

int main(){
int c;
Circle* cop[999];
int length = 0;
do{
cout<<"1- 创建圆,2-列出圆,其他-退出";
cin>>c;
switch(c){
case 1:
int x0,y0,r0;
cin>>x0>>y0>>r0;
bool flag;
flag = false;
if(length != 0){
for(int i = 0; i < length;i++){
int x = cop[i]->getX();
int y = cop[i]->getY();
int r = cop[i]->getR();
if((x-x0)*(x-x0) + (y-y0)*(y-y0) < (r+r0)*(r+r0)){
cout<<"相交了"<<endl;
flag = true;
break;
}
}
}else if(flag == false){
cop[length++] = new Circle(x0,y0,r0);
}
break;
case 2:
for(int i = 0;i < length;i++){
cout<<"num:" << i<<"\tx:"<<cop[i]->getX()<<"\ty:"<<cop[i]->getY()<<"\tr:"<<cop[i]->getR()<<endl;
}
break;
default:
return 0;
}
}while(c);
return 0;
}
相似回答