站点图标 陌路寒暄

Shape系列-9

Shape系列-9

时间: 1ms        内存:128M

描述:

小聪新买个白板要随意画图形。小聪认为自己变成水平不错了,于是自己编个程序,求随意画的三个图形的面积。但是写了大部分,发现了问题。问题一:三个图形的面积都是10000;问题二,case语句写的不好。小聪认为小强的Shape类有问题,请小强修改Shape类,并且帮自己完善case语句。下面是小聪给小强的程序代码。

#include<ctime>
#include<iostream>
#define PI 3.14
using namespace std;

class Shape
{
public:
 
 Shape(int c=0){color=c;}
 int getColor(){return color;}
 double area(){return 10000;};
 
protected:
 int color;
};

class Point:public Shape
{
public:
 Point(int c=0,double a=0,double b=0):Shape(c){x=a;y=b;}
 
 double getX(){return x;}
 double getY(){return y;}
 double area(){return 0;}
protected:
 double x,y;
};

class Circle:public Point
{
public:
 Circle(int c=0,double a=0,double b=0,double r=0)
  :Point(c,a,b){radius=r;}
 
 double getRadius(){return radius;}
 double area(){return PI*radius*radius;}
private:
 double radius;
};

class Rectangle:public Point
{
public:
 Rectangle(int c=0, double a=0,double b=0,double w=0,double h=0):
   Point(c,a,b),width(w),height(h){}
 
   double getWidth(){return width;}
   double getHeight(){return height;}
      double area(){return width*height;}
private:
 double width,height;
};

int main()
{
 int i,k,a,b,r,c,w,h;
 Shape *pt[3];
 for(i=0;i<3;i++)
 {
  cin>>c;
  cin>>a>>b;
  cin>>k;
  switch(k)
  {
  **************
  小聪的Case语句
  **************
  }
 }
 for(i=0;i<3;i++)
 {
  cout<<"Shape"<<i<<":color:"<<pt[i]->getColor()<<
   " position:"<<pt[i]->getX()<<","<<pt[i]->getY()<<
   " area:"<<pt[i]->area()<<endl;
 }
 return 0;
}

提示:请改错并填充后提交完整的程序。

输入:

三个图形的信息。每个图形的输入为三行。

第一行:图形的颜色c、位置 a 和 b;

第二行:图形的判定标志 k:0为点,1 为圆,2 为矩形;

第三行:图形的其他信息:点无信息、圆为半径r,矩形为宽w和高h。

输出:

三个图形的颜色、位置和面积。

示例输入:

5 1 2
0
6 2 3
1
1
7 3 4
2
10 20

示例输出:

Shape0:color:5 position:1,2 area:0
Shape1:color:6 position:2,3 area:3.14
Shape2:color:7 position:3,4 area:200

提示:

参考答案(内存最优[1092]):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PI 3.14
int main()
{
    int a,b,c,d,e,f;
    double area;
    for(int i=0;i<3;i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        scanf("%d",&d);
        if(d==0)area=0;
        else if(d==1)
        {
            scanf("%d",&e);
            area=PI*e*e;
        }
        else if(d==2)
        {
            scanf("%d%d",&e,&f);
            area=f*e;
        }
        printf("Shape%d:color:%d position:%d,%d area:%g\n",i,a,b,c,area);
    }
    return 0;
}

参考答案(时间最优[0]):

#include<ctime>
#include<iostream>
#define PI 3.14
using namespace std;

class Shape
{
public:
	
	Shape(int c=0){color=c;}
	
	virtual double getX()=0;
	virtual double getY()=0;
	int getColor(){return color;}
	void setColor(int c){color=c;}
	
	virtual double area()=0;
	
protected:
	int color;
};

class Point:public Shape
{
public:
	Point(int c=0,double a=0,double b=0):Shape(c){x=a;y=b;}
	
	double getX(){return x;}
	double getY(){return y;}
	double area(){return 0;}
protected:
	double x,y;
};

class Circle:public Point
{
public:
	Circle(int c=0,double a=0,double b=0,double r=0)
		:Point(c,a,b){radius=r;}
	
	double getRadius(){return radius;}
	double area(){return PI*radius*radius;}
private:
	double radius;
};

class Rectangle:public Point
{
public:
	Rectangle(int c=0, double a=0,double b=0,double w=0,double h=0):
	  Point(c,a,b),width(w),height(h){}
	
	  double getWidth(){return width;}
	  double getHeight(){return height;}
      double area(){return width*height;}
private:
	double width,height;
};


int main()
{
	int i,k,a,b,r,c,w,h;
	Shape *pt[3];
	for(i=0;i<3;i++)
	{
		cin>>c;
		cin>>a>>b;
		cin>>k;
		switch(k)
		{
		case 0:
			pt[i]=new Point(c,a,b); 
			break;
		case 1:
			cin>>r;
			pt[i]=new Circle(c,a,b,r); 
			break;
		case 2:
			cin>>w>>h;
			pt[i]=new Rectangle(c,a,b,w,h); 
			break;
		}
	}
	for(i=0;i<3;i++)
	{
		cout<<"Shape"<<i<<":color:"<<pt[i]->getColor()<<
			" position:"<<pt[i]->getX()<<","<<pt[i]->getY()<<
			" area:"<<pt[i]->area()<<endl;
	}
	return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

退出移动版