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();
        }
};

 

posted @ 2023-05-15 20:14  七安。  阅读(15)  评论(0编辑  收藏  举报