數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)多維數(shù)組_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)多維數(shù)組_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)多維數(shù)組_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)多維數(shù)組_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)多維數(shù)組_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、.計(jì)算機(jī)與通信工程學(xué)院 2015級數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)多維數(shù)組班級學(xué)號學(xué)生姓名提交日期2017年1月12日成 績 計(jì)算機(jī)與通信工程學(xué)院目錄第一部分 需求分析1.1程序設(shè)計(jì)的任務(wù)21.2程序達(dá)到的功能21.3程序功能模塊圖和流程圖21.4測試數(shù)據(jù)3第二部分 詳細(xì)設(shè)計(jì)2.1用到的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)定義42.2各個(gè)函數(shù)的基本操作和功能42.3各個(gè)函數(shù)的調(diào)用關(guān)系52.4主程序思路5第三部分 調(diào)試分析3.1遇到的問題及解決過程63.2設(shè)計(jì)過程中學(xué)到的知識73.3經(jīng)驗(yàn)與體會7第四部分 用戶手冊4.1每一步驟的注釋說明74.2整體思路7第五部分 測試結(jié)果5.1測試結(jié)果85.2附錄-程序源

2、碼9第一部分 需求分析1.1程序設(shè)計(jì)的任務(wù)1.1.1問題描述設(shè)計(jì)并模擬實(shí)現(xiàn)整型多維數(shù)組類型。1.1.2 基本要求設(shè)計(jì)并模擬實(shí)現(xiàn)多維數(shù)組類型。整型多維數(shù)組應(yīng)具有以下基本功能: (1) 定義整型多維數(shù)組類型,各維的下標(biāo)是任意整數(shù)開始的連續(xù)整數(shù)。 (2) 下標(biāo)變量賦值,執(zhí)行下標(biāo)范圍檢查。 (3) 同類型數(shù)組賦值。 (4) 子數(shù)組賦值,例如 ,a1.n=a 2.n+1;a2.43.5=b1.32.4。 (5) 確定數(shù)組的大小。1.1.3選作內(nèi)容 (1) 各維的下標(biāo)是任意字符開始的連續(xù)字符。 (2) 數(shù)組初始化。 (3) 可修改數(shù)組的下標(biāo)范圍。1.2程序達(dá)到的功能 (1) 定義整型多維數(shù)組結(jié)構(gòu)體,并定義

3、各維的的結(jié)構(gòu)體。 (2) 下標(biāo)變量賦值。 (3) 同類型數(shù)組賦值,不同類型賦值時(shí)檢查出錯(cuò)誤。 (4) 子數(shù)組賦值,例如 a1.n=a 2.n+1;a2.43.5=b1.32.4。 (5) 確定數(shù)組的大小。 (6) 數(shù)組初始化。 (7) 可修改數(shù)組的下標(biāo)。1.3程序功能模塊圖和流程圖圖1 程序功能模塊圖圖2. 程序流程圖1.4 測試數(shù)據(jù)多維數(shù)組a:三維;下標(biāo)1*22*33*5;賦值:1 2 3 4 5 6 7 8 9 10 11 12多維數(shù)組b:兩維;下標(biāo)1*22*3;賦值:1 2 3 4多維數(shù)組c;三維;下標(biāo)2*33*44*6;賦值:2 3 4 5 6 7 8 9 10 11 12查找下標(biāo):a

4、234,a135;替換值為原數(shù)值的復(fù)制,例如6改為66修改第2維的下標(biāo),保證原來數(shù)組個(gè)數(shù)不變第二部分 詳細(xì)設(shè)計(jì)2.1 用到的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)定義2.1.1第幾維數(shù)組的結(jié)構(gòu)體定義typedef structElemType lower; /定義每維數(shù)組的下界 ElemType upper; /定義每維數(shù)組的上界int boundnum; /定義每維數(shù)組中元素的個(gè)數(shù) Boundi; /定義第i維數(shù)組2.1.2 多維數(shù)組結(jié)構(gòu)體的定義typedef structint dim; /定義多維數(shù)組的維數(shù) Boundi boundMAXDIM; /定義第i維數(shù)組int total; /定義數(shù)組中元素的個(gè)數(shù)

5、 int elemMAXTOTAL; /數(shù)組中每個(gè)元素的地址,其中elem0為該多維數(shù)組的基址NArray; /定義多維數(shù)組2.2各個(gè)函數(shù)的基本操作及功能2.2.1 NArray CreatArray();多維數(shù)組創(chuàng)建并初始化函數(shù)2.2.2 int Replace(NArray &A,NArray &B);兩個(gè)數(shù)組復(fù)制的函數(shù)2.2.3 void AdjustBound(NArray &A);修改下標(biāo)的函數(shù)2.2.4 void FindSwap(NArray &A);查找并替換的函數(shù)2.2.5 void PrintArray(NArray A);打印輸出函數(shù)2.2

6、.6 int main();主函數(shù)圖3.程序子函數(shù)主函數(shù)截圖2.3 各個(gè)函數(shù)之間的調(diào)用關(guān)系圖4. 各個(gè)函數(shù)之間的調(diào)用關(guān)系2.4 主程序思路圖5.主程序思路流程圖第三部分 調(diào)試分析3.1 遇到的問題及解決過程3.1.1、在replace函數(shù)(即數(shù)組替換函數(shù))中,當(dāng)執(zhí)行替換循環(huán)時(shí),代碼如下:for(i=0;i<A.total;i+)B.elemi=A.elemi; /把多維數(shù)組A賦值給B cout<<"*賦值成功*"<<endl; return 0;把return 0;放到了for循環(huán)里了。結(jié)果只a數(shù)組中只把第一個(gè)元素賦值給了c數(shù)組里,其他的元素仍

7、沒有替換。3.1.2、在findswap函數(shù)中,給定數(shù)組下標(biāo)求地址映像時(shí)遇到了困難,原因還是由二維數(shù)組類比到三維數(shù)組及多維數(shù)組出現(xiàn)了問題。三維數(shù)組可以想象成空間的數(shù)組,又由于c+中按行存儲,所以舉了個(gè)例子: A223的三維數(shù)組,求A221的地址,2Í3Í(2-1)+3Í(2-1)+1=10。公式為書上的公式: LOC(j1,j2,*,jn)=LOC(0,0,*,0)+(b2Í*ÍbnÍj1+b3Í*ÍbnÍj2+*+bnÍjn-1+jn)L。其中n維數(shù)組的映像函數(shù)。bn代表第i維數(shù)組元素的個(gè)數(shù)。

8、可縮寫成LOC(j1,j2,*,jn)=LOC(0,0,*,0)+i=0nci*ji。3.2 設(shè)計(jì)過程中學(xué)到的小知識3.2.1、當(dāng)輸出結(jié)果中想調(diào)用數(shù)據(jù)時(shí),即既想有輸出的原文字又有想調(diào)用的數(shù)據(jù)時(shí)??梢杂?lt;< <<將想調(diào)用的部分給包含起來。我也是在網(wǎng)上搜集資料偶然發(fā)現(xiàn)的。具體例子就是輸出函數(shù)PrintArray中的輸出部分。如下截圖中劃線的部分:3.3 經(jīng)驗(yàn)與體會 經(jīng)過這次課設(shè)我意識到雖然數(shù)據(jù)結(jié)構(gòu)課程已經(jīng)結(jié)束,但是數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)還遠(yuǎn)遠(yuǎn)沒有結(jié)束,作為計(jì)算機(jī)專業(yè)的學(xué)生,應(yīng)當(dāng)學(xué)好數(shù)據(jù)結(jié)構(gòu)的知識點(diǎn),把專業(yè)知識打牢。同時(shí)應(yīng)當(dāng)動(dòng)手做一些程序設(shè)計(jì)的習(xí)題,雖然剛上手的時(shí)候有點(diǎn)難,只要肯鉆研

9、下去,到問題解決的時(shí)候覺得自己收獲還是挺大的。同時(shí)也是為了鞏固自己數(shù)據(jù)結(jié)構(gòu)的實(shí)習(xí)。我以后還會挑一些題做的。第四部分、 用戶手冊4.1每一步驟的注釋說明注釋說明已包含在源程序中,請?jiān)斠姼戒浿械某绦虼a,在此不再贅述。4.2 整體思路 我實(shí)現(xiàn)程序的功能的時(shí)候是把要求分成了幾個(gè)功能函數(shù),然后逐一的通過主函數(shù)調(diào)用功能函數(shù),來判別自己的功能函數(shù)是否正確,而不是從前寫到后一下寫完的。我覺得一個(gè)功能一個(gè)功能的實(shí)現(xiàn)更簡單些,而且出錯(cuò)了容易查錯(cuò)。具體思路在前面都已經(jīng)描述,在此不再贅述。第五部分、測試結(jié)果5.1 測試結(jié)果截圖5.2 程序源碼#include <iostream>using namesp

10、ace std;#define MAXDIM 5 /定義數(shù)組的最大維數(shù) #define MAXNUM 10 /定義每維數(shù)組的最大個(gè)數(shù) #define MAXTOTAL 100 /定義數(shù)組元素的最大個(gè)數(shù)typedef int ElemType;typedef structElemType lower; /定義每維數(shù)組的下界 ElemType upper; /定義每維數(shù)組的上界int boundnum; /定義每維數(shù)組中元素的個(gè)數(shù) Boundi; /定義第i維數(shù)組typedef structint dim; /定義多維數(shù)組的維數(shù) Boundi boundMAXDIM; /定義第i維數(shù)組int to

11、tal; /定義數(shù)組中元素的個(gè)數(shù) int elemMAXTOTAL; /數(shù)組中每個(gè)元素的地址,其中elem0為該多維數(shù)組的基址NArray; /定義多維數(shù)組 NArray CreatArray() /創(chuàng)建一個(gè)多維數(shù)組并初始化 int total=1;int n,i,j;NArray A; /定義多維數(shù)組A cout<<"請輸入要?jiǎng)?chuàng)建數(shù)組的維數(shù):"cin>>n; if(n>5)cout<<"超過數(shù)組的維數(shù)上限 請重新輸入:"<<endl;cin>>n; A.dim=n;cout<<

12、;"請輸入每維數(shù)組的上下界:"<<endl;for(i=1;i<=A.dim;i+)cout<<"請輸入第"<<i<<"維數(shù)組的上下界:"cin>>A.boundi-1.lower;cout<<endl;cin>>A.boundi-1.upper;A.boundi-1.boundnum=A.boundi-1.upper-A.boundi-1.lower+1;total=total*A.boundi-1.boundnum; A.total=tota

13、l; /統(tǒng)計(jì)出來數(shù)組中元素的個(gè)數(shù)for(i=0;i<total;i+)A.elemi=0;cout<<"是否要初始化數(shù)組?Y-1,N-0: "cin>>j;switch(j)case 1:cout<<"請以行序輸入"<<A.total<<"個(gè)元素"<<endl;for(i=0;i<A.total;i+)cin>>A.elemi;/輸入多維數(shù)組的元素 case 0:;/不執(zhí)行操作,創(chuàng)建一個(gè)全為0的多維數(shù)組 cout<<"

14、*創(chuàng)建多維數(shù)組成功*" <<endl;return A; int Replace(NArray &A,NArray &B) /數(shù)組替換函數(shù) int i;if(A.dim!=B.dim)cout<<"*這兩個(gè)數(shù)組不是同類型的*"<<endl; /判斷兩個(gè)數(shù)組的維數(shù)是否相同 return 0; for(i=1;i<=A.dim;i+)if(A.boundi-1.boundnum!=B.boundi-1.boundnum)cout<<"*這兩個(gè)數(shù)組不是同類型的*"<<e

15、ndl; /判斷兩個(gè)數(shù)組各維的元素的個(gè)數(shù)是否相同 return 0; for(i=0;i<A.total;i+)B.elemi=A.elemi; /把多維數(shù)組A賦值給B cout<<"*賦值成功*"<<endl; return 0;void AdjustBound(NArray &A) /修改數(shù)組的下標(biāo)int n;cout<<"想要修改第幾維的上下界?請輸入:"cin>>n;cout<<"請輸入修改后的上下界:"cin>>A.boundn-1.low

16、er;cin>>A.boundn-1.upper;A.boundn-1.boundnum=A.boundn-1.upper-A.boundn-1.lower+1;cout<<"修改后的第"<<n<<"維元素的個(gè)數(shù)為:"<<A.boundn-1.boundnum<<endl; void FindSwap(NArray &A) /查找替換函數(shù) int i,temptotal=1,sum=0,j;int aMAXDIM;cout<<"請輸入你所查找的元素的下標(biāo)

17、:" for(i=0;i<A.dim;i+)cin>>ai;for(i=0;i<A.dim;i+)temptotal=ai-A.boundi.lower;/給定數(shù)組下標(biāo)的求映像地址的計(jì)算公式。舉個(gè)例子A223的三維數(shù)組,求A221的地址,2*3*(2-1)+3*(2-1)+1=10。公式為書上的公式 for(j=i+1;j<A.dim;j+)temptotal=temptotal*A.boundj.boundnum;sum=sum+temptotal;cout<<"數(shù)組NArray"for(i=0;i<A.dim;i

18、+)cout<<""<<ai<<""cout<<"的值為:elem"<<sum<<"="<<A.elemsum<<" 找到了目標(biāo)值"<<endl;cout<<"想要改變這個(gè)目標(biāo)值嗎?Y-1,N-0:"cin>>i;if(i=1)cout<<"請輸入替換值"<<endl;cin>>j;A.el

19、emsum=j;cout<<"替換后的數(shù)組為:"<<endl;for(i=0;i<A.total;i+)cout<<A.elemi<<" " cout<<endl;void PrintArray(NArray A) /輸出數(shù)組有關(guān)信息的函數(shù) int i,j;cout<<"這是一個(gè)"<<A.dim<<"維數(shù)組NArray "for(i=1;i<=A.dim;i+)cout<<""<<A.boundi-1.lower<<""<<A.boundi-1.upper<<""cout<<"該數(shù)組的元素的個(gè)數(shù)為:&quo

溫馨提示

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

評論

0/150

提交評論