实验一文档格式.docx

上传人:b****6 文档编号:20023751 上传时间:2023-01-16 格式:DOCX 页数:16 大小:66.42KB
下载 相关 举报
实验一文档格式.docx_第1页
第1页 / 共16页
实验一文档格式.docx_第2页
第2页 / 共16页
实验一文档格式.docx_第3页
第3页 / 共16页
实验一文档格式.docx_第4页
第4页 / 共16页
实验一文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

实验一文档格式.docx

《实验一文档格式.docx》由会员分享,可在线阅读,更多相关《实验一文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

实验一文档格式.docx

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++类,培养理论联系实际和自主学习的能力。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1