实验一文档格式.docx
《实验一文档格式.docx》由会员分享,可在线阅读,更多相关《实验一文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
3)Parallelogram
4)Trapezoid
5)Diamond
6)List
其中,前五个类用于描述五种形体。
五种形体不用顶点坐标的表示形式,而只是简单地用它们的特征值表示。
例如:
矩形、平行四边形用长和高表示;
正方形用边长表示;
梯形用两条平行边长和高表示;
菱形用两条对象线长表示。
要求为这五种形体编写相应的类,类中包括至少如下数据成员和成员函数:
1)特征值,例如长和宽等;
2)stringname;
用于存储形体的类别。
类别的名字就是类的名字。
Rect类的类别名就是“Rectangle”;
3)doublearea();
用于求形体的面积;
4)voiddraw();
用于绘制形体。
不要求用图形的方式画图形,只需要简单地打印出形体的类别和特征值;
5)构造(包括拷贝构造)函数和析构函数。
构造函数要带有相应的参数以能够用指定特征值初始化形体对象。
此外,List类用于存储各种形体。
形体的产生可以通过随机的方式完成。
不过,List类的push_back()成员的代码需要自行完成。
附件中给出了List类的大部分代码。
重温过程实际上就是遍历List类对象的过程。
这个过程可能有些复杂,附件中也给出了遍历的示例代码。
附件中给出了其它需要的示例代码,以及解题思路,请参阅。
注:
请将此实验编写的代码完整保存,此后的两项实验都要以本次实验的代码为基础。
实验四属于选作实验。
七、实验器材(设备、元器件):
PC机一台,装有C/C++语言集成开发环境。
八、实验步骤:
#include<
stdio.h>
iostream>
string>
cstdlib>
ctime>
usingnamespacestd;
classQuadrangle
{
public:
stringname;
//形体的标识
};
typedefQuadrangle*QUADPTR;
classRect
//形体的标识(矩形)
Rect(intw=5,inth=7,stringnm="
Rectangle"
)
{
name=nm;
height=h;
width=w;
}
~Rect(){}
voiddraw()const;
doublearea()const;
stringwhat()const;
int&
Width();
//获取矩形的宽。
如果是梯形,还需要一个成员int&
Width2()来获取另一条平行边的长度
Height();
//获取矩形的高
private:
intwidth,height;
//高和宽
voidRect:
:
draw()const
cout<
<
what()<
"
width="
<
width<
"
height="
height<
endl;
}
stringRect:
what()const
returnname;
doubleRect:
area()const
returnwidth*height;
classSqu
//形体的标识(正方形)
Squ(intlength1=5,stringnm="
Square"
name=nm;
length=length1;
~Squ(){}
getlength();
//获取正方形的边长。
intlength;
//边长
voidSqu:
cout<
length:
="
length<
stringSqu:
doubleSqu:
returnlength*length;
classPara
//形体的标识(平行四边形)
Para(intw=5,inth=7,stringnm="
Parallelogram"
~Para(){}
//获取平行四边形的长。
//获取平行四边形的高
intwidth,height;
//高和长
voidPara:
stringPara:
doublePara:
classDia
//形体的标识(菱形)
Dia(intlength=5,intlength3=7,stringnm="
Diamond"
{
length1=length;
length2=length3;
~Dia(){}
double&
Length1();
//获取菱形的对角线的长。
Length2();
doublelength1,length2;
voidDia:
length1="
length1<
length2="
length2<
stringDia:
doubleDia:
return(length1*length2)/2;
classTra
//形体的标识(梯形)
Tra(intw1=5,intw2=4,inth=7,stringnm="
Trapezoid"
width1=w1;
width2=w2;
height=h;
~Tra()
{}
double&
Width1();
//梯形的长。
Width2();
//获取梯形的高
doublewidth1,width2,height;
voidTra:
width1="
width1<
width2="
width2<
height<
stringTra:
doubleTra:
return(width1+width2)*height/2;
typedefvoid(*ACCESSFUN)(QUADPTR);
classList
struct_Node
QUADPTRdata;
_Node*next;
}*head,*tail;
//链表的头尾指针
typedef_Node*_range;
size_tlen;
//链表中节点的数目,即链表的长度
List();
//平凡构造函数
List(constList&
l);
//复制构造函数
~List();
voidpush_back(constQUADPTRquad);
//尾部添加
size_tsize();
//获取链表的长度
voidtraverse(ACCESSFUNf);
//遍历
List:
List():
head(NULL),tail(NULL){}
List(constList&
l)
head=tail=NULL;
_Node*p=l.head;
while(p!
=NULL)
this->
push_back(p->
data);
p=p->
next;
~List()
_Node*p=head,*q;
q=p;
deleteq;
voidList:
push_back(constQUADPTRquad)
_Node*p=new_Node;
p->
data=const_cast<
QUADPTR>
(quad);
next=NULL;
if(tail==NULL)
head=tail=p;
else
tail->
next=p;
tail=p;
size_tList:
size()
{
_Node*p=head;
size_tlen=0;
while(p!
++len;
returnlen;
traverse(ACCESSFUNf)
_rangep=head;
//请自行添加初始化部分
while(p!
=NULL)
f(p->
//请自行添加指针移动部分
voidaccess(QUADPTRquad)
if(quad->
name=="
Rect*p=reinterpret_cast<
Rect*>
(quad);
p->
draw();
cout<
area="
area()<
elseif(quad->
name=="
Squ*p=reinterpret_cast<
Squ*>
Para*p=reinterpret_cast<
Para*>
Dia*p=reinterpret_cast<
Dia*>
Tra*p=reinterpret_cast<
Tra*>
intmain()
Listlist;
srand(unsigned(time(NULL)));
小学生学习进程"
endl;
done:
inti=(rand()%5);
if(i==0)
Rect*re=newRect();
re->
list.push_back(reinterpret_cast<
QUADPTR>
(re));
cout<
输入其面积计算结果:
;
for(;
doubleanswer=0.0;
cin>
>
answer;
if(answer!
=re->
area())
cout<
结果错误,请重新计算:
else
{
结果正确"
break;
}
}
elseif(i==1)
Dia*di=newDia();
di->
(di));
=di->
elseif(i==2)
Para*pa=newPara();
pa->
(pa));
=pa->
elseif(i==3)
Tra*tr=newTra();
tr->
(tr));
=tr->
elseif(i==4)
Squ*sq=newSqu();
sq->
(sq));
=sq->
intanswer1;
小朋友是要继续学习呢还是开始复习呢?
(如果继续学习的话请输入1,如果是想要复习的话请输入2):
cin>
answer1;
if(answer1==1)
gotodone;
elseif(answer1==2)
小学生复习进程"
list.traverse(access);
system("
pause"
);
return0;
九、实验数据及结果分析:
十、实验结论:
实验运行成功,通过随机产生五种形体,让小学生根据其给定数据计算形体面积,并验证其正确性。
十一、总结及心得体会:
通过此次实验,编写一些简单的程序,使我更好的掌握数据封装的概念,并且熟练编写C++类,培养理论联系实际和自主学习的能力。