首页 > 试题广场 >

KiKi设计类继承

[编程题]KiKi设计类继承
  • 热度指数:21152 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
KiKi理解了继承可以让代码重用,他现在定义一个基类shape,私有数据为坐标点x,y,  由它派生Rectangle类和Circle类,它们都有成员函数GetArea()求面积。派生类Rectangle类有数据:矩形的长和宽;派生类Circle类有数据:圆的半径。Rectangle类又派生正方形Square类,定义各类并测试。输入三组数据,分别是矩形的长和宽、圆的半径、正方形的边长,输出三组数据,分别是矩形、圆、正方形的面积。圆周率按3.14计算。

输入描述:
输入三行,
第一行为矩形的长和宽,
第二行为圆的半径,
第三行为正方形的边长。


输出描述:
三行,分别是矩形、圆、正方形的面积。
示例1

输入

7 8
10
5

输出

56
314
25
# 看了一圈都是C++,我贡献个python码吧

class shape():
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.GetArea()

    def GetArea(self):
        return int(self.x) * int(self.y)


class Rectangle(shape):
    def __init__(self, x, y):
        shape.__init__(self, x, y)


class Square(Rectangle):
    def __init__(self, x):
        super().__init__(x, y)
        self.x = x

    def GetArea(self):
        return int(self.x) ** 2


class Circle(shape):
    def __init__(self, x):
        super().__init__(x, y)
        self.x = x

    def GetArea(self):
        return (314 * int(self.x) ** 2)/100


x, y = input().split()
s1 = Rectangle(x, y)

x = input()
s2 = Circle(x)
temp = s2.GetArea()
if temp == int(temp):
    temp = int(temp)

x = input()
s3 = Square(x)
print(Rectangle.GetArea(s1))
print(temp)
print(Square.GetArea(s3))


编辑于 2020-08-09 11:06:28 回复(0)
#include<iostream>
#define PAI 3.14
using namespace std;

class Shape
{
    private:
        int x,y;
    public:
        virtual double GetArea ()
        {
            return 0;
        }
};
class Rectangle : public Shape
{
    public:
        void setRectangle(double x,double y)
        {
            length=x;
            width=y;
        }
        virtual double GetArea()
        {
            return length*width;
        }
    private:
        double length,width;


};
class Circle : public Shape
{
    public:
        void setCircle(double r)
        {
            ridus=r;
        }
        double GetArea()
        {
            return PAI*ridus*ridus;
        }
    private:
        double ridus;
};
class Square : public Rectangle
{
    public:
        void setSquare(double x)
            {
                side=x;
            }
        double GetArea()
            {
                return side*side;
            }
    private:
        double side;
};
int main()
{
    Rectangle rec;
    Circle cir;
    Square squ;
    double a,b,c,d;
    cin>>a>>b>>c>>d;
    rec.setRectangle(a, b);
    cir.setCircle(c);
    squ.setSquare(d);
    cout<<rec.GetArea()<<endl;
    cout<<cir.GetArea()<<endl;
    cout<<squ.GetArea()<<endl;
    return 0;
}

发表于 2020-07-27 20:44:13 回复(0)
记录一下,这题的输出标准没有说清楚。小数点后没有小数,则按照int型整数格式输出,小数点后仅一位小数,则直接输出。小数点后如果有两位或者大于两位,则保留两位小数输出~~~
import java.awt.font.FontRenderContext;
import java.awt.geom.Area;
import java.lang.reflect.Array;
import java.text.DecimalFormat;
import java.util.*;
import java.io.IOException;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int length = sc.nextInt();
        int width = sc.nextInt();
        int r = sc.nextInt();
        int side = sc.nextInt();

        Rectangle rectangle = new Rectangle(length, width);
        Circle circle = new Circle(r);
        Square square = new Square(side);

        System.out.println(rectangle.GetArea(length, width));

        double AreaCircle = circle.GetArea(r);
        int AreaCircle1 = (int)circle.GetArea(r);
        DecimalFormat df = new DecimalFormat("###.0");
        double temp;
        if (AreaCircle > AreaCircle1){
            temp = Double.parseDouble(df.format(AreaCircle));
            if (temp != AreaCircle)
                System.out.println(String.format("%.2f", AreaCircle));
            else
                System.out.println(AreaCircle);
        }
        else
            System.out.println(AreaCircle1);

        System.out.println(square.GetArea(side));
    }
}

class shape{
    private int x;
    private int y;

    public shape(int x, int y){
        this.x = x;
        this.y = y;
    }
}

class Rectangle extends shape{
    private int length;
    private int width;

    public Rectangle(int length, int width){
        super(length, width);
        this.length = length;
        this.width = width;
    }

    public int GetArea(int length, int width){
        int Area = length * width;
        return Area;
    }
}

class Circle extends shape{
    int r;

    public Circle(int r){
        super(r, r);
        this.r = r;
    }

    public double GetArea(int r){
        double Area;
        Area = 3.14 * r * r;
        return Area;
    }
}

class Square extends Rectangle{
    int length;

    public Square(int length){
        super(length, length);
        this.length = length;
    }

    public int GetArea(int length){
        int Area;
        Area = length * length;
        return Area;
    }
}



编辑于 2020-06-30 22:59:46 回复(1)
#include <iostream>
(720)#include <stdio.h>
using namespace std;

const float PI = 3.14;

class Shape
{
    public:
    
    virtual float GetArea() = 0;
        
    private:
    int x;
    int y;
};

class Rectangle : public Shape
{
    public:
    virtual float GetArea()
    {
        return length * wide;
    }
    
    void set(int length, int wide)
    {
        this->length = length;
        this->wide = wide;
    }
    
    private:
    int length;
    int wide;
};

class Square : public Rectangle
{
    public:
    virtual float GetArea()
    {
        return length * length;
    }
    
    void set(int length)
    {
        this->length = length;
    }
    
    private:
    int length;
};

class Circle : public Shape
{
    public:
    virtual float GetArea()
    {
        return PI * radius * radius;
    }
    
    void set(int radius)
    {
        this->radius = radius;
    }
    
    private:
    int radius;
};

void print(Shape& s)
{
    cout << s.GetArea() << endl;
}

int main()
{
    int a, b;
    cin >> a >> b;
    Rectangle r;
    r.set(a, b);
    
    cin >> a;
    Circle c;
    c.set(a);
    
    cin >> a;
    Square s;
    s.set(a);
    
    print(r);
    print(c);
    print(s);

    return 0;
}

发表于 2020-03-28 20:56:16 回复(0)
*****题目,输出也没做要求,圆面积一会要求整数一会要求浮点数,鬼知道你脑子有什么泡泡
发表于 2020-07-14 10:27:39 回复(4)
这个题纯粹是考C++内容,不过也不用担心,C++的类和C的struct基本上是差不多的,只不过类的规定很多。。。接下来我们就按照题目的意思来定义相应的类。我们定义shape的类的时候,定义了一个GetArea()纯虚函数,这个时候shape类就属于抽象类,也叫做接口类(抽象类不能实例化对象,但是可以用引用或者指针调用)因为shape类定义了GetArea()函数并不知道要做什么,就可这样定义。然后剩下的就是子类继承shape父类。在主函数调用时,定义shape类型的指针p,分别去取各个子类的地址并分别调用他们的函数,这样就实现了类的多态性!
#include<iostream>
using namespace std;
class shape{
private:
    int x;
    int y;
public:
    shape() : x(0), y(0){ }
    shape(int a, int b) : x(a), y(b){ }
    virtual void GetArea() = 0;
};
class Circle : public shape{
private:
    double radius;
    const static double PI;
public:
    Circle() : radius(0) { }
    Circle(int r) : radius(r) { }
    virtual void GetArea(){
        double S;
        S = PI * radius * radius;
        cout << S << endl;
    }
};
const double Circle::PI = 3.14;
class Retangle : public shape{
private:
    int w;
    int h;
public:
    Retangle() : w(0), h(0){ }
    Retangle(int x, int y) : w(x), h(y){ }
    virtual void GetArea(){
        double S;
        S = w * h;
        cout << S << endl;
    }
};
class Square : public Retangle{
private:
    int a;
public:
    Square() : a(0){ }
    Square(int x) : a(x){ }
    virtual void GetArea(){
        double S;
        S = a * a;
        cout << S << endl;
    }
};
int main(){
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    Retangle re(a, b);
    Circle C(c);
    Square s(d);
    shape* p;
    p = &re;
    p->GetArea();
    p = &C;
    p->GetArea();
    p = &s;
    p->GetArea();
    return 0;
}


发表于 2020-06-03 19:58:11 回复(1)
对于浮点数的打印, %g可以根据数据内容自动选择最合适的显示
printf("%g\n", result);


发表于 2023-09-21 15:28:24 回复(0)
#include<stdio.h>
int main()
{
    int a=0;
    int b=0;
    int r=0;
    int s=0;
    double c=0;
    scanf("%d%d",&a,&b);
    scanf("%d",&r);
    scanf("%d",&s);
    printf("%d\n",a*b);
    c=3.14*r*r;
    if(c-(double)(int)c)
    {
        if((int)(c*100)%10)
        {
        printf("%.2lf\n",c);
        }
        else
        {
            printf("%.1lf\n",c);
        }
    }
    else
    {
        printf("%d\n",(int)c);
    }
    printf("%d\n",s*s);
    return 0;
}
发表于 2021-08-02 11:46:06 回复(0)
这个格式有点骚%g
#include <stdio.h>
int main()
{
    int c,k,r,l;
    scanf("%d%d%d%d",&c,&k,&r,&l);
    printf("%d\n%g\n%d\n",c*k,r*r*3.14,l*l);
}


发表于 2020-04-10 16:14:36 回复(3)
#include<stdio.h>
struct Area
{
    float Rectangle_lenth;
    float Rectangle_width;
    float Circle_r;
    float Square_width;
};
float getRectangleArea(float x,float y)
{
    return x*y;
}
float getCircleArea(float r)
{
    return 3.14*r*r;
}
float getSquareArea(float x)
{
    return x*x;
}
int main()
{
    struct Area a;
    scanf("%f %f",&a.Rectangle_lenth,&a.Rectangle_width);
    scanf("%f",&a.Circle_r);
    scanf("%f",&a.Square_width);
    float RectangleArea=getRectangleArea(a.Rectangle_lenth,a.Rectangle_width);
    float CircleArea=getCircleArea(a.Circle_r);
    float SquareArea=getSquareArea(a.Square_width);
    printf("%g\n",RectangleArea);
    printf("%g\n",CircleArea);
    printf("%g\n",SquareArea);
    return 0;
}
发表于 2024-07-31 17:46:08 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    int r = 0;
    int c = 0;
    scanf("%d%d%d%d", &a, &b, &r, &c);
    printf("%d\n", a * b);
    printf("%g\n", 3.14 * r * r);
    printf("%d\n", c * c);
    return 0;
}
发表于 2023-12-29 19:47:38 回复(1)
整形时:
浮点型时:
发表于 2022-08-02 13:47:53 回复(0)
C语言写法(糊弄)
#include <stdio.h>
int main()
{
    int a,b,c,d;
    scanf("%d %d",&a,&b);
    scanf("%d",&c);
    scanf("%d",&d);
    int x=a*b;
    int z=d*d;
    int y=(int)(3.14*c*c);
    if(3.14*c*c-y<0.001)
    {
        printf("%d\n%d\n%d",x,y,z);
    }
    else if((3.14*c*c-y)*10-(int)((3.14*c*c-y)*10)<0.001)
    {
        printf("%d\n%.1f\n%d",x,c*c*3.14,z);
    }
    else
    {
        printf("%d\n%.2f\n%d",x,c*c*3.14,z);
    }
}

发表于 2024-11-15 21:34:14 回复(0)
#include<stdio.h>
#define PI 3.14
//基类
typedef struct shape
{
    int x;
    int y;
}shape;
//矩形
typedef struct Rectangle
{
    int length;
    int width;
}rectangle;
int rectangle_GetArea(rectangle*r)
{
    return r->length*r->width;
}
//圆形
typedef struct Circle
{
    float x;
}circle;
float circle_GetArea(circle*c)
{
  return c->x*c->x*PI;
}
//正方形
typedef struct Square
{
    int x;
}square;
int square_GetArea(square*s)
{
    return s->x*s->x;
}
rectangle r;
circle c;
square s;
int main()
{
    rectangle rect;
    circle circle;
    square square;
    // 输入矩形的长和宽
    scanf("%d %d", &rect.length, &rect.width);
    // 输入圆的半径
    scanf("%g", &circle.x);
    // 输入正方形的边长
    scanf("%d", &square.x);
    // 输出矩形面积
    printf("%d\n", rectangle_GetArea(&rect));
    // 输出圆的面积
    printf("%g\n", circle_GetArea(&circle));
    // 输出正方形面积
    printf("%d\n", square_GetArea(&square));
}

发表于 2024-10-08 17:14:48 回复(0)
#include <stdio.h>

int main() {
    struct S
    {
        int a, b;
        int c;
        int d;
    } S;
    scanf("%d %d %d %d", &S.a, &S.b, &S.c, &S.d);
    int ret=S.a*S.b;
    
    if (S.c%10==0) 
    {
        printf("%d\n%.0f\n%d", ret, S.c*S.c*3.14, S.d*S.d);
    }
    else if(S.c%5==0 && S.c%10!=0) 
    {
        printf("%d\n%.1f\n%d", ret, S.c*S.c*3.14, S.d*S.d);
    }
    else
    {
    printf("%d\n%.2f\n%d", ret, S.c*S.c*3.14, S.d*S.d);
    }
    return 0;
}

编辑于 2024-04-20 16:22:33 回复(0)
#include <stdio.h>

struct
{
    int length;
    int broad;
}oblong;

struct
{
    int r;
}cir; 

struct
{
    int length;
}rec;

int main() 
{
    const float pi = 3.14;

    scanf("%d%d", &oblong.broad, &oblong.length);
    scanf("%d", &cir.r);
    scanf("%d", &rec.length);

    printf("%d\n", oblong.length * oblong.broad);
    printf("%g\n", cir.r * cir.r * pi);
    printf("%d\n", rec.length * rec.length);
    
    return 0;
}

编辑于 2024-03-20 14:26:53 回复(0)
#include <stdio.h>

int main() 
{
    int a,b;
    scanf("%d %d",&a,&b);
    int  c;
    scanf("%d",&c);
    int d;
    scanf("%d",&d);
    printf("%d\n",a*b);
    printf("%g\n",3.14*(c*c));
    printf("%d\n",d*d);
    return 0;
}

发表于 2023-12-06 11:29:44 回复(0)
#include <stdio.h>

float GetArea(int shape, int x, int y, int r) {
    float m = 0;
    switch (shape )   {
        case 1:
            m = x * y;
            break;
        case 2:
            m = 3.14 * r * r;
            break;
        case 3:
            m = x * x;
            break;
        default:
            break;
    }
    return m;
}

int main() {
    int x = 0, y = 0, r = 0;
    scanf("%d%d", &x, &y);
    int re = (int)GetArea(1, x, y, r);
    scanf("%d", &r);
    float c = GetArea(2, x, y, r);
    scanf("%d", &x);
    int s = (int)GetArea(3, x, y, r);
    
    printf("%d\n", re);

    int cc = (int)c;
    if (cc == c)  printf("%d\n", cc);
    else printf("%g\n", c);

    printf("%d\n", s);
    return 0;
}

发表于 2023-11-20 03:56:24 回复(0)
#include <iostream>
using namespace std;

class shape{
    private:
        int x;
        int y;
    public:
        shape(int x = 0,int y = 0):x(x),y(y){}
};

class Rectangle:public shape{
    private:
        int length;
        int wide;
    public:
        Rectangle(int l = 0 ,int w = 0):length(l),wide(w),shape(){}
        int GetArea()
        {
            return length*wide;
        }
};

class Square:public Rectangle{
    private:
        int a;
    public:
        Square(int a=0):a(a),Rectangle(){}
        int GetArea()
        {
            return a*a;
        }
};

class Circle:public shape{
    private:
        int r;
    public:
        Circle(int r = 0):r(r),shape(){}
        float GetArea()
        {
            return 3.14*r*r;
        }
};

int main()
{
    int len,wid,r,a;
    cin>>len>>wid>>r>>a;
    Rectangle rec = Rectangle(len,wid);
    Circle cir = Circle(r);
    Square squ = Square(a);
    cout<<rec.GetArea()<<endl;
    cout<<cir.GetArea()<<endl;
    cout<<squ.GetArea()<<endl;
    return 0;
}

发表于 2023-05-12 11:54:35 回复(0)
只有格式输出折腾半天
import java.text.DecimalFormat;
import java.util.Scanner;

class shape {
    private int x;
    private int y;
    public shape() {}
    public shape(int x, int y) {
        this.x = x;
        this.y = y;
    }
    public shape (int x) {
        this.x = x;
    }
    public int getX() {
        return this.x;
    }
    public int getY() {
        return this.y;
    }
    public double GetArea() {
        return 0.0;
    }
    public void printArea() {
        double area = this.GetArea();
                //格式化不足补零
        DecimalFormat decimalFormat = new DecimalFormat("#.##");
        String result = decimalFormat.format(area);
        if (result.endsWith(".00")) {//整数取整
            System.out.println((int) area);
        } else {
            System.out.println(result);
        }
    }
}
class Rectangle extends shape {
    public Rectangle(int x, int y) {
        super(x, y);
    }
    public double GetArea() {
        return super.getX() * super.getY();
    }
}

class Circle extends shape {
    public Circle (int x) {
        super(x);
    }
    public double GetArea() {
        return super.getX() * super.getX() * 3.14;
    }
}

class Square extends shape {
    public Square (int x) {
        super(x);
    }
    public double GetArea() {
        return super.getX() * super.getX();
    }
}

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        Rectangle s1 = new Rectangle(in.nextInt(), in.nextInt());
        s1.printArea();
        Circle s2  = new Circle(in.nextInt());
        s2.printArea();
        Square s3 = new Square(in.nextInt());
        s3.printArea();
    }
}


发表于 2023-05-02 14:00:08 回复(0)