版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計</b></p><p><b> 多維數(shù)組</b></p><p> 計算機與通信工程學(xué)院</p><p><b> 目錄</b></p><p><b> 第一部分 需求分析</b></p&g
2、t;<p> 1.1程序設(shè)計的任務(wù)2</p><p> 1.2程序達(dá)到的功能2</p><p> 1.3程序功能模塊圖和流程圖2</p><p><b> 1.4測試數(shù)據(jù)3</b></p><p><b> 第二部分 詳細(xì)設(shè)計</b></p><p
3、> 2.1用到的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)定義4</p><p> 2.2各個函數(shù)的基本操作和功能4</p><p> 2.3各個函數(shù)的調(diào)用關(guān)系5</p><p> 2.4主程序思路5</p><p><b> 第三部分 調(diào)試分析</b></p><p> 3.1遇到的問題及解決
4、過程6</p><p> 3.2設(shè)計過程中學(xué)到的知識7</p><p> 3.3經(jīng)驗與體會7</p><p><b> 第四部分 用戶手冊</b></p><p> 4.1每一步驟的注釋說明7</p><p><b> 4.2整體思路7</b></p
5、><p><b> 第五部分 測試結(jié)果</b></p><p><b> 5.1測試結(jié)果8</b></p><p> 5.2附錄-程序源碼9</p><p><b> 第一部分 需求分析</b></p><p> 1.1程序設(shè)計的任務(wù)</
6、p><p><b> 1.1.1問題描述</b></p><p> 設(shè)計并模擬實現(xiàn)整型多維數(shù)組類型。</p><p> 1.1.2 基本要求</p><p> 設(shè)計并模擬實現(xiàn)多維數(shù)組類型。整型多維數(shù)組應(yīng)具有以下基本功能:</p><p> (1) 定義整型多維數(shù)組類型,各維的下標(biāo)是任意整數(shù)開
7、始的連續(xù)整數(shù)。</p><p> (2) 下標(biāo)變量賦值,執(zhí)行下標(biāo)范圍檢查。</p><p> (3) 同類型數(shù)組賦值。</p><p> (4) 子數(shù)組賦值,例如 ,a[1..n]=a [2..n+1];a[2..4][3..5]=b[1..3][2..4]。</p><p> (5) 確定數(shù)組的大小。</p><
8、p><b> 1.1.3選作內(nèi)容</b></p><p> (1) 各維的下標(biāo)是任意字符開始的連續(xù)字符。</p><p> (2) 數(shù)組初始化。</p><p> (3) 可修改數(shù)組的下標(biāo)范圍。</p><p> 1.2程序達(dá)到的功能</p><p> (1) 定義整型多維數(shù)組結(jié)
9、構(gòu)體,并定義各維的的結(jié)構(gòu)體。</p><p> (2) 下標(biāo)變量賦值。</p><p> (3) 同類型數(shù)組賦值,不同類型賦值時檢查出錯誤。</p><p> (4) 子數(shù)組賦值,例如 a[1..n]=a [2..n+1];a[2..4][3..5]=b[1..3][2..4]。</p><p> (5) 確定數(shù)組的大小。</p
10、><p> (6) 數(shù)組初始化。</p><p> (7) 可修改數(shù)組的下標(biāo)。</p><p> 1.3程序功能模塊圖和流程圖</p><p> 圖1 程序功能模塊圖</p><p><b> 圖2. 程序流程圖</b></p><p><b> 1.4
11、測試數(shù)據(jù)</b></p><p> 多維數(shù)組a:三維;下標(biāo)[1**2][2**3][3**5];賦值:1 2 3 4 5 6 7 8 9 10 11 12</p><p> 多維數(shù)組b:兩維;下標(biāo)[1**2][2**3];賦值:1 2 3 4</p><p> 多維數(shù)組c;三維;下標(biāo)[2**3][3**4][4**6];賦值:2 3 4 5
12、6 7 8 9 10 11 12</p><p> 查找下標(biāo):a[2][3][4],a[1][3][5];替換值為原數(shù)值的復(fù)制,例如6改為66</p><p> 修改第2維的下標(biāo),保證原來數(shù)組個數(shù)不變</p><p><b> 第二部分 詳細(xì)設(shè)計</b></p><p> 2.1 用到的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)定
13、義</p><p> 2.1.1第幾維數(shù)組的結(jié)構(gòu)體定義</p><p> typedef struct{</p><p> ElemType lower; //定義每維數(shù)組的下界 </p><p> ElemType upper; //定義每維數(shù)組的上界</p><p> int boundnum; //定
14、義每維數(shù)組中元素的個數(shù) </p><p> }Boundi; //定義第i維數(shù)組</p><p> 2.1.2 多維數(shù)組結(jié)構(gòu)體的定義</p><p> typedef struct{</p><p> int dim; //定義多維數(shù)組的維數(shù) </p><p>
15、 Boundi bound[MAXDIM]; //定義第i維數(shù)組</p><p> int total; //定義數(shù)組中元素的個數(shù) </p><p> int elem[MAXTOTAL]; //數(shù)組中每個元素的地址,其中elem[0]為該多維數(shù)組的基址</p><p> }NArray;
16、//定義多維數(shù)組</p><p> 2.2各個函數(shù)的基本操作及功能</p><p> 2.2.1 NArray CreatArray();多維數(shù)組創(chuàng)建并初始化函數(shù)</p><p> 2.2.2 int Replace(NArray &A,NArray &B);兩個數(shù)組復(fù)制的函數(shù)</p><p> 2.2.3 void
17、AdjustBound(NArray &A);修改下標(biāo)的函數(shù)</p><p> 2.2.4 void FindSwap(NArray &A);查找并替換的函數(shù)</p><p> 2.2.5 void PrintArray(NArray A);打印輸出函數(shù)</p><p> 2.2.6 int main();主函數(shù)</p><
18、p> 圖3.程序子函數(shù)主函數(shù)截圖</p><p> 2.3 各個函數(shù)之間的調(diào)用關(guān)系</p><p> 圖4. 各個函數(shù)之間的調(diào)用關(guān)系</p><p><b> 2.4 主程序思路</b></p><p> 圖5.主程序思路流程圖</p><p><b> 第三部分 調(diào)試
19、分析</b></p><p> 3.1 遇到的問題及解決過程</p><p> 3.1.1、在replace函數(shù)(即數(shù)組替換函數(shù))中,當(dāng)執(zhí)行替換循環(huán)時,代碼如下:</p><p> for(i=0;i<A.total;i++){</p><p> B.elem[i]=A.elem[i]; //把多維數(shù)組A賦值給B
20、 </p><p><b> }</b></p><p> cout<<"********賦值成功********"<<endl; </p><p><b> return 0;</b></p><p> 把return 0;放到了for循環(huán)里了
21、。結(jié)果只a數(shù)組中只把第一個元素賦值給了c數(shù)組里,其他的元素仍沒有替換。</p><p> 3.1.2、在findswap函數(shù)中,給定數(shù)組下標(biāo)求地址映像時遇到了困難,原因還是由二維數(shù)組類比到三維數(shù)組及多維數(shù)組出現(xiàn)了問題。三維數(shù)組可以想象成空間的數(shù)組,又由于c++中按行存儲,所以舉了個例子: A[2][2][3]的三維數(shù)組,求A[2][2][1]的地址,23(2-1)+3(2-1)+1=10。</p>
22、<p> 公式為書上的公式: </p><p> LOC(j1,j2,***,jn)=LOC(0,0,***,0)+(b2***bnj1+b3***bnj2+***+bnjn-1+jn)L。</p><p> 其中n維數(shù)組的映像函數(shù)。bn代表第i維數(shù)組元素的個數(shù)。</p><p><b> 可縮寫成</b></p>
23、;<p> LOC(j1,j2,***,jn)=LOC(0,0,***,0)+。</p><p> 3.2 設(shè)計過程中學(xué)到的小知識</p><p> 3.2.1、當(dāng)輸出結(jié)果中想調(diào)用數(shù)據(jù)時,即既想有輸出的原文字又有想調(diào)用的數(shù)據(jù)時??梢杂?lt;< <<將想調(diào)用的部分給包含起來。我也是在網(wǎng)上搜集資料偶然發(fā)現(xiàn)的。具體例子就是輸出函數(shù)PrintArray中
24、的輸出部分。如下截圖中劃線的部分:</p><p><b> 3.3 經(jīng)驗與體會</b></p><p> 經(jīng)過這次課設(shè)我意識到雖然數(shù)據(jù)結(jié)構(gòu)課程已經(jīng)結(jié)束,但是數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)還遠(yuǎn)遠(yuǎn)沒有結(jié)束,作為計算機專業(yè)的學(xué)生,應(yīng)當(dāng)學(xué)好數(shù)據(jù)結(jié)構(gòu)的知識點,把專業(yè)知識打牢。同時應(yīng)當(dāng)動手做一些程序設(shè)計的習(xí)題,雖然剛上手的時候有點難,只要肯鉆研下去,到問題解決的時候覺得自己收獲還是挺大的。
25、同時也是為了鞏固自己數(shù)據(jù)結(jié)構(gòu)的實習(xí)。我以后還會挑一些題做的。</p><p> 第四部分、 用戶手冊</p><p> 4.1每一步驟的注釋說明</p><p> 注釋說明已包含在源程序中,請詳見附錄中的程序代碼,在此不再贅述。</p><p><b> 4.2 整體思路</b></p><p
26、> 我實現(xiàn)程序的功能的時候是把要求分成了幾個功能函數(shù),然后逐一的通過主函數(shù)調(diào)用功能函數(shù),來判別自己的功能函數(shù)是否正確,而不是從前寫到后一下寫完的。我覺得一個功能一個功能的實現(xiàn)更簡單些,而且出錯了容易查錯。具體思路在前面都已經(jīng)描述,在此不再贅述。</p><p><b> 第五部分、測試結(jié)果</b></p><p> 5.1 測試結(jié)果截圖</p>
27、<p><b> 5.2 程序源碼</b></p><p> #include <iostream></p><p> using namespace std;</p><p> #define MAXDIM 5 //定義數(shù)組的最大維數(shù) </p><p> #define MA
28、XNUM 10 //定義每維數(shù)組的最大個數(shù) </p><p> #define MAXTOTAL 100 //定義數(shù)組元素的最大個數(shù)</p><p> typedef int ElemType;</p><p> typedef struct{</p><p> ElemType lower; //定義每維數(shù)組的下界 <
29、/p><p> ElemType upper; //定義每維數(shù)組的上界</p><p> int boundnum; //定義每維數(shù)組中元素的個數(shù) </p><p> }Boundi; //定義第i維數(shù)組</p><p> typedef struct{</p><p> int dim;
30、 //定義多維數(shù)組的維數(shù) </p><p> Boundi bound[MAXDIM]; //定義第i維數(shù)組</p><p> int total; //定義數(shù)組中元素的個數(shù) </p><p> int elem[MAXTOTAL]; //數(shù)組中每個元素的地址,其中elem[0]為該多維數(shù)組的基址&l
31、t;/p><p> }NArray; //定義多維數(shù)組 </p><p> NArray CreatArray() { //創(chuàng)建一個多維數(shù)組并初始化 </p><p> int total=1;</p><p> int n,i,j;</p><p> NArray A
32、; //定義多維數(shù)組A </p><p> cout<<"請輸入要創(chuàng)建數(shù)組的維數(shù):";</p><p><b> cin>>n; </b></p><p><b> if(n>5){</b></p><p> cou
33、t<<"超過數(shù)組的維數(shù)上限 請重新輸入:"<<endl;</p><p><b> cin>>n; </b></p><p><b> }</b></p><p><b> A.dim=n;</b></p><p>
34、 cout<<"請輸入每維數(shù)組的上下界:"<<endl;</p><p> for(i=1;i<=A.dim;i++){</p><p> cout<<"請輸入第"<<i<<"維數(shù)組的上下界:";</p><p> cin>&g
35、t;A.bound[i-1].lower;</p><p> cout<<endl;</p><p> cin>>A.bound[i-1].upper;</p><p> A.bound[i-1].boundnum=A.bound[i-1].upper-A.bound[i-1].lower+1;</p><p>
36、 total=total*A.bound[i-1].boundnum;</p><p><b> } </b></p><p> A.total=total; //統(tǒng)計出來數(shù)組中元素的個數(shù)</p><p> for(i=0;i<total;i++){</p><p> A.elem[i]=0;<
37、/p><p> cout<<"是否要初始化數(shù)組?Y-1,N-0: ";cin>>j;</p><p> switch(j){</p><p><b> case 1:{</b></p><p> cout<<"請以行序輸入"<<A
38、.total<<"個元素"<<endl;</p><p> for(i=0;i<A.total;i++){</p><p> cin>>A.elem[i];//輸入多維數(shù)組的元素 </p><p><b> } </b></p><p><b>
39、; }</b></p><p> case 0:;//不執(zhí)行操作,創(chuàng)建一個全為0的多維數(shù)組 </p><p><b> }</b></p><p><b> } </b></p><p> cout<<"*******創(chuàng)建多維數(shù)組成功********&qu
40、ot; <<endl;</p><p> return A; </p><p><b> }</b></p><p> int Replace(NArray &A,NArray &B){ //數(shù)組替換函數(shù) </p><p><b> int i;</b><
41、;/p><p> if(A.dim!=B.dim){</p><p> cout<<"*******這兩個數(shù)組不是同類型的******"<<endl; //判斷兩個數(shù)組的維數(shù)是否相同 </p><p> return 0; </p><p><b> }</b></
42、p><p> for(i=1;i<=A.dim;i++){</p><p> if(A.bound[i-1].boundnum!=B.bound[i-1].boundnum){</p><p> cout<<"*******這兩個數(shù)組不是同類型的********"<<endl; //判斷兩個數(shù)組各維的元素的個數(shù)是
43、否相同 </p><p> return 0; </p><p><b> }</b></p><p><b> }</b></p><p> for(i=0;i<A.total;i++){</p><p> B.elem[i]=A.elem[i]; //
44、把多維數(shù)組A賦值給B </p><p><b> }</b></p><p> cout<<"********賦值成功********"<<endl; </p><p> return 0;</p><p><b> }</b></p&
45、gt;<p> void AdjustBound(NArray &A){ //修改數(shù)組的下標(biāo)</p><p><b> int n;</b></p><p> cout<<"想要修改第幾維的上下界?請輸入:";</p><p><b> cin>>n;<
46、/b></p><p> cout<<"請輸入修改后的上下界:";</p><p> cin>>A.bound[n-1].lower;</p><p> cin>>A.bound[n-1].upper;</p><p> A.bound[n-1].boundnum=A.bo
47、und[n-1].upper-A.bound[n-1].lower+1;</p><p> cout<<"修改后的第"<<n<<"維元素的個數(shù)為:"<<A.bound[n-1].boundnum<<endl; </p><p><b> } </b></p&g
48、t;<p> void FindSwap(NArray &A){ //查找替換函數(shù) </p><p> int i,temptotal=1,sum=0,j;</p><p> int a[MAXDIM];</p><p> cout<<"請輸入你所查找的元素的下標(biāo):"; </p><
49、p> for(i=0;i<A.dim;i++)cin>>a[i];</p><p> for(i=0;i<A.dim;i++){</p><p> temptotal=a[i]-A.bound[i].lower;//給定數(shù)組下標(biāo)的求映像地址的計算公式。舉個例子A223的三維數(shù)組,求A221的地址,2*3*(2-1)+3*(2-1)+1=10。公式為書上的
50、公式 </p><p> for(j=i+1;j<A.dim;j++)</p><p> temptotal=temptotal*A.bound[j].boundnum;</p><p> sum=sum+temptotal;</p><p><b> }</b></p><p>
51、 cout<<"數(shù)組NArray";</p><p> for(i=0;i<A.dim;i++)cout<<"["<<a[i]<<"]";</p><p> cout<<"的值為:elem["<<sum<<"
52、;]="<<A.elem[sum]<<" 找到了目標(biāo)值"<<endl;</p><p> cout<<"想要改變這個目標(biāo)值嗎?Y-1,N-0:";cin>>i;</p><p><b> if(i==1){</b></p><p&g
53、t; cout<<"請輸入替換值"<<endl;cin>>j;</p><p> A.elem[sum]=j;</p><p><b> }</b></p><p> cout<<"替換后的數(shù)組為:"<<endl;</p>
54、<p> for(i=0;i<A.total;i++){</p><p> cout<<A.elem[i]<<" ";</p><p><b> } </b></p><p> cout<<endl;</p><p><b> }
55、</b></p><p> void PrintArray(NArray A){ //輸出數(shù)組有關(guān)信息的函數(shù) </p><p><b> int i,j;</b></p><p> cout<<"這是一個"<<A.dim<<"維數(shù)組NArray ";
56、</p><p> for(i=1;i<=A.dim;i++){</p><p> cout<<"["<<A.bound[i-1].lower<<"…"<<A.bound[i-1].upper<<"]";</p><p><b>
57、; }</b></p><p> cout<<"該數(shù)組的元素的個數(shù)為:"<<A.total<<" ";</p><p> cout<<"數(shù)組為:" <<endl;</p><p> for(i=0;i<A.tota
58、l;i++){</p><p> cout<<A.elem[i]<<" ";</p><p><b> }</b></p><p> cout<<endl;</p><p><b> }</b></p><p>
59、 int main(){</p><p><b> int m;</b></p><p> NArray a,b,c;</p><p> a=CreatArray(); //1、創(chuàng)建并初始化數(shù)組a</p><p> PrintArray(a);</p><p> b=CreatAr
60、ray(); //創(chuàng)建并初始化數(shù)組b </p><p> PrintArray(b);</p><p> cout<<"是否要替換數(shù)組?是-1 否-0: ";</p><p><b> cin>>m;</b></p><p><b> if(m==1){&l
61、t;/b></p><p> Replace(a,b); //5.1將a賦值給b 同類型的數(shù)組賦值 成功 </p><p> PrintArray(b);</p><p><b> } </b></p><p> c=CreatArray(); //創(chuàng)建并初始化數(shù)組c </p><
62、p> PrintArray(c);</p><p> cout<<"是否要替換數(shù)組?是-1 否-0: ";</p><p><b> cin>>m;</b></p><p><b> if(m==1){</b></p><p> Repla
63、ce(a,c); //5.2 將a賦值給c 不同類型的數(shù)組賦值 不成功 </p><p> PrintArray(c);</p><p><b> } </b></p><p> FindSwap(a); //4、查找和替換數(shù)組中的具體元素 </p><p> FindSwap(a);</p>
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)組的存儲格式轉(zhuǎn)換
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)迷宮課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)迷宮課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---迷宮
評論
0/150
提交評論