第14周 项目二 oj虚函数计算图形面积

博客内容讲述了作者在实现oj项目中遇到的计算图形面积的问题。初始结果573.86存在误差,经检查发现是PI值定义不准确,修正为3.1415926后得到正确结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
*程序的版权和版本声明部分:
*Copyright(c)2014,烟台大学计算机学院学生
*All rights reserved.
*文件名称:
*作者:王鲁峰
*完成日期:2014 年 5 月 27 日
*版本号:v1.0
*对任务及求解方法的描述部分:
*问题描述:编写一个程序,定义抽象基类Shape,由它派生出5个派生类:Circle、Square、Rectangle、Trapezoid、Triangle
           用虚函数分别计算几种图形面积,并求它们之和。
           要求用基类指针数组,使它每一个元素指向一个派生类对象。
*输入描述: Input
           圆的半径
           正方形的边长
           矩形的边长
           梯形的上底和下底,高
           三角形的底与高
*程序输出:Output
           所有图形面积之和(结果保留两位小数)
*问题分析:
*算法设计:
*/
#include <iostream>
#include <iomanip>
using namespace std;
class Shape
{
public:
    virtual double area()=0;
};
class Circle:public Shape
{
public:
    Circle(double R):r(R) {}
    double area();
private:
    double r;
};
class Square:public Shape
{
public:
    Square(double a1):a(a1) {}
    double area();
private:
    double a;
};
class Rectangle:public Shape
{
public:
    Rectangle(double l,double w):length(l),width(w) {}
    double area();
private:
    double length,width;
};
class Trapezoid:public Shape
{
public:
    Trapezoid(double l,double w,double h):length(l),width(w),high(h) {} //分别代表上底下底还有高
    double area();
private:
    double length,width,high;
};
class Triangle:public Shape
{
public:
    Triangle(double l,double h):length(l),high(h) {}
    double area();
private:
    double length,high;//分别代表底高
};
double Circle::area()
{
    double s;
    s=3.1415926*r*r;
    return s;
}
double Square::area()
{
    double s;
    s=a*a;
    return s;
}
double Rectangle::area()
{
    double s;
    s=length*width;
    return s;
}
double Trapezoid::area()
{
    double s;
    s=(length+width)*high/2;
    return s;
}
double Triangle::area()
{
    double s;
    s=length*high/2;
    return s;
}
int main()
{


    float r,a,b,w1,w2,w,h;


    cout<<fixed<<setprecision(2);


    cin>>r;


    Circle circle(r);


    cin>>a;


    Square square(a);


    cin>>a>>b;


    Rectangle rectangle(a,b);


    cin>>w1>>w2>>h;


    Trapezoid trapezoid(w1,w1,h);


    cin>>w>>h;


    Triangle triangle(w,h);


    Shape *pt[5]= {&circle,&square,&rectangle,&trapezoid,&triangle};


    double areas=0.0;


    for(int i=0; i<5; i++)


        areas=areas+pt[i]->area();


    cout<<"total of all areas="<<areas<<endl;


    return 0;


}


 

运行结果:

心得体会:

  一开始计算出来的面积是573.86,我以为是程序写错了,后来发现是PI定义的问题,应该定义成3.1415926.。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值