您好,欢迎访问三七文档
当前位置:首页 > 幼儿/小学教育 > 小学教育 > C++几何图形面积周长计算
1福建工程学院计算机与信息科学系实验报告10–11学年第1学期任课老师:林志强、郑积仕课程名称面向对象课程设计班级计算机0802座号24姓名谢茂财实验题目图形多态实验时间实验开始日期:报告提交日期:实验目的、要求编写一个程序,计算任给一个几何形体的面积和周长。几何形体可以是矩形、三角型、圆形、扇型、梯形。要求:(1)由用户通过键盘输入要处理的几何形体,每次输入一个几何形体。输入规则是:程序输出提示信息,请用户选择要处理的几何形体的类型。如果输入字母“E”,表示要退出程序的运行,根据用户选择的几何形体类型,输出提示信息,请用户输入几何形体的描述数据。例如圆形的中心点坐标和半径。要求在提示信息中说明输入数据的格式。由程序根据规定的格式读入数据,如果输入数据的格式不对、或错误(例如把一个负数作为圆形的半径输入),要输出提示信息请求用户输入正确的数据、并再次读入。(2)在用户输入一个几何形体后,程序输出该几何形体的面积和周长,要求在输出中注明哪个数据是面积、哪个数据是周长。然后回到上一步,继续处理新的几何形体,直到用户选择退出程序运行为止。(3)在基类中加两个虚函数setfromfile(),printtofile()分别用于文件读写,文件统一后缀.geo,在输入文件名时不必输入。向文件输出时注意在每个输出后要输出''或'\n',否则从文件输入时会出错。从文件输入时,只能屏幕输出,输出结果是按周长大小排序的。而从键盘输入时可以选择是屏幕输出还是文件输出,但都是按面积大小排序的。实验设计内容21、设计说明程序共7个类,抽象类base、类point、以及5个图形类;抽象类中有4个纯虚函数,并派生出5个图形类,以实现多态;类point的对象作为图形类的成员。2、流程图类的关系图:Base-area()=0:float/-girth()=0:float-setfromfile()=0:void-printftofile()=0:voidtriRec继承CirScaTra-a,b,c:point-A:point/h,l:float+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()流程图:MAINMENURectangleTriangleCircleScallTrapeH,LH,LH,LH,LH,LPRINTTOFILELOADSORTOUTPUT3记录每次实验结果以及分析情况开始界面:矩形:三角形:圆:4扇形:梯形:文件输出:5总结以及心得体会指导老师评阅意见指导老师:年月日填写内容时,可把表格扩大。实验的源程序代码(要有注释)附在表后。//11.cpp:Definestheentrypointfortheconsoleapplication.//#includeiostream.h//#includestdafx.h#includeiostream.h#includefstream#includestring.h#includemath.h#definePI3.14159usingnamespacestd;classBase{public:virtualfloatArea()=0;virtualfloatGirth()=0;virtualvoidsetfromfile()=0;6virtualvoidprinttofile()=0;};classPoint{private:floatx,y;public:Point(floatx=0.0,floaty=0.0):x(x),y(y){}floatgetx(){returnx;}floatgety(){returny;}};classRec:publicBase//矩形{private:Pointa;floatl,h;public:Rec(Pointa=NULL,floath=0,floatl=0):a(a),h(h),l(l){}floatArea();floatGirth();voidsetfromfile();voidprinttofile();};floatRec::Area(){returnh*l;}floatRec::Girth(){return2*(l+h);}voidRec::setfromfile(){chars[20];coutendl请输入你要导出的文件名!endl;cins;ifstreamfile(s);strcat(s,.geo);floata,l;file.read(reinterpret_castchar*(&a),sizeof(a));file.read(reinterpret_castchar*(&l),sizeof(l));file.close();coutal;7}voidRec::printtofile(){chars[20];coutendl请输入你要保存的文件名!endl;cins;ofstreamfile(s,ios_base::app|ios_base::binary);strcat(s,.geo);floata,l;a=Area();l=Girth();file.write(reinterpret_castchar*(&a),sizeof(a));file.write(reinterpret_castchar*(&l),sizeof(l));file.close();}classTri:publicBase//三角形{private:Pointa,b,c;public:Tri(Pointa=NULL,Pointb=NULL,Pointc=NULL):a(a),b(b),c(c){}floatArea();floatGirth();voidsetfromfile();voidprinttofile();};floatTri::Area(){floatl1=sqrt((a.getx()-b.getx())*(a.getx()-b.getx())+(a.gety()-b.gety())*(a.gety()-b.gety()));floatl2=sqrt((a.getx()-c.getx())*(a.getx()-c.getx())+(a.gety()-c.gety())*(a.gety()-c.gety()));floatl3=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;return0;}else{floatl=(l1+l2+l3)/2;8returnsqrt(l*(l-l1)*(l-l2)*(l-l3));}}floatTri::Girth(){floatl1=sqrt((a.getx()-b.getx())*(a.getx()-b.getx())+(a.gety()-b.gety())*(a.gety()-b.gety()));floatl2=sqrt((a.getx()-c.getx())*(a.getx()-c.getx())+(a.gety()-c.gety())*(a.gety()-c.gety()));floatl3=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;return0;}elsereturnl1+l2+l3;}voidTri::setfromfile(){chars[20];coutendl请输入你要导出的文件名!endl;cins;ifstreamfile(s);strcat(s,.geo);floata,l;file.read(reinterpret_castchar*(&a),sizeof(a));file.read(reinterpret_castchar*(&l),sizeof(l));file.close();coutal;}voidTri::printtofile(){chars[20];coutendl请输入你要保存的文件名!endl;cins;ofstreamfile(s,ios_base::app|ios_base::binary);strcat(s,.geo);floata,l;a=Area();l=Girth();9file.write(reinterpret_castchar*(&a),sizeof(a));file.write(reinterpret_castchar*(&l),sizeof(l));file.close();}classCir:Base//圆形{private:Pointa;floatr;public:Cir(Pointa=NULL,floatr=0):r(r){}floatArea();floatGirth();voidsetfromfile();voidprinttofile();};floatCir::Area(){returnPI*r*r;}floatCir::Girth(){return2*PI*r;}voidCir::setfromfile(){chars[20];coutendl请输入你要导出的文件名!endl;cins;ifstreamfile(s);strcat(s,.geo);floata,l;file.read(reinterpret_castchar*(&a),sizeof(a));file.read(reinterpret_castchar*(&l),sizeof(l));file.close();coutal;}voidCir::printtofile(){chars[20];coutendl请输入你要保存的文件名!endl;10cins;ofstreamfile(s,ios_base::app|ios_base::binary);strcat(s,.geo);floata,l;a=Area();l=Girth();file.write(reinterpret_castchar*(&a),sizeof(a));file.write(reinterpret_castchar*(&l),sizeof(l));file.close();}classSca:publicBase//扇形{private:Pointa;floatr,b;public:Sca(Pointa=NULL,floatr=0,floatb=0):a(a),r(r),b(b){}floatArea();floatGirth();voidsetfromfile();voidprinttofile();};floatSca::Area(){returnb/360*PI*r*r;}floatSca::Girth(){return2*r+b/360*2*PI*r;}voidSca::setfromfile(){chars[20];coutendl请输入你要导出的文件名!endl;cins;ifstreamfile(s);strcat(s,.geo);floata,l;file.read(reinterpret_castchar*(&a),siz
本文标题:C++几何图形面积周长计算
链接地址:https://www.777doc.com/doc-6039126 .html