面向?qū)ο蟪绦蛟O(shè)計(jì)課程實(shí)驗(yàn)報(bào)告_第1頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)課程實(shí)驗(yàn)報(bào)告_第2頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)課程實(shí)驗(yàn)報(bào)告_第3頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)課程實(shí)驗(yàn)報(bào)告_第4頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)課程實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——面向?qū)ο蟪绦蛟O(shè)計(jì)課程實(shí)驗(yàn)報(bào)告課

實(shí)

驗(yàn)

報(bào)

課程名稱:

面向?qū)ο蟪绦蛟O(shè)計(jì)

院院

系:

專業(yè)班級(jí):

學(xué)

號(hào):

名:

指導(dǎo)教師:

目目

錄試驗(yàn)一..面向過(guò)程的整型棧編程0

1.需求分析0

11.1題目要求0

21.2需求分析0

2.系統(tǒng)設(shè)計(jì)1

12.1概要設(shè)計(jì)1

22.2詳細(xì)設(shè)計(jì)2

4.軟件測(cè)試3

5.特點(diǎn)與不足3

15.1技術(shù)特點(diǎn)3

25.2不足和改進(jìn)的建議4

6.過(guò)程和體會(huì)4

16.1遇到的主要問(wèn)題和解決方法4

26.2課程設(shè)計(jì)的體會(huì)4

7.源碼和說(shuō)明4

17.1文件清單及其功能說(shuō)明4

27.2用戶使用說(shuō)明書(shū)4

37.3源代碼4

試驗(yàn)二..面向?qū)ο蟮恼蜅>幊?1

1.需求分析11

11.1題目要求11

21.2需求分析11

2.系統(tǒng)設(shè)計(jì)12

12.1概要設(shè)計(jì)12

22.2詳細(xì)設(shè)計(jì)12

3.軟件開(kāi)發(fā)13

4.軟件測(cè)試13

5.特點(diǎn)與不足13

15.1技術(shù)特點(diǎn)13

25.2不足和改進(jìn)的建議14

6.過(guò)程和體會(huì)14

16.1遇到的主要問(wèn)題和解決方法14

26.2課程設(shè)計(jì)的體會(huì)14

7.源碼和說(shuō)明14

17.1文件清單及其功能說(shuō)明14

27.2用戶使用說(shuō)明書(shū)14

37.3源代碼14

試驗(yàn)三..基于算符重載的整型棧編程18

1.需求分析18

11.1題目要求18

21.2需求分析18

2.系統(tǒng)設(shè)計(jì)19

12.1概要設(shè)計(jì)19

22.2詳細(xì)設(shè)計(jì)19

3.軟件開(kāi)發(fā)19

4.軟件測(cè)試19

5.特點(diǎn)與不足20

15.1技術(shù)特點(diǎn)20

25.2不足和改進(jìn)的建議20

6.過(guò)程和體會(huì)20

16.1遇到的主要問(wèn)題和解決方法20

26.2課程設(shè)計(jì)的體會(huì)20

7.源碼和說(shuō)明20

17.1文件清單及其功能說(shuō)明20

27.2用戶使用說(shuō)明書(shū)20

37.3源代碼20

試驗(yàn)四..面向?qū)ο蟮恼完?duì)列編程24

1.需求分析24

11.1題目要求24

21.2需求分析24

2.系統(tǒng)設(shè)計(jì)25

3.軟件開(kāi)發(fā)25

4.軟件測(cè)試25

5.特點(diǎn)與不足25

15.1技術(shù)特點(diǎn)25

25.2不足和改進(jìn)的建議25

6.過(guò)程和體會(huì)25

16.1遇到的主要問(wèn)題和解決方法25

26.2課程設(shè)計(jì)的體會(huì)26

7.源碼和說(shuō)明26

17.1文件清單及其功能說(shuō)明26

27.2用戶使用說(shuō)明書(shū)26

37.3源代碼26

試驗(yàn)五..基于組合的整型隊(duì)列編程30

1.需求分析30

11.1題目要求30

21.2需求分析30

2.系統(tǒng)設(shè)計(jì)30

3.軟件開(kāi)發(fā)31

4.軟件測(cè)試31

5.特點(diǎn)與不足31

15.1技術(shù)特點(diǎn)31

25.2不足和改進(jìn)的建議31

6.過(guò)程和體會(huì)31

16.1遇到的主要問(wèn)題和解決方法31

26.2課程設(shè)計(jì)的體會(huì)31

7.源碼和說(shuō)明32

17.1文件清單及其功能說(shuō)明32

27.2用戶使用說(shuō)明書(shū)32

37.3源代碼32

試驗(yàn)六..基于繼承的整型隊(duì)列編程36

1.需求分析36

11.1題目要求36

21.2需求分析37

2.系統(tǒng)設(shè)計(jì)37

3.軟件開(kāi)發(fā)37

4.軟件測(cè)試37

5.特點(diǎn)與不足37

15.1技術(shù)特點(diǎn)37

25.2不足和改進(jìn)的建議37

6.過(guò)程和體會(huì)38

16.1遇到的主要問(wèn)題和解決方法38

26.2課程設(shè)計(jì)的體會(huì)38

7.源碼和說(shuō)明38

17.1文件清單及其功能說(shuō)明38

27.2用戶使用說(shuō)明書(shū)38

37.3源代碼38

試驗(yàn)一.面向過(guò)程的整型棧編程1.需求分析

11.1題目要求

整型棧是一種先進(jìn)后出的存儲(chǔ)結(jié)構(gòu),對(duì)其進(jìn)行的操作尋常包括判斷棧是否為空、向棧頂添加一個(gè)整型元素、出棧等。整型棧類型及其操作函數(shù)采用非面向?qū)ο蟮募僀語(yǔ)言定義,請(qǐng)將完成上述操作的所有函數(shù)采用面向過(guò)程的方法編程,然后寫(xiě)一個(gè)main函數(shù)對(duì)棧的所有操作函數(shù)進(jìn)行測(cè)試。

structSTACK{

int

*elems;//申請(qǐng)內(nèi)存用于存放棧的元素

int

max;

//棧能存放的最大元素個(gè)數(shù)

int

pos;

//棧實(shí)際已有元素個(gè)數(shù),??諘r(shí)pos=0;};voidinitSTACK(STACK*constp,intm);//初始化p指空棧:可存m個(gè)元素voidinitSTACK(STACK*constp,constSTACKs);//用s初始化p指空棧int

size(constSTACK*constp);//返回p指的棧的最大元素個(gè)數(shù)maxint

howMany(constSTACK*constp);//返回p指的棧的實(shí)際元素個(gè)數(shù)posint

getelem(constSTACK*constp,intx);//取下標(biāo)x處的棧元素STACK*constpush(STACK*constp,inte);

//將e入棧,并返回pSTACK*constpop(STACK*constp,inte);//出棧到e,并返回pSTACK*constassign(STACK*constp,constSTACKs);//賦給p指棧,返回pvoidprint(constSTACK*constp);

//打印p指向的棧元素voiddestroySTACK(STACK*constp);

//銷毀p指向的棧,釋放21.2需求分析

本試驗(yàn)需要實(shí)現(xiàn)棧的功能的操作,如元素的進(jìn)棧,連續(xù)進(jìn)棧,出棧和連續(xù)出棧,所以需要設(shè)計(jì)兩個(gè)棧,在完成初始化后直接在程序里給定棧內(nèi)元素。

2.系統(tǒng)設(shè)計(jì)

12.1概要設(shè)計(jì)

函數(shù)結(jié)構(gòu)圖見(jiàn)圖1.1棧初始化棧返回max,pos取棧內(nèi)元素入棧、出棧打印棧銷毀棧圖1.1總體流程圖見(jiàn)圖1.2開(kāi)始初始化是否繼續(xù)入棧是否繼續(xù)出棧銷毀棧終止YNYN圖1.2

22.2詳細(xì)設(shè)計(jì)

voidinitSTACK(STACK*constp,intm)入口參數(shù):intm出口參數(shù):無(wú)功能:初始化棧,可存m個(gè)元素

voidinitSTACK(STACK*constp,constSTACKs)入口參數(shù):constSTACKs出口參數(shù):無(wú)功能:用s初始化p指空棧int

size(constSTACK*constp)

入口參數(shù):無(wú)出口參數(shù):intmax功能:返回p指的棧的最大元素個(gè)數(shù)maxint

howMany(constSTACK*constp)

入口參數(shù):無(wú)出口參數(shù):intpos功能:返回p指的棧的實(shí)際元素個(gè)數(shù)posint

getelem(constSTACK*constp,intx)

入口參數(shù):intx出口參數(shù):elem[m]功能:取下標(biāo)x處的棧元素STACK*constpush(STACK*constp,inte)

入口參數(shù):inte出口參數(shù):(*this)功能:將e入棧,并返回pSTACK*constpop(STACK*constp,inte)

入口參數(shù):inte出口參數(shù):(*this)功能:出棧到e,并返回pSTACK*constassign(STACK*constp,constSTACKs)

入口參數(shù):STACKs出口參數(shù):(*this)功能:賦s給p指棧,返回pvoidprint(constSTACK*constp)

入口參數(shù):無(wú)出口參數(shù):無(wú)功能:打印p指向的棧元素voiddestroySTACK(STACK*constp)

入口參數(shù):

出口參數(shù):

功能:銷毀p指向的棧,釋放3.軟件開(kāi)發(fā)

在Codeblocks編譯環(huán)境下,使用C++語(yǔ)言編寫(xiě)。

4.軟件測(cè)試

測(cè)試結(jié)果見(jiàn)圖1.3

圖1.35.特點(diǎn)與不足

15.1技術(shù)特點(diǎn)

完成了試驗(yàn)的所有要求,沒(méi)有錯(cuò)誤的地方。

25.2不足和改進(jìn)的建議

沒(méi)有做人機(jī)交互界面,無(wú)法自由選擇入棧的數(shù)據(jù);同時(shí)解釋較少,對(duì)于程序不了解的人可能需要花費(fèi)更多時(shí)間去了解。

6.過(guò)程和體會(huì)

16.1遇到的主要問(wèn)題和解決方法

輸出結(jié)果數(shù)字與預(yù)計(jì)不同,檢查后發(fā)現(xiàn)原因是變量初始值未設(shè)置。

26.2課程設(shè)計(jì)的體會(huì)

本次試驗(yàn)主要還是通過(guò)回想C語(yǔ)言中棧的知識(shí)完成在C++上的編程,所以總體過(guò)程沒(méi)有出現(xiàn)太大的問(wèn)題;同時(shí)也對(duì)const變量有了進(jìn)一步的認(rèn)識(shí)。

7.源碼和說(shuō)明

17.1文件清單及其功能說(shuō)明

experiment1.cpp源碼experiment1.exe可執(zhí)行文件。

27.2用戶使用說(shuō)明書(shū)

experiment1.cpp是程序的源碼,可通過(guò)修改其中main函數(shù)中的變量來(lái)測(cè)試各個(gè)函數(shù)。

37.3源代碼

#includelt;stdio.hgt;#includelt;malloc.hgt;#includelt;stdlib.hgt;

structSTACK{

int

*elems;//申請(qǐng)內(nèi)存用于存放棧的元素

int

max;

//棧能存放的最大元素個(gè)數(shù)

int

pos;

//棧實(shí)際已有元素個(gè)數(shù),??諘r(shí)pos=0;

};voidinitSTACK(STACK*constp,intm);//初始化p指向的棧:最多m個(gè)元素voidinitSTACK(STACK*constp,constSTACKs);//用棧s初始化p指向的棧int

size(constSTACK*constp);

//返回p指向的棧的最大元素個(gè)數(shù)maxint

howMany(constSTACK*constp);//返回p指向的棧的實(shí)際元素個(gè)數(shù)posint

getelem(constSTACK*constp,intx);//取下標(biāo)x處的棧元素STACK*constpush(STACK*constp,inte);

//將e入棧,并返回pSTACK*constpop(STACK*constp,inte);

//出棧到e,并返回pSTACK*constassign(STACK*constp,constSTACKs);//賦s給p指的棧,并返回pvoidprint(constSTACK*constp);

//打印p指向的棧voiddestroySTACK(STACK*constp);

//銷毀p指向的棧

intmain(intargc,char*argv[]){

STACK*s1=(STACK*)malloc(sizeof(STACK));

STACK*s2=(STACK*)malloc(sizeof(STACK));

initSTACK(s1,10);

push(s1,1);

push(s1,2);

push(push(s1,3),4);

initSTACK(s2,*s1);

print(s2);

printf(quot;棧s1:\nquot;);

print(s1);

//assign(s2,*s1);

printf(quot;棧s2:\nquot;);

print(s2);

inta,b,c;

a=size(s1);

printf(quot;棧的最大元素個(gè)數(shù)是%d\nquot;,a);

b=

howMany(s1);

printf(quot;棧的實(shí)際元素個(gè)數(shù)是%d\nquot;,b);

c=

getelem(s1,3);

printf(quot;3處棧元素是是%d\nquot;,c);

intx,y,z;

pop(s2,x);

pop(pop(s2,y),z);

printf(quot;x=%d,y=%d,z=%d\nquot;,x,y,z);

destroySTACK(s2);

destroySTACK(s1);

getchar();

return0;}

voidinitSTACK(STACK*constp,intm)//初始化p指向的棧:最多m個(gè)元素{

p-gt;elems=(int*)malloc(m*sizeof(int*));

if(!p-gt;elems)

return;

p-gt;pos=0;

p-gt;max=m;

inti;

for(i=0;ilt;(p-gt;max);i++)

p-gt;elems[i]=0;}

voidinitSTACK(STACK*constp,constSTACKs)//用棧s初始化p指向的棧{

p-gt;elems=(int*)malloc((s.max)*sizeof(int));

p-gt;pos=s.pos;

p-gt;max=s.max;

inti;

for(i=0;ilt;(s.pos);i++)

{

p-gt;elems[i]=s.elems[i];

printf(quot;%d\nquot;,p-gt;elems[i]);

}}

int

size(constSTACK*constp)

//返回p指向的棧的最大元素個(gè)數(shù)max{

returnp-gt;max;}

int

howMany(constSTACK*constp)//返回p指向的棧的實(shí)際元素個(gè)數(shù)pos{

returnp-gt;pos;}

int

getelem(constSTACK*constp,intx)//取下標(biāo)x處的棧元素{

if(p==NULL)

returnNULL;

else

{

if(xgt;(p-gt;pos))

printf(quot;不存在元素\nquot;);

else

returnp-gt;elems[x];

}}

STACK*constpush(STACK*constp,inte)

//將e入棧,并返回p{

if(p==NULL)

returnNULL;

else

{

if((p-gt;pos)lt;=(p-gt;max))

{

p-gt;elems[p-gt;pos]=e;

p-gt;pos++;

returnp;

}

else

printf(quot;棧滿\nquot;);

}}

STACK*constpop(STACK*constp,inte)

//出棧到e,并返回p{

if(p==NULL)

returnNULL;

else

{

if((p-gt;pos)==0)

printf(quot;棧為空\(chéng)nquot;);

else

{

e=p-gt;elems[(p-gt;pos)-1];

(p-gt;pos)--;

returnp;

}

}}

STACK*constassign(STACK*constp,constSTACKs)//賦s給p指的棧,并返回p{

if(p==NULL||s==NULL)

{

returnNULL;

}

else

{

free(p-gt;elems);

//free(p);

//STACK*p=(STACK*)malloc(sizeof(STACK));

initSTACK(p,s);

returnp;

}}

voidprint(constSTACK*constp)

//打印p指向的棧{

inti;

if(p==NULL)

{

return;

}

elseif(p-gt;pos==0)

{

printf(quot;棧為空\(chéng)nquot;);

}

else

{

for(i=0;ilt;(p-gt;pos);i++)

{

printf(quot;%dquot;,p-gt;elems[i]);

}

printf(quot;\nquot;);

}}

voiddestroySTACK(STACK*constp)//銷毀p指向的棧{

free(p-gt;elems);

free(p);

printf(quot;棧已銷毀\nquot;);}

試驗(yàn)二.面向?qū)ο蟮恼蜅>幊?/p>

1.需求分析

11.1題目要求

整型棧是一種先進(jìn)后出的存儲(chǔ)結(jié)構(gòu),對(duì)其進(jìn)行的操作尋常包括判斷棧是否為空、向棧頂添加一個(gè)整型元素、出棧等。整型棧類型及其操作函數(shù)采用面向?qū)ο蟮腃++語(yǔ)言定義,請(qǐng)將完成上述操作的所有函數(shù)采用C++編程,然后寫(xiě)一個(gè)main函數(shù)對(duì)棧的所有操作函數(shù)進(jìn)行測(cè)試。

classSTACK{

int

*const

elems;//申請(qǐng)內(nèi)存用于存放棧的元素

const

int

max;//棧能存放的最大元素個(gè)數(shù)

int

pos;

//棧實(shí)際已有元素個(gè)數(shù),??諘r(shí)pos=0;public:STACK(intm);

//初始化棧:最多m個(gè)元素STACK(constSTACKs);//用棧s拷貝初始化棧int

size()const;

//返回棧的最大元素個(gè)數(shù)maxint

howMany()const;//返回棧的實(shí)際元素個(gè)數(shù)posint

getelem(intx)const;//取下標(biāo)x處的棧元素STACKpush(inte);

//將e入棧,并返回棧STACKpop(inte);

//出棧到e,并返回棧STACKassign(constSTACKs);//賦s給棧,并返回被賦值的棧voidprint()const;

//打印棧~STACK();

//銷毀棧};21.2需求分析

采用面向?qū)ο蟮腃++語(yǔ)言定義整型棧,對(duì)其進(jìn)行的操作尋常包括判斷棧是否為空、向棧頂添加一個(gè)整型元素、出棧等。

2.系統(tǒng)設(shè)計(jì)

12.1概要設(shè)計(jì)

首先需要定義一個(gè)類來(lái)實(shí)現(xiàn)棧,然后依次實(shí)現(xiàn)棧的各個(gè)功能,在主函數(shù)中給定一個(gè)棧然后,然后通過(guò)函數(shù)調(diào)用實(shí)現(xiàn)棧的功能。

22.2詳細(xì)設(shè)計(jì)

STACK(intm)

功能:初始化棧:最多m個(gè)元素返回值:無(wú)

STACK(constSTACKs)

功能:用棧s拷貝初始化棧返回值:無(wú)

int

size()const功能:返回棧的最大元素個(gè)數(shù)max返回值:最大元素個(gè)數(shù)max

int

howMany()const功能:返回棧的實(shí)際元素個(gè)數(shù)pos返回值:元素?cái)?shù)目pos

int

getelem(intx)const

功能:取下標(biāo)x處的棧元素返回值:下標(biāo)為x的元素

STACKpush(inte)功能:將e入棧返回值:棧的引用

STACKpop(inte)功能:出棧到e,并返回棧返回值:棧的引用

STACKassign(constSTACKs)

功能:使用棧s給棧p賦值返回值:棧的引用

voidprint()const功能:打印棧返回值:無(wú)

~STACK()

功能:銷毀棧返回值:無(wú)3.軟件開(kāi)發(fā)

在Codeblocks編譯環(huán)境下,使用C++語(yǔ)言編寫(xiě)。

4.軟件測(cè)試

測(cè)試結(jié)果見(jiàn)圖2.1

圖2.15.特點(diǎn)與不足

15.1技術(shù)特點(diǎn)

完成了初定目標(biāo),無(wú)其他特點(diǎn)。

25.2不足和改進(jìn)的建議

人機(jī)交互需要進(jìn)一步完善。

6.過(guò)程和體會(huì)

16.1遇到的主要問(wèn)題和解決方法

由于第一次使用c++面向?qū)ο缶帉?xiě)程序,開(kāi)始不明白對(duì)象的生成及使用。在和同學(xué)老師的溝通和交流中,逐漸學(xué)會(huì)了編程的方法。

26.2課程設(shè)計(jì)的體會(huì)

C++語(yǔ)言與C語(yǔ)言有好多相通的地方,所以其中的某些原理和方法可以相互借鑒,這樣就減少了在理解上的難度。

7.源碼和說(shuō)明

17.1文件清單及其功能說(shuō)明

experiment2.cpp源碼experiment2.exe可執(zhí)行文件。

27.2用戶使用說(shuō)明書(shū)

experiment2.cpp是程序的源碼,可通過(guò)修改其中main函數(shù)中的變量來(lái)測(cè)試各個(gè)函數(shù)。

37.3源代碼

#includelt;iostreamgt;#includelt;stringgt;usingnamespacestd;classSTACK{

int

*const

elems;//申請(qǐng)內(nèi)存用于存放棧的元素

const

int

max;//棧能存放的最大元素個(gè)數(shù)

int

pos;

//棧實(shí)際已有元素個(gè)數(shù),棧空時(shí)pos=0;public:STACK(intm);

//初始化棧:最多m個(gè)元素

STACK(constSTACKs);//用棧s拷貝初始化棧int

size()const;

//返回棧的最大元素個(gè)數(shù)maxint

howMany()const;//返回棧的實(shí)際元素個(gè)數(shù)posint

getelem(intx)const;//取下標(biāo)x處的棧元素STACKpush(inte);

//將e入棧,并返回棧STACKpop(inte);

//出棧到e,并返回棧STACKassign(constSTACKs);//賦s給棧,并返回被賦值的棧voidprint()const;

//打印棧~STACK();

//銷毀棧};STACK::STACK(intm):elems(newint[m]),max(m),pos(0){}STACK::STACK(constSTACKs):elems(newint[s.size()]),max(s.size()),pos(s.howMany()){

for(inti=0;ilt;pos;i++)

elems[i]=s.getelem(i);

coutlt;lt;quot;復(fù)制構(gòu)造成功quot;lt;lt;endl;};intSTACK::size()const{

returnmax;}intSTACK::howMany()const{

returnpos;}intSTACK::getelem(intx)const{

returnelems[x];}STACKSTACK::push(inte){

if(poslt;max)

{

elems[pos]=e;

pos++;

}

elsecoutlt;lt;quot;full\nquot;;

return*this;}STACKSTACK::pop(inte){

if(pos==0)

{

coutlt;lt;quot;emptystackquot;;return*this;

}

pos--;

e=elems[pos];

coutlt;lt;quot;出棧成功quot;;

return*this;}STACKSTACK::assign(constSTACKs){

inti;

deleteelems;//

elems=newint[s.size()];//

max=s.size();

pos=s.howMany();

for(i=0;ilt;s.howMany();i++)

{elems[i]=s.getelem(i);}

return*this;}voidSTACK::print()const{

inti;

coutlt;lt;quot;棧的元素為:quot;;

for(i=0;ilt;pos;i++)

coutlt;lt;elems[i]lt;lt;quot;

quot;;

coutlt;lt;endl;}STACK::~STACK(){

deleteelems;//

elems=0;

//

max=0;

pos=0;

coutlt;lt;quot;析構(gòu)完成quot;;}intmain(){

STACKs(7);

s.push(5);

s.push(7);

s.push(9);

s.push(11);

s.print();

inti;

s.pop(i);

coutlt;lt;quot;出棧元素quot;lt;lt;ilt;lt;endl;

STACKp(s);

coutlt;lt;quot;容量quot;lt;lt;p.size()lt;lt;endl;

coutlt;lt;quot;當(dāng)前元素?cái)?shù)目quot;lt;lt;p.howMany();}

試驗(yàn)三.基于算符重載的整型棧編程

1.需求分析

11.1題目要求

整型棧是一種先進(jìn)后出的存儲(chǔ)結(jié)構(gòu),對(duì)其進(jìn)行的操作尋常包括判斷棧是否為空、向棧頂添加一個(gè)整型元素、出棧等。整型棧類型及其操作函數(shù)采用面向?qū)ο蟮腃++語(yǔ)言定義,請(qǐng)將完成上述操作的所有函數(shù)采用C++編程,然后寫(xiě)一個(gè)main函數(shù)對(duì)棧的所有操作函數(shù)進(jìn)行測(cè)試。

classSTACK{

int

*const

elems;//申請(qǐng)內(nèi)存用于存放棧的元素

const

int

max;//棧能存放的最大元素個(gè)數(shù)

int

pos;

//棧實(shí)際已有元素個(gè)數(shù),??諘r(shí)pos=0;public:STACK(intm);

//初始化棧:最多m個(gè)元素STACK(constSTACKs);

//用棧s拷貝初始化棧virtualint

size()const;

//返回棧的最大元素個(gè)數(shù)maxvirtualoperatorint()const;//返回棧的實(shí)際元素個(gè)數(shù)posvirtualintoperator[](intx)const;//取下標(biāo)x處的棧元素virtualSTACKoperatorlt;lt;(inte);

//將e入棧,并返回棧virtualSTACKoperatorgt;gt;(inte);//出棧到e,并返回棧virtualSTACKoperator=(constSTACKs);//賦s給棧,并返回被賦值的棧virtualvoidprint()const;

//打印棧virtual~STACK();

//銷毀棧};21.2需求分析

采用面向?qū)ο蟮腃++語(yǔ)言定義,構(gòu)建整型棧并對(duì)其進(jìn)行判斷棧是否為空、向棧頂添加一個(gè)整型元素、出棧等操作。

2.系統(tǒng)設(shè)計(jì)

12.1概要設(shè)計(jì)

首先需要定義一個(gè)類來(lái)實(shí)現(xiàn)棧,然后依次實(shí)現(xiàn)棧的各個(gè)功能,在主函數(shù)中給定一個(gè)棧然后,然后通過(guò)函數(shù)調(diào)用實(shí)現(xiàn)棧的功能。

22.2詳細(xì)設(shè)計(jì)

初始化定義一個(gè)類,分派一個(gè)數(shù)組空間來(lái)存儲(chǔ)棧內(nèi)元素信息,然后初始化為0;

實(shí)現(xiàn)入棧則需要將入棧元素e放入棧內(nèi),采用了先判斷棧的最大容量夠不夠的問(wèn)題,假如不夠重新分派空間,并且讓e入棧,將當(dāng)前元素pos加一;然后返回棧結(jié)構(gòu)。

實(shí)現(xiàn)出棧操作,首先判斷是不是空,若空直接返回,不空則需將棧頂?shù)脑刭x給一個(gè)變量然后將當(dāng)前元素pos減一;返回棧結(jié)構(gòu)。

實(shí)現(xiàn)棧的賦給即需要將s1棧內(nèi)的元素依次賦給s2棧的,當(dāng)前元素也需一致并且返回新的棧結(jié)構(gòu)。

3.軟件開(kāi)發(fā)

在Codeblocks編譯環(huán)境下,使用C++語(yǔ)言編寫(xiě)。

4.軟件測(cè)試

測(cè)試結(jié)果見(jiàn)圖3.1

圖3.1

5.特點(diǎn)與不足

15.1技術(shù)特點(diǎn)

使用了符號(hào)重載,在一定程度上簡(jiǎn)化了函數(shù)。

25.2不足和改進(jìn)的建議

在使用符號(hào)重載時(shí)需要特別注意,防止與其他操作符混淆。

6.過(guò)程和體會(huì)

16.1遇到的主要問(wèn)題和解決方法

對(duì)于符號(hào)重載,剛開(kāi)始不會(huì)調(diào)用函數(shù),之后通過(guò)查閱書(shū)籍,明白了重載的含義。

26.2課程設(shè)計(jì)的體會(huì)

本次試驗(yàn)以試驗(yàn)二為基礎(chǔ),通過(guò)使用符號(hào)重載來(lái)更簡(jiǎn)單的實(shí)現(xiàn)試驗(yàn)?zāi)康摹?/p>

7.源碼和說(shuō)明

17.1文件清單及其功能說(shuō)明

experiment3.cpp源碼experiment3.exe可執(zhí)行文件。

27.2用戶使用說(shuō)明書(shū)

experiment3.cpp是程序的源碼,可通過(guò)修改其中main函數(shù)中的變量來(lái)測(cè)試各個(gè)函數(shù)。

37.3源代碼

#includelt;iostreamgt;#includelt;stringgt;usingnamespacestd;classSTACK{

int

*const

elems;//申請(qǐng)內(nèi)存用于存放棧的元素

const

int

max;//棧能存放的最大元素個(gè)數(shù)

int

pos;

//棧實(shí)際已有元素個(gè)數(shù),棧空時(shí)pos=0;public:STACK(intm);

//初始化棧:最多m個(gè)元素STACK(constSTACKs);

//用棧s拷貝初始化棧virtualint

size()const;

//返回棧的最大元素個(gè)數(shù)maxvirtualoperatorint()const;

//返回棧的實(shí)際元素個(gè)數(shù)posvirtualintoperator[](intx)const;//取下標(biāo)x處的棧元素virtualSTACKoperatorlt;lt;(inte);

//將e入棧,并返回棧virtualSTACKoperatorgt;gt;(inte);//出棧到e,并返回棧virtualSTACKoperator=(constSTACKs);//賦s給棧,并返回被賦值的棧virtualvoidprint()const;

//打印棧virtual~STACK();

//銷毀棧};STACK::STACK(intm):elems(newint[m]),max(m),pos(0){}STACK::STACK(constSTACKs):elems(newint[s.max]),max(s.max),pos(s.pos){

for(inti=0;ilt;pos;i++)

elems[i]=s.elems[i];};intSTACK::size()const{returnmax;}STACK::operatorint()const{returnpos;}intSTACK::operator[](intx)const{returnelems[x];}STACKSTACK::operatorlt;lt;(inte){

if(posgt;max)

{

coutlt;lt;quot;棧滿quot;;

}

else

{

*(elems+pos)=e;

pos++;

}

return(*this);}STACKSTACK::operatorgt;gt;(inte){

if(pos==0)

{

coutlt;lt;quot;??誵uot;;

}

else

{

e=*(elems+pos-1);

pos--;

}

return(*this);}STACKSTACK::operator=(constSTACKs){

deleteelems;

*(int**)elems=newint[s.max];

*(int*)max=s.max;

for(pos=0;poslt;s.pos;pos++)

elems[pos]=s.elems[pos];

return*this;}voidSTACK::print()const{

for(inti=0;ilt;pos;i++)

coutlt;lt;elems[i]lt;lt;quot;\nquot;;}STACK::~STACK(){

delete[]elems;

if(elems==0)

{

coutlt;lt;quot;銷毀失敗quot;lt;lt;endl;

}

else

{

coutlt;lt;quot;銷毀成功quot;lt;lt;endl;

}}intmain(){

STACKi(5),j(8);

ilt;lt;1lt;lt;3lt;lt;6lt;lt;9;

intk;

igt;gt;k;

coutlt;lt;klt;lt;quot;\nquot;;

i.print();

j=i;

j.print();

jlt;lt;1lt;lt;2lt;lt;3lt;lt;4;

coutlt;lt;endllt;lt;(int)j;}

試驗(yàn)四.

面向?qū)ο蟮恼完?duì)列編程

1.需求分析

11.1題目要求

整型隊(duì)列是一種先進(jìn)先出的存儲(chǔ)結(jié)構(gòu),對(duì)其進(jìn)行的操作尋常包括判斷隊(duì)列是否為空、向隊(duì)列頂添加一個(gè)整型元素、出隊(duì)列等。整型隊(duì)列類型及其操作函數(shù)采用面向?qū)ο蟮腃++語(yǔ)言定義,請(qǐng)將完成上述操作的所有函數(shù)采用C++編程,然后寫(xiě)一個(gè)main函數(shù)對(duì)隊(duì)列的所有操作函數(shù)進(jìn)行測(cè)試。

classQUEUE{

int

*const

elems;//申請(qǐng)內(nèi)存用于存放隊(duì)列的元素

const

int

max;//隊(duì)列能存放的最大元素個(gè)數(shù)

int

h

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論