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

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論