版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、計算機與通信工程學院 2015級數(shù)據(jù)結(jié)構(gòu)課程設計實驗報告數(shù)據(jù)結(jié)構(gòu)課程設計多維數(shù)組班級學號學生姓名提交日期2017年1月12日成 績 計算機與通信工程學院目錄第一部分 需求分析1.1程序設計的任務21.2程序達到的功能21.3程序功能模塊圖和流程圖21.4測試數(shù)據(jù)3第二部分 詳細設計2.1用到的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)定義42.2各個函數(shù)的基本操作和功能42.3各個函數(shù)的調(diào)用關系52.4主程序思路5第三部分 調(diào)試分析3.1遇到的問題及解決過程63.2設計過程中學到的知識73.3經(jīng)驗與體會7第四部分 用戶手冊4.1每一步驟的注釋說明74.2整體思路7第五部分 測試結(jié)果5.1測試結(jié)果85.2附錄-程序源碼
2、9第一部分 需求分析1.1程序設計的任務1.1.1問題描述設計并模擬實現(xiàn)整型多維數(shù)組類型。1.1.2 基本要求設計并模擬實現(xiàn)多維數(shù)組類型。整型多維數(shù)組應具有以下基本功能: (1) 定義整型多維數(shù)組類型,各維的下標是任意整數(shù)開始的連續(xù)整數(shù)。 (2) 下標變量賦值,執(zhí)行下標范圍檢查。 (3) 同類型數(shù)組賦值。 (4) 子數(shù)組賦值,例如 ,a1.n=a 2.n+1;a2.43.5=b1.32.4。 (5) 確定數(shù)組的大小。1.1.3選作內(nèi)容 (1) 各維的下標是任意字符開始的連續(xù)字符。 (2) 數(shù)組初始化。 (3) 可修改數(shù)組的下標范圍。1.2程序達到的功能 (1) 定義整型多維數(shù)組結(jié)構(gòu)體,并定義各
3、維的的結(jié)構(gòu)體。 (2) 下標變量賦值。 (3) 同類型數(shù)組賦值,不同類型賦值時檢查出錯誤。 (4) 子數(shù)組賦值,例如 a1.n=a 2.n+1;a2.43.5=b1.32.4。 (5) 確定數(shù)組的大小。 (6) 數(shù)組初始化。 (7) 可修改數(shù)組的下標。1.3程序功能模塊圖和流程圖圖1 程序功能模塊圖圖2. 程序流程圖1.4 測試數(shù)據(jù)多維數(shù)組a:三維;下標1*22*33*5;賦值:1 2 3 4 5 6 7 8 9 10 11 12多維數(shù)組b:兩維;下標1*22*3;賦值:1 2 3 4多維數(shù)組c;三維;下標2*33*44*6;賦值:2 3 4 5 6 7 8 9 10 11 12查找下標:a2
4、34,a135;替換值為原數(shù)值的復制,例如6改為66修改第2維的下標,保證原來數(shù)組個數(shù)不變第二部分 詳細設計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ù)組中元素的個數(shù) Boundi; /定義第i維數(shù)組2.1.2 多維數(shù)組結(jié)構(gòu)體的定義typedef structint dim; /定義多維數(shù)組的維數(shù) Boundi boundMAXDIM; /定義第i維數(shù)組int total; /定義數(shù)組中元素的個數(shù)
5、int elemMAXTOTAL; /數(shù)組中每個元素的地址,其中elem0為該多維數(shù)組的基址NArray; /定義多維數(shù)組2.2各個函數(shù)的基本操作及功能2.2.1 NArray CreatArray();多維數(shù)組創(chuàng)建并初始化函數(shù)2.2.2 int Replace(NArray &A,NArray &B);兩個數(shù)組復制的函數(shù)2.2.3 void AdjustBound(NArray &A);修改下標的函數(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 各個函數(shù)之間的調(diào)用關系圖4. 各個函數(shù)之間的調(diào)用關系2.4 主程序思路圖5.主程序思路流程圖第三部分 調(diào)試分析3.1 遇到的問題及解決過程3.1.1、在replace函數(shù)(即數(shù)組替換函數(shù))中,當執(zhí)行替換循環(huán)時,代碼如下: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ù)組中只把第一個元素賦值給了c數(shù)組里,其他的元素仍沒
7、有替換。3.1.2、在findswap函數(shù)中,給定數(shù)組下標求地址映像時遇到了困難,原因還是由二維數(shù)組類比到三維數(shù)組及多維數(shù)組出現(xiàn)了問題。三維數(shù)組可以想象成空間的數(shù)組,又由于c+中按行存儲,所以舉了個例子: 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ù)組元素的個數(shù)???/p>
8、縮寫成LOC(j1,j2,*,jn)=LOC(0,0,*,0)+i=0nci*ji。3.2 設計過程中學到的小知識3.2.1、當輸出結(jié)果中想調(diào)用數(shù)據(jù)時,即既想有輸出的原文字又有想調(diào)用的數(shù)據(jù)時。可以用<< <<將想調(diào)用的部分給包含起來。我也是在網(wǎng)上搜集資料偶然發(fā)現(xiàn)的。具體例子就是輸出函數(shù)PrintArray中的輸出部分。如下截圖中劃線的部分:3.3 經(jīng)驗與體會 經(jīng)過這次課設我意識到雖然數(shù)據(jù)結(jié)構(gòu)課程已經(jīng)結(jié)束,但是數(shù)據(jù)結(jié)構(gòu)的學習還遠遠沒有結(jié)束,作為計算機專業(yè)的學生,應當學好數(shù)據(jù)結(jié)構(gòu)的知識點,把專業(yè)知識打牢。同時應當動手做一些程序設計的習題,雖然剛上手的時候有點難,只要肯鉆研下
9、去,到問題解決的時候覺得自己收獲還是挺大的。同時也是為了鞏固自己數(shù)據(jù)結(jié)構(gòu)的實習。我以后還會挑一些題做的。第四部分、 用戶手冊4.1每一步驟的注釋說明注釋說明已包含在源程序中,請詳見附錄中的程序代碼,在此不再贅述。4.2 整體思路 我實現(xiàn)程序的功能的時候是把要求分成了幾個功能函數(shù),然后逐一的通過主函數(shù)調(diào)用功能函數(shù),來判別自己的功能函數(shù)是否正確,而不是從前寫到后一下寫完的。我覺得一個功能一個功能的實現(xiàn)更簡單些,而且出錯了容易查錯。具體思路在前面都已經(jīng)描述,在此不再贅述。第五部分、測試結(jié)果5.1 測試結(jié)果截圖5.2 程序源碼#include <iostream>using namespa
10、ce std;#define MAXDIM 5 /定義數(shù)組的最大維數(shù) #define MAXNUM 10 /定義每維數(shù)組的最大個數(shù) #define MAXTOTAL 100 /定義數(shù)組元素的最大個數(shù)typedef int ElemType;typedef structElemType lower; /定義每維數(shù)組的下界 ElemType upper; /定義每維數(shù)組的上界int boundnum; /定義每維數(shù)組中元素的個數(shù) Boundi; /定義第i維數(shù)組typedef structint dim; /定義多維數(shù)組的維數(shù) Boundi boundMAXDIM; /定義第i維數(shù)組int tot
11、al; /定義數(shù)組中元素的個數(shù) int elemMAXTOTAL; /數(shù)組中每個元素的地址,其中elem0為該多維數(shù)組的基址NArray; /定義多維數(shù)組 NArray CreatArray() /創(chuàng)建一個多維數(shù)組并初始化 int total=1;int n,i,j;NArray A; /定義多維數(shù)組A cout<<"請輸入要創(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=total
13、; /統(tǒng)計出來數(shù)組中元素的個數(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<<"個元素"<<endl;for(i=0;i<A.total;i+)cin>>A.elemi;/輸入多維數(shù)組的元素 case 0:;/不執(zhí)行操作,創(chuàng)建一個全為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<<"*這兩個數(shù)組不是同類型的*"<<endl; /判斷兩個數(shù)組的維數(shù)是否相同 return 0; for(i=1;i<=A.dim;i+)if(A.boundi-1.boundnum!=B.boundi-1.boundnum)cout<<"*這兩個數(shù)組不是同類型的*"<<en
15、dl; /判斷兩個數(shù)組各維的元素的個數(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ù)組的下標int n;cout<<"想要修改第幾維的上下界?請輸入:"cin>>n;cout<<"請輸入修改后的上下界:"cin>>A.boundn-1.lowe
16、r;cin>>A.boundn-1.upper;A.boundn-1.boundnum=A.boundn-1.upper-A.boundn-1.lower+1;cout<<"修改后的第"<<n<<"維元素的個數(shù)為:"<<A.boundn-1.boundnum<<endl; void FindSwap(NArray &A) /查找替換函數(shù) int i,temptotal=1,sum=0,j;int aMAXDIM;cout<<"請輸入你所查找的元素的下標:
17、" for(i=0;i<A.dim;i+)cin>>ai;for(i=0;i<A.dim;i+)temptotal=ai-A.boundi.lower;/給定數(shù)組下標的求映像地址的計算公式。舉個例子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<<" 找到了目標值"<<endl;cout<<"想要改變這個目標值嗎?Y-1,N-0:"cin>>i;if(i=1)cout<<"請輸入替換值"<<endl;cin>>j;A.ele
19、msum=j;cout<<"替換后的數(shù)組為:"<<endl;for(i=0;i<A.total;i+)cout<<A.elemi<<" " cout<<endl;void PrintArray(NArray A) /輸出數(shù)組有關信息的函數(shù) int i,j;cout<<"這是一個"<<A.dim<<"維數(shù)組NArray "for(i=1;i<=A.dim;i+)cout<<""<<A.boundi-1.lower<<""<<A.boundi-1.upper<<""cout<<"該數(shù)組的元素的個數(shù)為:&quo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東科技學院《材料生物學》2023-2024學年第一學期期末試卷
- 廣東金融學院《快題專題訓練》2023-2024學年第一學期期末試卷
- 廣東建設職業(yè)技術學院《日語翻譯實戰(zhàn)訓練》2023-2024學年第一學期期末試卷
- 廣東環(huán)境保護工程職業(yè)學院《英語聲樂》2023-2024學年第一學期期末試卷
- 廣東工程職業(yè)技術學院《展覽場館經(jīng)營與管理》2023-2024學年第一學期期末試卷
- 廣東東軟學院《媒介經(jīng)營與管理》2023-2024學年第一學期期末試卷
- 《定量分析實驗》課件
- 西點軍校培訓課件
- 小學生誠信的課件
- 廣東碧桂園職業(yè)學院《中國近現(xiàn)代政治制度》2023-2024學年第一學期期末試卷
- 某中央空調(diào)機房拆除施工方案
- 教務處主任批評與自我批評
- 氟馬西尼完整
- 合同-勞動主體變更三方協(xié)議
- 2024年江蘇南京大數(shù)據(jù)集團有限公司招聘筆試參考題庫含答案解析
- 挪用公款還款協(xié)議書范本
- 煤礦巷道噴涂技術方案
- 新版中國腦出血診治指南
- 醫(yī)療護理安全警示教育講解
- 園林綠地冬季防火措施(參考范本)
- 九小場所消防安全檢查表
評論
0/150
提交評論