C++几何图形面积周长计算(共16页).doc

上传人:飞****2 文档编号:14486487 上传时间:2022-05-04 格式:DOC 页数:16 大小:216KB
返回 下载 相关 举报
C++几何图形面积周长计算(共16页).doc_第1页
第1页 / 共16页
C++几何图形面积周长计算(共16页).doc_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《C++几何图形面积周长计算(共16页).doc》由会员分享,可在线阅读,更多相关《C++几何图形面积周长计算(共16页).doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上福建工程学院计算机与信息科学系实验报告 10 11 学年第 1 学期 任课老师: 林志强、郑积仕 课程名称面向对象课程设计班级计算机0802座号24姓名谢茂财实验题目图形多态实验时间实验开始日期: 报告提交日期: 实验目的、要求编写一个程序,计算任给一个几何形体的面积和周长。几何形体可以是矩形、三角型、圆形、扇型、梯形。要求:(1)由用户通过键盘输入要处理的几何形体,每次输入一个几何形体。输入规则是:程序输出提示信息,请用户选择要处理的几何形体的类型。如果输入字母“E”,表示要退出程序的运行,根据用户选择的几何形体类型,输出提示信息,请用户输入几何形体的描述数据。例如

2、圆形的中心点坐标和半径。要求在提示信息中说明输入数据的格式。由程序根据规定的格式读入数据,如果输入数据的格式不对、或错误(例如把一个负数作为圆形的半径输入),要输出提示信息请求用户输入正确的数据、并再次读入。(2)在用户输入一个几何形体后,程序输出该几何形体的面积和周长,要求在输出中注明哪个数据是面积、哪个数据是周长。然后回到上一步,继续处理新的几何形体,直到用户选择退出程序运行为止。 (3)在基类中加两个虚函数setfromfile(),printtofile()分别用于文件读写,文件统一后缀.geo,在输入文件名时不必输入。向文件输出时注意在每个输出后要输出 或n,否则从文件输入时会出错。

3、从文件输入时,只能屏幕输出,输出结果是按周长大小排序的。而从键盘输入时可以选择是屏幕输出还是文件输出,但都是按面积大小排序的。实验设计内容1、 设计说明程序共7个类,抽象类base、类point、以及5个图形类;抽象类中有4个纯虚函数,并派生出5个图形类,以实现多态;类point的对象作为图形类的成员。2、 流程图类的关系图: Base -area()=0:float/-girth()=0:float -setfromfile()=0:void -printftofile()=0:void tri Rec 继承 Cir Sca Tra -a,b,c:point -A:point/h,l:flo

4、at +Rec() -a:point/r:float -a:point/r,b:float -a:point/l1,l2,h,l,r:float +tri() (同base) +cir() +sca() +tra (同base) (同base) (同base) (同base) point -x,y:float +point()/getx()/gety()流程图: MAIN MENU Rectangle Triangle Circle Scall Trape H,L H,L H,L H,L H,L PRINTTOFILE LOAD SORT OUTPUT记录每次实验结果以及分析情况开始界面:矩形

5、:三角形:圆:扇形:梯形:文件输出:总结以及心得体会指导老师评阅意见指导老师: 年 月 日填写内容时,可把表格扩大。实验的源程序代码(要有注释)附在表后。/ 11.cpp : Defines the entry point for the console application./#include iostream.h/#include stdafx.h#include iostream.h#include #include string.h#include #define PI 3.14159using namespace std;class Basepublic:virtual float

6、 Area()=0;virtual float Girth()=0;virtual void setfromfile()=0;virtual void printtofile()=0;class Pointprivate:float x,y;public:Point(float x=0.0,float y=0.0):x(x),y(y)float getx()return x; float gety()return y;class Rec:public Base /矩形 private:Point a;float l,h;public:Rec(Point a=NULL,float h=0,flo

7、at l=0):a(a),h(h),l(l)float Area();float Girth();void setfromfile();void printtofile();float Rec:Area()return h*l; float Rec:Girth()return 2*(l+h);void Rec:setfromfile()char s20;coutendl请输入你要导出的文件名!s;ifstream file(s);strcat(s,.geo);float a,l;file.read(reinterpret_cast(&a),sizeof(a); file.read(reinte

8、rpret_cast(&l),sizeof(l);file.close();coutal;void Rec:printtofile()char s20;coutendl请输入你要保存的文件名!s;ofstream file(s,ios_base:app|ios_base:binary);strcat(s,.geo);float a,l;a=Area();l=Girth();file.write(reinterpret_cast(&a),sizeof(a); file.write(reinterpret_cast(&l),sizeof(l);file.close();class Tri:publ

9、ic Base /三角形 private:Point a,b,c;public: Tri(Point a=NULL,Point b=NULL,Point c=NULL):a(a),b(b),c(c)float Area();float Girth();void setfromfile();void printtofile();float Tri:Area() float l1=sqrt(a.getx()-b.getx()*(a.getx()-b.getx()+(a.gety()-b.gety()*(a.gety()-b.gety(); float l2=sqrt(a.getx()-c.getx

10、()*(a.getx()-c.getx()+(a.gety()-c.gety()*(a.gety()-c.gety(); float l3=sqrt(c.getx()-b.getx()*(c.getx()-b.getx()+(c.gety()-b.gety()*(c.gety()-b.gety(); if(l1+l2=l3|l2+l3=l1|l1+l3=l2) cout该三个点不能构成三角形endl; return 0; else float l=(l1+l2+l3)/2; return sqrt(l*(l-l1)*(l-l2)*(l-l3);float Tri:Girth() float l

11、1=sqrt(a.getx()-b.getx()*(a.getx()-b.getx()+(a.gety()-b.gety()*(a.gety()-b.gety(); float l2=sqrt(a.getx()-c.getx()*(a.getx()-c.getx()+(a.gety()-c.gety()*(a.gety()-c.gety(); float l3=sqrt(c.getx()-b.getx()*(c.getx()-b.getx()+(c.gety()-b.gety()*(c.gety()-b.gety(); if(l1+l2=l3|l2+l3=l1|l1+l3=l2) cout该三

12、个点不能构成三角形endl; return 0; else return l1+l2+l3;void Tri:setfromfile()char s20;coutendl请输入你要导出的文件名!s;ifstream file(s);strcat(s,.geo);float a,l;file.read(reinterpret_cast(&a),sizeof(a); file.read(reinterpret_cast(&l),sizeof(l);file.close();coutal;void Tri:printtofile()char s20;coutendl请输入你要保存的文件名!s;ofs

13、tream file(s,ios_base:app|ios_base:binary);strcat(s,.geo);float a,l;a=Area();l=Girth(); file.write(reinterpret_cast(&a),sizeof(a); file.write(reinterpret_cast(&l),sizeof(l);file.close();class Cir:Base /圆形 private:Point a;float r;public: Cir(Point a=NULL,float r=0):r(r)float Area();float Girth();void

14、 setfromfile();void printtofile();float Cir:Area()return PI*r*r;float Cir:Girth()return 2*PI*r;void Cir:setfromfile()char s20;coutendl请输入你要导出的文件名!s;ifstream file(s);strcat(s,.geo);float a,l;file.read(reinterpret_cast(&a),sizeof(a); file.read(reinterpret_cast(&l),sizeof(l);file.close();coutal;void Ci

15、r:printtofile()char s20;coutendl请输入你要保存的文件名!s;ofstream file(s,ios_base:app|ios_base:binary);strcat(s,.geo);float a,l;a=Area();l=Girth();file.write(reinterpret_cast(&a),sizeof(a); file.write(reinterpret_cast(&l),sizeof(l);file.close();class Sca:public Base /扇形 private:Point a;float r,b;public:Sca(Poi

16、nt a=NULL,float r=0,float b=0):a(a),r(r),b(b)float Area();float Girth();void setfromfile();void printtofile();float Sca:Area()return b/360*PI*r*r;float Sca:Girth()return 2*r+b/360*2*PI*r;void Sca:setfromfile()char s20;coutendl请输入你要导出的文件名!s;ifstream file(s);strcat(s,.geo);float a,l;file.read(reinterp

17、ret_cast(&a),sizeof(a); file.read(reinterpret_cast(&l),sizeof(l);file.close();coutal;void Sca:printtofile()char s20;coutendl请输入你要保存的文件名!s;ofstream file(s,ios_base:app|ios_base:binary);strcat(s,.geo);float a,l;a=Area();l=Girth();file.write(reinterpret_cast(&a),sizeof(a); file.write(reinterpret_cast(&

18、l),sizeof(l);file.close();class Tra /梯形 private:Point a;float l1,l2,h,l,r;public:Tra(Point a=NULL,float l=0,float r=0,float l1=0,float l2=0,float h=0):a(a),l(l),r(r),l1(l1),l2(l2),h(h)float Area();float Girth();void setfromfile();void printtofile();float Tra:Area()return (l1+l2)/2*h;float Tra:Girth(

19、)return l1+l2+l+r;void Tra:setfromfile()char s20;coutendl请输入你要导出的文件名!s;ifstream file(s);strcat(s,.geo);float a,l;file.read(reinterpret_cast(&a),sizeof(a); file.read(reinterpret_cast(&l),sizeof(l);file.close();coutal;void Tra:printtofile()char s20;coutendl请输入你要保存的文件名!s;ofstream file(s,ios_base:app|io

20、s_base:binary);strcat(s,.geo);float a,l;a=Area();l=Girth();file.write(reinterpret_cast(&a),sizeof(a); file.write(reinterpret_cast(&l),sizeof(l);file.close();int Positive(float h,float l)if(h0&l0) return 1;else throw 0;int Positive(float r)if(r0) return 1;else throw 0;void Rectangle()coutendl请输入矩形的描述

21、数据:endlendl;float h,l,x,y; coutendlxy;coutendlhl;tryPositive(h,l);Point a(x,y);Rec m(a,h,l);cout面积:m.Area()周长:m.Girth();m.printtofile();catch(int) cout输入数据有误,请重输!endl; void Triangle()int x1,y1,x2,y2,x3,y3;coutendl请输入三角形的描述数据:endl;coutendlx1y1;coutendlx2y2; coutendlx3y3;Point a(x1,y1),b(x2,y2),c(x3,y

22、3); Tri t(a,b,c);cout面积:t.Area()周长:t.Girth()endl;t.printtofile(); void Circle()int x1,y1,r;coutendl请输入圆形的描述数据:endl;coutendlx1y1;coutendlr;Point a(x1,y1); Cir c(a,r);cout面积:c.Area()周长:c.Girth()endl;c.printtofile();void Scall()int x1,y1,r,b;coutendl请输入扇形的描述数据:endl;coutendlx1y1;coutendlr; coutendlb;Poi

23、nt a(x1,y1); Sca c(a,r,b);cout面积:c.Area()周长:c.Girth()endl;c.printtofile();void Trape()int x1,y1,l,r,l1,l2,h;coutendl请输入梯形的描述数据:endl;coutendlx1y1;coutendll1; coutendll2;coutendll; coutendlr;coutendlh;Point a(x1,y1); Tra t(a,l,r,l1,l2,h);cout面积:t.Area()周长:t.Girth()endl;t.printtofile();void Sort(float

24、a,float z,int count)for(int i=0;icount-1;i+)for(int j=i;jcount;j+)if(ajai)float t=ai;ai=aj;aj=t;float m=zi;zi=zj;zj=m;void Output(const float a,const float z,const int count)cout面积: 周长: endl; for(int i=0;icount;i+) coutai ziendl;void Load() cout请输入要显示的文件名!s;ifstream file(s);file.seekg(0);int count=0

25、;while(file)count+;file.read(reinterpret_cast(&ai),sizeof(ai); file.read(reinterpret_cast(&zi),sizeof(zi);i+; Sort(a,z,count-1);cout输出结果按面积大小排序endl;Output(a,z,count-1);void Menu() while(1)coutendl欢迎进入几何图形世界endlendl; cout | A:矩形世界 |endl; cout | B:三角型世界 |endl; cout | C:圆形世界 |endl; cout | D:扇型世界 |endl;

26、 cout | E:梯形世界 |endl; cout | F:从文件输出 |endl; cout | G:退出 |endl;coutendlendl; cout请选择你要操作的图形代号:num;switch(num)case a:case A:Rectangle();break; case b:case B:Triangle();break;case c:case C:Circle();break;case d:case D:Scall();break;case e:case E:Trape();break;case f:case F:Load();break;case g: case G:exit(0);default:break;int main(int argc, char* argv)Menu();return 0;专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁