2023.5.16编程一小时打卡

发布时间 2023-05-16 19:09:48作者: 信2211-8李欣垚

一、问题描述:

给出下面的多边形基类框架:

class polygon

{ protected:

   int number;//边数,最多不超过100条边

private:

   int side_length[100];//边长数组

public:

   polygon();//构造函数根据需要重载
   int perimeter();//计算多边形边长
   void display();//输出多边形边数和周长

}

建立一个派生类rectangle(矩形),增加以下数据成员:

  int height;
  int width;

增加以下成员函数:

 rectangle类的无参和参数化构造函数
 int perimeter();//计算矩形边长
 void display();//输出多边形边数和周长

建立一个派生类equal_polygon(等边多边形),增加以下数据成员:

  int side_len;

增加以下成员函数:

 equal_polygon类的无参和参数化构造函数
 int perimeter();//计算等边多边形边长
 void display();//输出多边形边数和周长

生成上述类并编写主函数,根据输入的多边形信息,相应建立一个多边形类对象或矩形类对象或等边多边形类对象,计算每一个多边形的周长并且输出其边数和周长。

输入格式: 测试输入包含一个测试用例,该测试用例的第一行输入多边形的个数n,接下来n行每一行给出一个多边形的基本信息,每行的第一个数字为当前多边形的类型,0为一般多边形,后面跟随m个数字为m条边的边长,-1为一般多边形边长输入结束标志,1为矩形,后面跟随两个数字,分别为height和width,2为等边多边形,后面跟随两个数字为等边多边形的边数和边长。

二、解题思路:

首先根据题目要求对多边形基类进行定义,再定义保护和私有成员数据以及成员函数,再定义由其延申出来子类矩形类和等边多边行类,定义成员函数计算边长和输出的函数,最后,在主函数中输入多边形的信息,输出该多边形的边数以及周长。

三、代码实现:

  1 #include<iostream>
  2 using namespace std;
  3 class polygon
  4 {
  5 protected:
  6     int number;
  7 private:
  8     int side_length[100];
  9 public:
 10     polygon() = default;
 11     polygon(int n)
 12     {
 13         number = n;
 14         for (int i = 0; i < 100; i++)
 15         {
 16             side_length[i] = 0;
 17         }
 18     }
 19     void setlen(int *l)
 20     {
 21         for (int i = 0; i < 100; i++)
 22         {
 23             side_length[i] = *(l + i);
 24         }
 25     }
 26     int perimeter()
 27     {
 28         int sum = 0;
 29         for (int i = 0; i < 100; i++)
 30         {
 31             sum += side_length[i];
 32         }
 33         return sum;
 34     }
 35     void display()
 36     {
 37         cout << number << " " << perimeter() + 1 << endl;
 38     }
 39 };
 40 class rectangle :public polygon
 41 {
 42 protected:
 43     int height;
 44     int width;
 45 public:
 46     rectangle() = default;
 47     rectangle(int h, int w)
 48     {
 49         height = h;
 50         width = w;
 51     }
 52     int perimeter()
 53     {
 54         return 2 * (height + width);
 55     }
 56     void display()
 57     {
 58         cout << "4" << " " << perimeter() << endl;
 59     }
 60 };
 61 class equal_polygon :public polygon
 62 {
 63 protected:
 64     int side_len;
 65 public:
 66     equal_polygon() = default;
 67     equal_polygon(int n, int l)
 68     {
 69         number = n;
 70         side_len = l;
 71     }
 72     int perimeter()
 73     {
 74         return number * side_len;
 75     }
 76     void display()
 77     {
 78         cout << number << " " << perimeter() << endl;
 79     }
 80 };
 81 int main()
 82 {
 83     int n;
 84     cin >> n;
 85     int judge;
 86     for (int i = 0; i < n; i++)
 87     {
 88         cin >> judge;
 89         if (judge == 0)
 90         {
 91             int len[100];
 92             for (int i = 0; i < 100; i++)
 93             {
 94                 len[i] = 0;
 95             }
 96             int count = 0;
 97             for (int i = 0; i < 100; i++)
 98             {
 99                 cin >> len[i];
100                 if (len[i] == -1)
101                 {
102                     break;
103                 }
104                 count++;
105             }
106             polygon p(count);
107             p.setlen(len);
108             p.display();
109         }
110         if (judge == 1)
111         {
112             int h, w;
113             cin >> h >> w;
114             rectangle r(h, w);
115             r.display();
116         }
117         if (judge == 2)
118         {
119             int n;
120             int l;
121             cin >> n >> l;
122             equal_polygon e(n, l);
123             e.display();
124         }
125     }
126     return 0;
127 }