數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--基本稀疏矩陣運(yùn)算的運(yùn)算器_第1頁(yè)
已閱讀1頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)五</b></p><p>  題目: 嚴(yán)蔚敏習(xí)題實(shí)習(xí)4第1個(gè):實(shí)現(xiàn)一個(gè)能進(jìn)行基本稀疏矩陣運(yùn)算的運(yùn)算器</p><p><b>  需求分析</b></p><p>  本程序?qū)崿F(xiàn)一個(gè)基本稀疏矩陣的簡(jiǎn)單運(yùn)算,包括加、減、乘。</p><p>  執(zhí)行操作

2、前應(yīng)先創(chuàng)造要進(jìn)行運(yùn)算的兩個(gè)矩陣,然后再選擇進(jìn)行相應(yīng)的操作。</p><p>  以三元組順序表表示稀疏矩陣,實(shí)現(xiàn)二個(gè)矩陣相加,相減,相乘的運(yùn)算;稀疏矩陣的輸入形式為三元組表示,運(yùn)算結(jié)果則為通常的陣列形式列出!</p><p>  首先輸入矩陣的行數(shù)和列數(shù),并判別給出的兩個(gè)矩陣和行、列數(shù)對(duì)于所要求作的運(yùn)算是否相匹配??稍O(shè)矩陣的行數(shù)和列數(shù)均不超過20;</p><p>

3、  程序先給出了菜單項(xiàng),用戶只需按照菜單提示進(jìn)行相應(yīng)的操作就行了。</p><p><b>  測(cè)試數(shù)據(jù):</b></p><p><b>  概要設(shè)計(jì)</b></p><p>  抽象數(shù)據(jù)類型三元組的定義如下:</p><p>  ADT Triple</p><p>&l

4、t;b>  {</b></p><p>  數(shù)據(jù)對(duì)象:D={ai| ai(-ElemSet,i=1,2,...,n,n>=0};</p><p>  數(shù)據(jù)關(guān)系:R1={<ai-1,ai>| ai-1,ai(- D,i=2,...,n}</p><p><b>  基本操作:略</b></p>&

5、lt;p><b>  }</b></p><p>  2、基于三元組順序表表示的矩陣操作:</p><p> ?。?)創(chuàng)建三元組順序表表示的矩陣:void createMatrix(TSMatrix &A)</p><p>  (2)初始化矩陣:void initMatrix(TSMatrix &A)</p>

6、<p> ?。?)相加:void add(TSMatrix A,TSMatrix B,TSMatrix &C)</p><p> ?。?)相減:void sub(TSMatrix A,TSMatrix &B,TSMatrix &C)</p><p> ?。?)找m行n列元素在A中順序表中的位置:int search(TSMatrix A,int m,in

7、t n)</p><p> ?。?)相乘;void mult(TSMatrix A,TSMatrix B,TSMatrix &C)</p><p> ?。?)輸入以陣列形式表示的矩陣:void print(TSMatrix A)</p><p><b>  3、主程序</b></p><p>  Void mai

8、n()</p><p><b>  {</b></p><p>  While(true)</p><p><b>  {</b></p><p>  調(diào)用相應(yīng)函數(shù)執(zhí)行相應(yīng)操作;</p><p><b>  輸出操作結(jié)果;</b></p>

9、<p><b>  }</b></p><p><b>  }</b></p><p>  4、本程序只有兩個(gè)模塊,調(diào)用關(guān)系簡(jiǎn)單:</p><p><b>  詳細(xì)設(shè)計(jì)</b></p><p><b>  三元組結(jié)構(gòu)描述:</b></p&g

10、t;<p>  #define MAXSIZE 20</p><p>  using namespace std;</p><p>  typedef struct </p><p><b>  {</b></p><p><b>  int row;</b></p>&

11、lt;p><b>  int col;</b></p><p><b>  int e;</b></p><p><b>  }Triple;</b></p><p>  typedef struct</p><p><b>  {</b></

12、p><p>  Triple date[MAXSIZE];</p><p>  int m,n,len;</p><p>  }TSMatrix;</p><p>  void initMatrix(TSMatrix &A)</p><p><b>  {</b></p><

13、;p><b>  A.len=0;</b></p><p><b>  A.m=0;</b></p><p><b>  A.n=0;</b></p><p>  for(int i=0;i<MAXSIZE;i++)</p><p><b>  {<

14、/b></p><p>  A.date[i].col=0;</p><p>  A.date[i].e=0;</p><p>  A.date[i].row=0;</p><p><b>  }</b></p><p><b>  }</b></p>&

15、lt;p>  各種操作函數(shù)源代碼:</p><p>  void createMatrix(TSMatrix &A)</p><p><b>  {</b></p><p>  initMatrix(A);</p><p>  cout<<"創(chuàng)建矩陣:";</p>

16、<p>  cout<<"請(qǐng)輸入矩陣的行列值及非0元素個(gè)數(shù)\n";</p><p>  cin>>A.m>>A.n>>A.len;</p><p>  for(int i=0;i<A.len;i++)</p><p><b>  {</b></p>

17、;<p>  cout<<"請(qǐng)輸入第"<<i<<"個(gè)非0元素對(duì)應(yīng)的行、列、值:";</p><p>  cin>>A.date[i].row;</p><p>  cin>>A.date[i].col;</p><p>  cin>>A.da

18、te[i].e;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void add(TSMatrix A,TSMatrix B,TSMatrix &C)//相加</p><p><b>  {</b></p>

19、;<p>  if(A.m==B.m&&A.n==B.n)</p><p><b>  {</b></p><p>  int i=0,j=0;</p><p><b>  int k=0;</b></p><p><b>  C.m=A.m;</b&g

20、t;</p><p><b>  C.n=A.n;</b></p><p>  while( i<A.len||j<B.len)</p><p><b>  {</b></p><p>  if(i==A.len&&j<B.len)</p><p

21、><b>  {</b></p><p>  C.date[k].col=B.date[j].col;</p><p>  C.date[k].row=B.date[j].row;</p><p>  C.date[k++].e=B.date[j].e;</p><p><b>  C.len++;<

22、;/b></p><p><b>  j++;</b></p><p><b>  }</b></p><p>  else if(i<A.len&&j==B.len)</p><p><b>  {</b></p><p>

23、  C.date[k].col=A.date[i].col;</p><p>  C.date[k].row=A.date[i].row;</p><p>  C.date[k++].e=A.date[i].e;</p><p><b>  C.len++;</b></p><p><b>  i++;<

24、/b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if(A.date[i].row>B.date[j].row)</p><p><

25、b>  {</b></p><p>  C.date[k].col=B.date[j].col;</p><p>  C.date[k].row=B.date[j].row;</p><p>  C.date[k++].e=B.date[j].e;</p><p><b>  C.len++;</b>&

26、lt;/p><p><b>  j++;</b></p><p><b>  }</b></p><p>  else if(A.date[i].row<B.date[j].row)</p><p><b>  {</b></p><p>  C.da

27、te[k].col=A.date[i].col;</p><p>  C.date[k].row=A.date[i].row;</p><p>  C.date[k++].e=A.date[i].e;</p><p><b>  C.len++;</b></p><p><b>  i++;</b>

28、</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if(A.date[i].col==B.date[j].col)</p><p><b>  {

29、</b></p><p>  if(A.date[i].e+B.date[j].e!=0)</p><p><b>  {</b></p><p>  C.date[k].col=A.date[i].col;</p><p>  C.date[k].row=A.date[i].row;</p>

30、<p>  C.date[k++].e=A.date[i].e+B.date[j].e;</p><p><b>  C.len++;</b></p><p><b>  }</b></p><p><b>  i++;</b></p><p><b>  

31、j++;</b></p><p><b>  }</b></p><p>  else if(A.date[i].col>B.date[j].col)</p><p><b>  {</b></p><p>  C.date[k].col=B.date[j].col;</p&

32、gt;<p>  C.date[k].row=B.date[j].row;</p><p>  C.date[k++].e=B.date[j].e;</p><p><b>  C.len++;</b></p><p><b>  j++;</b></p><p><b> 

33、 }</b></p><p>  else if(A.date[i].col<B.date[j].col)</p><p><b>  {</b></p><p>  C.date[k].col=A.date[i].col;</p><p>  C.date[k].row=A.date[i].row;&

34、lt;/p><p>  C.date[k++].e=A.date[i].e;</p><p><b>  C.len++;</b></p><p><b>  i++;</b></p><p><b>  }</b></p><p><b>  }

35、</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {&

36、lt;/b></p><p>  cout<<"不能相加!";</p><p><b>  }</b></p><p><b>  }</b></p><p>  void sub(TSMatrix A,TSMatrix &B,TSMatrix &

37、;C)//相減</p><p><b>  {</b></p><p>  for(int k=0;k<B.len;k++)</p><p><b>  {</b></p><p>  B.date[k].e=-B.date[k].e;</p><p><b>

38、;  }</b></p><p>  if(A.m==B.m&&A.n==B.n)</p><p><b>  {</b></p><p>  add(A,B,C);</p><p><b>  }</b></p><p><b>  e

39、lse</b></p><p>  cout<<"不能相減!";</p><p>  for( k=0;k<B.len;k++)</p><p><b>  {</b></p><p>  B.date[k].e=-B.date[k].e;</p><

40、p><b>  }</b></p><p><b>  }</b></p><p>  int search(TSMatrix A,int m,int n)</p><p><b>  {</b></p><p>  int flag=-1;</p><

41、;p>  for(int i=0;i<MAXSIZE;i++)</p><p><b>  {</b></p><p>  if(A.date[i].row==m&&A.date[i].col==n)</p><p><b>  {</b></p><p><b&g

42、t;  flag=i;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  return flag;</p><p><b>

43、  }</b></p><p>  void mult(TSMatrix A,TSMatrix B,TSMatrix &C)//相乘</p><p><b>  {</b></p><p>  int i=0,j=0;</p><p>  if(A.n==B.m)</p><p&g

44、t;<b>  {</b></p><p><b>  C.m=A.m;</b></p><p><b>  C.n=B.n;</b></p><p>  for(i=0;i<A.len;i++)</p><p><b>  {</b></p&

45、gt;<p>  for(j=0;j<B.len;j++)</p><p><b>  {</b></p><p>  if(A.date[i].col==B.date[j].row)</p><p><b>  {</b></p><p>  int flag=search(C

46、,A.date[i].row,B.date[j].col);</p><p>  if(flag==-1)</p><p><b>  {</b></p><p>  C.date[C.len].col=B.date[j].col;</p><p>  C.date[C.len].row=A.date[i].row;&l

47、t;/p><p>  C.date[C.len++].e=A.date[i].e*B.date[j].e;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  C.

48、date[flag].e=C.date[flag].e+A.date[i].e*B.date[j].e;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b

49、></p><p><b>  }</b></p><p><b>  else</b></p><p>  {cout<<"不能相乘!"<<endl;}</p><p><b>  }</b></p><p

50、>  void print(TSMatrix A)</p><p><b>  {</b></p><p><b>  int k=0;</b></p><p><b>  int i,j;</b></p><p>  int M[MAXSIZE][MAXSIZE];&l

51、t;/p><p>  for(i=0;i<A.m;i++)</p><p><b>  {</b></p><p>  for(j=0;j<A.n;j++)</p><p><b>  {</b></p><p>  M[i][j]=0;</p><

52、;p><b>  }</b></p><p><b>  }</b></p><p>  while(k<A.len)</p><p><b>  {</b></p><p>  M[A.date[k].row-1][A.date[k].col-1]=A.date[

53、k].e;</p><p><b>  k++;</b></p><p><b>  }</b></p><p>  for(i=0;i<A.m;i++)</p><p><b>  {</b></p><p>  cout<<&quo

54、t;| ";</p><p>  for(j=0;j<A.n;j++)</p><p><b>  {</b></p><p>  cout<<M[i][j]<<" ";</p><p><b>  }</b></p><

55、;p>  cout<<"|"<<endl;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void showtip()</p><p><b>  {</b></p&g

56、t;<p>  cout<<"------------請(qǐng)選擇要執(zhí)行的操作--------"<<endl;</p><p>  cout<<endl;</p><p>  cout<<" 0---創(chuàng)建矩陣"<<endl;</p><p&

57、gt;  cout<<" 1---A+B"<<endl;</p><p>  cout<<" 2---A-B"<<endl;</p><p>  cout<<" 3---A*B"<<end

58、l;</p><p>  cout<<" 4---退出"<<endl;</p><p>  cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;</p><p><b>  }</b&g

59、t;</p><p><b>  主函數(shù):</b></p><p>  void main()</p><p><b>  {</b></p><p>  TSMatrix A,B,C;</p><p>  initMatrix(A);</p><p>

60、;  initMatrix(B);</p><p>  initMatrix(C);</p><p>  showtip();</p><p><b>  int i;</b></p><p><b>  cin>>i;</b></p><p>  while(t

61、rue)</p><p><b>  {</b></p><p><b>  switch(i)</b></p><p><b>  {</b></p><p><b>  case 0:</b></p><p>  system(

62、"cls");</p><p>  cout<<"創(chuàng)建矩陣A:"<<endl;</p><p>  createMatrix(A);</p><p>  cout<<"創(chuàng)建矩陣B:"<<endl;</p><p>  createMat

63、rix(B);</p><p>  showtip();</p><p><b>  break;</b></p><p><b>  case 1:</b></p><p>  system("cls");</p><p>  if(A.m==0||B.

64、m==0)</p><p><b>  {</b></p><p>  cout<<"未建矩陣"<<endl;</p><p><b>  }</b></p><p><b>  else</b></p><p&g

65、t;<b>  {</b></p><p>  initMatrix(C);</p><p>  add(A,B,C);</p><p>  if(A.m==B.m&&A.n==B.n)</p><p><b>  {</b></p><p>  cout&l

66、t;<"加的結(jié)果;"<<endl;</p><p><b>  print(A);</b></p><p>  cout<<"+"<<endl;;</p><p><b>  print(B);</b></p><p>

67、;  cout<<"="<<endl;</p><p><b>  print(C);</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  showtip();</p>

68、;<p><b>  break;</b></p><p><b>  case 2:</b></p><p>  system("cls");</p><p>  if(A.m==0||B.m==0)</p><p><b>  {</b>&

69、lt;/p><p>  cout<<"未建矩陣"<<endl;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  in

70、itMatrix(C);</p><p>  sub(A,B,C);</p><p>  cout<<"減的結(jié)果;"<<endl;</p><p><b>  print(A);</b></p><p>  cout<<"+"<<en

71、dl;;</p><p><b>  print(B);</b></p><p>  cout<<"="<<endl;</p><p><b>  print(C);</b></p><p><b>  }</b></p>

72、<p>  showtip();</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  system("cls");</p><p>  if(A.m==0||B.m==0)</p>

73、<p><b>  {</b></p><p>  cout<<"未建矩陣"<<endl;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {<

74、;/b></p><p>  initMatrix(C);</p><p>  mult(A,B,C);</p><p>  if(A.n==B.m)</p><p><b>  {</b></p><p>  cout<<"乘后的結(jié)果;"<<en

75、dl;</p><p><b>  print(A);</b></p><p>  cout<<"*"<<endl;</p><p><b>  print(B);</b></p><p>  cout<<"="<&l

76、t;endl;</p><p><b>  print(C);</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  showtip();</p><p><b>  break;</

77、b></p><p><b>  case 4:</b></p><p><b>  exit(0);</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><

78、b>  cin>>i;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  調(diào)試分析</b></p><p>  由于本程序涉及的函數(shù)比較多,所以開始時(shí)在函數(shù)調(diào)用上出現(xiàn)了混亂,把自己都

79、給搞糊涂了,后來(lái)經(jīng)仔細(xì)排查,最終發(fā)現(xiàn)了錯(cuò)誤。</p><p>  一開始看這個(gè)題目時(shí),感覺以前似乎做過,覺得很簡(jiǎn)單,所以沒有進(jìn)行認(rèn)真分析就開始急著寫程序,寫了一點(diǎn)后發(fā)現(xiàn)沒思路了,怎么也寫不下出了,搞了半天結(jié)果什么也沒寫出來(lái)。所以得出經(jīng)驗(yàn),以后寫程序必須先分析好思路,然后才開始著手去寫,這樣能達(dá)到現(xiàn)半功倍的效果。</p><p>  矩陣的加和減,在表面上看似乎很相似,只要把加改減就能完成任

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論