c++打卡第二十七天
一、水仙花数
1、问题描述
2、设计思路
对于一个三位数,,求出它的每位数,三个数的平方加到一起,判断是否与原数相等,如果相等,就是水仙花数。
3、流程图
4、代码实现
#include<iostream> using namespace std; int main() { int n,a,b,c,d; for(n=100;n<1000;n++) { a=n%10; b=(n/10)%10; c=n/100; if((a*a*a+b*b*b+c*c*c)==n) { cout<<"水仙花数为:"<<n<<endl; } } return 0; }
5、代码实现
二、以圆类Circle及立体图形类Solid为基础设计球类Sphere
1、问题描述
以点类Point及平面图形类Plane为基类公有派生圆类Circle,再以圆类Circle及立体图形类Solid为基类公有派生球类Sphere,main(void)函数完成对球类Sphere的测试。
Point类结构说明:
Point类的数据成员包括: ①私有数据成员:X坐标x(double型),Y坐标y(double型)。 Point类成员函数包括: ①有参构造函数Point(double, double)和拷贝构造函数Point(const Point &),其中有参构造函数参数默认值为0,输出信息“Point Constructor run”,拷贝构造函数输出信息“Point CopyConstructor run” ②析构函数,析构函数输出信息“Point Destructor run” ③公有函数成员void setX(double)和double getX() const分别返回和设置X坐标 ④公有函数成员void setY(double)和double getY() const分别返回和设置Y坐标 ⑤公有成员函数void show() const用于显示点的坐标信息,显示格式为:Point(X=<X坐标>,Y=<Y坐标>)
Plane类结构说明:
Plane类的成员函数包括: ①纯虚函数virtual double length()const用于计算平面图形的周长 ②纯虚函数virtual double area()const用于计算平面图形的面积
Solid类结构说明:
Solid类的成员函数包括: ①纯虚函数virtual double volume()const用于计算立体图形的体积 ②纯虚函数virtual double s_Area()const用于计算立体图形的表面积
Circle类结构说明:
在这里描述函数接口。例如: 公有派生圆类Circle以点类Point、平面图形类Plane为基类,Circle类的结构说明如下: Circle类的数据成员包括: ①圆心坐标继承自Point类 ②保护静态数据常量PI(double型),其值为3.14159 ③私有数据成员:半径radius(double型)。 Circle类成员函数包括: ①有参构造函数Circle(double, double, double)和拷贝构造函数Circle(const Circle &),其中有参构造函数参数包括圆心坐标和半径,圆心调用Point类构造函数进行构造,各参数默认值为0,输出信息“Circle Constructor run”,拷贝构造函数输出信息“Circle CopyConstructor run” ②析构函数,析构函数输出信息“Circle Destructor run” ③公有函数成员void setR(double)和double getR()const分别返回和设置radius ④重载void show()const用于显示圆的信息,显示格式为: Circle(Point(<圆心X坐标>,<圆心Y坐标>),Radius=<半径>) ⑤重载double area()const用于计算圆的面积 ⑥重载double length()const用于计算圆的周长
Sphere类结构说明:
公有派生球类Sphere以圆类Circle、立体图形类Solid为基类,Sphere类的结构说明如下: Sphere类的数据成员包括: ①基圆继承自Circle类 Sphere类成员函数包括: ①有参构造函数Sphere(double, double, double)和拷贝构造函数Sphere(const Sphere &),其中有参构造函数参数包括基圆圆心坐标和半径,基圆调用Circle类构造函数进行构造,各参数默认值为0,输出信息“Sphere Constructor run”,拷贝构造函数输出信息“Sphere CopyConstructor run” ②析构函数,析构函数输出信息“Sphere Destructor run” ③重载void show()const用于显示球的信息,显示格式为: Sphere(Circle(Point(<球心X坐标>,<球心Y坐标>),Radius=<半径>)) ④重载double s_Area()const用于计算球的面积 ⑤重载double volume()const用于计算球的体积
裁判测试程序样例:
#include <iostream> using namespace std; //点类Point class Point{ private: double x; double y; public: Point(double xv=0,double yv=0);/*构造函数*/ Point(const Point &p); /*拷贝构造*/ ~Point(); /*析构函数*/ void setX(double xv); /*设置X坐标*/ void setY(double yv); /*设置Y坐标*/ double getX()const; /*获取X坐标*/ double getY()const; /*获取Y坐标*/ virtual void show()const; /*显示*/ }; Point::Point(const double xv,const double yv){/*构造函数*/ x=xv; y=yv; cout<<"Point Constructor run"<<endl; } Point::Point(const Point &p){/*拷贝构造*/ x=p.x; y=p.y; cout<<"Point CopyConstructor run"<<endl; } Point::~Point(){/*析构函数*/ cout<<"Point Destructor run"<<endl; } void Point::setX(double xv){/*设置X坐标*/ x=xv; } void Point::setY(double yv){/*设置Y坐标*/ y=yv; } double Point::getX()const{/*获取X坐标*/ return x; } double Point::getY()const{/*获取Y坐标*/ return y; } void Point::show()const{/*显示*/ cout<<"Point(X="<<x<<",Y="<<y<<")"; } //平面图形类Plane class Plane{ public: virtual double length()const=0;/*周长*/ virtual double area()const=0; /*面积*/ }; //立体图形类Solid class Solid{ public: virtual double volume()const=0;/*体积*/ virtual double s_Area()const=0;/*表面积*/ }; /*请在这里填写答案*/ void show(Point *p){/*点基类的显示函数*/ p->show(); } void length(Plane *p){/*平面图形的周长函数*/ cout<<"Length="<<p->length()<<endl; } void area(Plane &p){/*平面图形的面积函数*/ cout<<"Area="<<p.area()<<endl; } void volumn(Solid *s){/*立体图形的体积函数*/ cout<<"Volumn="<<s->volume()<<endl; } void s_Area(Solid &s){/*立体图形的表面积函数*/ cout<<"S_Area="<<s.s_Area()<<endl; } //主函数 int main(void){ double r; cin>>r; Sphere s1(1,2,3),s2(s1); show(&s1); cout<<endl; area(s1); length(&s1); s_Area(s1); volumn(&s1); s2.setR(r); show(&s2); cout<<endl; area(s2); length(&s2); s_Area(s2); volumn(&s2); return 0; }
输入样例:
4.0
输出样例:
Point Constructor run Circle Constructor run Sphere Constructor run Point CopyConstructor run Circle CopyConstructor run Sphere CopyConstructor run Sphere(Circle(Point(X=1,Y=2),Radius=3)) Area=28.2743 Length=18.8495 S_Area=113.097 Volumn=113.097 Sphere(Circle(Point(X=1,Y=2),Radius=4)) Area=50.2654 Length=25.1327 S_Area=201.062 Volumn=268.082 Sphere Destructor run Circle Destructor run Point Destructor run Sphere Destructor run Circle Destructor run Point Destructor run
2、代码实现
#define PI 3.14159 class Circle:public Point ,public Plane { private: double radius; public: Circle(double a=0, double b=0, double c=0):Point(a,b),radius(c) { cout<<"Circle Constructor run"<<endl; } Circle(const Circle &p):Point(p),radius(p.radius) { cout<<"Circle CopyConstructor run"<<endl; } ~Circle() { cout<<"Circle Destructor run"<<endl; } void setR(double r) { radius=r; } double getR()const { return radius; } void show()const { cout<<"Circle(Point(X="<<getX()<<",Y="<<getY()<<"),Radius="<<radius<<")"; } double area()const { return PI*radius*radius; } double length()const { return 2*PI*radius; } }; class Sphere:public Circle,public Solid { public: Sphere(double x=0, double y=0, double r=0):Circle(x,y,r) { cout<<"Sphere Constructor run"<<endl; } Sphere(const Sphere &p):Circle(p) { cout<<"Sphere CopyConstructor run"<<endl; } ~Sphere() { cout<<"Sphere Destructor run"<<endl; } void show()const { cout<<"Sphere("; Circle::show(); cout<<")"; } double s_Area()const { return 4*PI*getR()*getR(); } double volume()const { return (4.0/3.0)*PI*getR()*getR()*getR(); } };