2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  數(shù)據(jù)結(jié)構(gòu)</b></p><p><b>  課程設(shè)計(jì)說明書</b></p><p><b>  目  錄</b></p><p><b>  1 問題描述1</b></p><p><b>  2 需求分析1&

2、lt;/b></p><p><b>  3 總體設(shè)計(jì)2</b></p><p>  3.1 Matrix結(jié)構(gòu)的定義2</p><p>  3.2 系統(tǒng)流程圖3</p><p><b>  4 詳細(xì)設(shè)計(jì)4</b></p><p>  4.1 “菜單”界面4&l

3、t;/p><p>  4.2 建立矩陣4</p><p>  4.3 顯示矩陣6</p><p>  4.4 矩陣的轉(zhuǎn)置7</p><p>  4.5 矩陣的加法運(yùn)算8</p><p>  4.6 矩陣的減法運(yùn)算9</p><p>  4.7 矩陣的乘法運(yùn)算9</p>&l

4、t;p><b>  5 程序運(yùn)行11</b></p><p>  5.1 輸入矩陣11</p><p>  5.2 矩陣轉(zhuǎn)置11</p><p>  5.3 矩陣加法12</p><p>  5.4 矩陣減法12</p><p>  5.5 矩陣乘法12</p>&

5、lt;p>  5.6 退出及錯(cuò)誤提示13</p><p><b>  6 總結(jié)13</b></p><p><b>  參考文獻(xiàn)14</b></p><p><b>  1 問題描述</b></p><p>  題目內(nèi)容:設(shè)計(jì)稀疏矩陣運(yùn)算系統(tǒng)實(shí)現(xiàn)兩個(gè)稀疏矩陣的加法、

6、減法、乘法以及轉(zhuǎn)置操作。</p><p><b>  基本要求:</b></p><p>  存儲結(jié)構(gòu)選擇三元組存儲方式;</p><p>  實(shí)現(xiàn)一個(gè)稀疏矩陣的轉(zhuǎn)置運(yùn)算;</p><p>  實(shí)現(xiàn)兩個(gè)稀疏矩陣的加法運(yùn)算;</p><p>  實(shí)現(xiàn)兩個(gè)稀疏矩陣的減法運(yùn)算;</p>

7、<p>  實(shí)現(xiàn)兩個(gè)稀疏矩陣的乘法運(yùn)算。</p><p>  設(shè)計(jì)目的:通過本次課程設(shè)計(jì),了解稀疏矩陣的一些基本運(yùn)算操作,并通過 相關(guān)的程序代碼實(shí)現(xiàn)。</p><p><b>  2 需求分析</b></p><p>  經(jīng)過本次的課程設(shè)計(jì),我認(rèn)為稀疏矩陣運(yùn)算系統(tǒng)主要實(shí)現(xiàn)的功能如下:</p><p>

8、;  建立矩陣:只有先建立了矩陣,才能夠?qū)仃囘M(jìn)行運(yùn)算操作,包括建立矩陣A和矩陣B;</p><p>  轉(zhuǎn)置運(yùn)算操作:對矩陣A或者矩陣B進(jìn)行轉(zhuǎn)置運(yùn)算,輸出相應(yīng)的轉(zhuǎn)置矩陣;</p><p>  四則運(yùn)算操作:該步驟由兩個(gè)矩陣同時(shí)參與,對其進(jìn)行加法運(yùn)算(A+B)、減法運(yùn)算(A-B)以及乘法運(yùn)算(A*B和B*A);</p><p>  退出:當(dāng)做完矩陣的運(yùn)算操作之后,就

9、可以點(diǎn)擊它退出該界面。</p><p>  在這次設(shè)計(jì)中用到了一些變量和函數(shù),例如:void Display(Matrix M);int Max(int i,int j);Matrix Zero(Matrix M)等,下面會做進(jìn)一步詳細(xì)的介紹。</p><p><b>  3 總體設(shè)計(jì)</b></p><p>  3.1 Matrix結(jié)構(gòu)的定義

10、</p><p>  struct Matrix{</p><p>  int H;//矩陣的行數(shù)</p><p>  int L;//矩陣的列數(shù)</p><p>  int fly;//矩陣中的非零元個(gè)數(shù)</p><p>  int zhi[Maxsize][Maxsize];//非零元值[所在行][所在列

11、]</p><p><b>  }; </b></p><p><b>  操作集合:</b></p><p>  Matrix Enter(Matrix M);//建立矩陣M</p><p>  void Display(Matrix M);//顯示矩陣M</p><p

12、>  void Transpose(Matrix M);//M矩陣的轉(zhuǎn)置</p><p>  void Add(Matrix M,Matrix N);//求和運(yùn)算 A+B</p><p>  void Sub(Matrix M,Matrix N);//求差運(yùn)算 A-B</p><p>  void Multi(Matrix M,Matrix N);//

13、求積運(yùn)算 A*B</p><p>  int Max(int i,int j);//求最大值</p><p>  Matrix Zero(Matrix M);//矩陣所有元素賦值為0</p><p><b>  3.2 系統(tǒng)流程圖</b></p><p>  該運(yùn)算系統(tǒng)的系統(tǒng)流程圖如圖1所示:</p>

14、<p><b>  圖1 系統(tǒng)流程圖</b></p><p><b>  4 詳細(xì)設(shè)計(jì)</b></p><p>  4.1 “菜單”界面</p><p>  進(jìn)入稀疏矩陣運(yùn)算系統(tǒng)后的“菜單”界面如圖2所示。</p><p>  圖2 “菜單”界面</p><p>

15、;<b>  4.2 建立矩陣</b></p><p>  矩陣在建立之后才能夠進(jìn)行運(yùn)算操作,建立矩陣A和矩陣B,調(diào)用函數(shù)Enter(M),首先根據(jù)所輸入的矩陣M的行數(shù)H和列數(shù)L,建立H*L的矩陣M,并且調(diào)用函數(shù)Zero(M)將其所有元素均賦值為0;其次再根據(jù)所輸入矩陣M的非零元個(gè)數(shù)fly做循環(huán)控制變量,按提示輸入非零元所在的行h和列l(wèi)以及非零元的值,如果輸入的行h或者列l(wèi)大于矩陣M的行H或

16、列L,則提示輸入錯(cuò)誤;最后將非零元的值保存在矩陣M中的相應(yīng)位置。程序如下:</p><p>  Matrix Enter(Matrix M)//建立矩陣</p><p><b>  {</b></p><p>  cout<<"請輸入矩陣的行數(shù)和列數(shù):";</p><p>  cin&g

17、t;>M.H>>M.L;</p><p>  cout<<"請輸入矩陣的非零元個(gè)數(shù):";</p><p>  cin>>M.fly;</p><p>  cout<<endl;</p><p>  if(M.fly>(M.H*M.L))</p>&l

18、t;p><b>  {</b></p><p>  cout<<"非零元個(gè)數(shù)多于矩陣元素總數(shù),請重新輸入!"<<endl;</p><p>  cout<<"請重新輸入矩陣的非零元個(gè)數(shù):";</p><p>  cin>>M.fly;</p>

19、;<p><b>  }</b></p><p>  M=Zero(M);</p><p><b>  int h;</b></p><p><b>  int l;</b></p><p>  for(int n=1;n<=M.fly;n++)//輸入非

20、零元所在的行、列和值</p><p><b>  {</b></p><p>  cout<<"請輸入第"<<n<<"個(gè)非零元所在的行和列:";</p><p>  cin>>h>>l;</p><p>  if(h>

21、;M.H||l>M.L)//行列輸入錯(cuò)誤提示</p><p><b>  {</b></p><p>  cout<<"行列輸入錯(cuò)誤,請重新輸入:"<<endl;</p><p>  cout<<"請重新輸入第"<<n<<"個(gè)

22、非零元所在的行和列:";</p><p>  cin>>h>>l;</p><p><b>  }</b></p><p>  cout<<"請輸入該非零元的值:";</p><p>  cin>>M.zhi[h][l];</p>

23、<p>  cout<<endl;</p><p><b>  }</b></p><p><b>  return M;</b></p><p><b>  }</b></p><p>  注:該函數(shù)中調(diào)用的Zero()函數(shù)的功能為將矩陣M根據(jù)行數(shù)H和

24、列數(shù)L把所有的元素賦值為0,代碼如下:</p><p>  Matrix Zero(Matrix M)//矩陣所有元素賦值為0</p><p><b>  {</b></p><p>  for(int i=1;i<=M.H;i++)</p><p>  for(int j=1;j<=M.L;j++)&

25、lt;/p><p>  M.zhi[i][j]=0;</p><p><b>  return M;</b></p><p><b>  }</b></p><p><b>  4.3 顯示矩陣</b></p><p>  建立好矩陣以后,為了驗(yàn)證所建立的矩

26、陣是否成功,以及在后期運(yùn)算時(shí)矩陣的顯示,設(shè)計(jì)該函數(shù),能更直觀的看到輸入以及輸出的矩陣,代碼如下:</p><p>  void Display(Matrix M)//顯示矩陣</p><p><b>  {</b></p><p>  int count=0;</p><p>  cout<<"矩

27、陣為:"<<endl;</p><p>  for(int i=1;i<=M.H;i++)</p><p>  for(int j=1;j<=M.L;j++)</p><p><b>  {</b></p><p>  printf("%-4d",M.zhi[i][j

28、]);</p><p><b>  count++;</b></p><p>  if(count==M.L)</p><p><b>  {</b></p><p>  cout<<endl;</p><p><b>  count=0;</b&

29、gt;</p><p><b>  }</b></p><p><b>  }</b></p><p>  cout<<endl;</p><p><b>  }</b></p><p><b>  4.4 矩陣的轉(zhuǎn)置</b&

30、gt;</p><p>  該函數(shù)實(shí)現(xiàn)的是矩陣A或矩陣B的轉(zhuǎn)置操作,通過對矩陣的行和列進(jìn)行調(diào)換,利用for()循環(huán)語句實(shí)現(xiàn)對矩陣A或矩陣B的轉(zhuǎn)置,其代碼如下:</p><p>  void Transpose(Matrix M)//矩陣轉(zhuǎn)置</p><p><b>  {</b></p><p><b>  

31、C.H=M.L;</b></p><p><b>  C.L=M.H;</b></p><p>  cout<<"原來的";</p><p>  Display(M);</p><p>  for(int i=1;i<=M.L;i++)</p><p&

32、gt;  for(int j=1;j<=M.H;j++)</p><p><b>  {</b></p><p>  C.zhi[i][j]=M.zhi[j][i];</p><p><b>  }</b></p><p>  cout<<"轉(zhuǎn)置后的";<

33、/p><p>  Display(C);</p><p><b>  }</b></p><p>  4.5 矩陣的加法運(yùn)算</p><p>  實(shí)現(xiàn)兩個(gè)矩陣之間的加法運(yùn)算,即A+B,其代碼如下:</p><p>  void Add(Matrix M,Matrix N)//A+B</p&g

34、t;<p><b>  {</b></p><p>  int n1=Max(M.H,N.H);</p><p>  int n2=Max(M.L,N.L);</p><p><b>  C.H=n1;</b></p><p><b>  C.L=n2;</b>&

35、lt;/p><p>  C=Zero(C);</p><p>  for(int i=1;i<=n1;i++)</p><p>  for(int j=1;j<=n2;j++)</p><p><b>  {</b></p><p>  C.zhi[i][j]=M.zhi[i][j]+N.

36、zhi[i][j];</p><p><b>  }</b></p><p>  cout<<" A+B 的運(yùn)算結(jié)果";</p><p>  Display(C);</p><p><b>  }</b></p><p>  4.6 矩陣的減法

37、運(yùn)算</p><p>  實(shí)現(xiàn)兩個(gè)矩陣之間的減法運(yùn)算,即A-B,其代碼如下:</p><p>  void Sub(Matrix M,Matrix N)//A-B</p><p><b>  {</b></p><p>  int n1=Max(M.H,N.H);</p><p>  int

38、n2=Max(M.L,N.L);</p><p><b>  C.H=n1;</b></p><p><b>  C.L=n2;</b></p><p>  C=Zero(C);</p><p>  for(int i=1;i<=n1;i++)</p><p>  fo

39、r(int j=1;j<=n2;j++)</p><p><b>  {</b></p><p>  C.zhi[i][j]=M.zhi[i][j]-N.zhi[i][j];</p><p><b>  }</b></p><p>  cout<<" A-B 的運(yùn)算結(jié)果&

40、quot;;</p><p>  Display(C);</p><p><b>  }</b></p><p>  4.7 矩陣的乘法運(yùn)算</p><p>  實(shí)現(xiàn)兩個(gè)矩陣之間的乘法運(yùn)算,即A*B,如果矩陣A的列數(shù)和矩陣B的行數(shù)不相同,則無法進(jìn)行乘法運(yùn)算,系統(tǒng)會提示錯(cuò)誤,其代碼如下:</p><p

41、>  void Multi(Matrix M,Matrix N)//A*B</p><p><b>  {</b></p><p>  if(M.L!=N.H)</p><p><b>  {</b></p><p>  cout<<"矩陣A的列數(shù)和矩陣B的行數(shù)不相同,

42、無法進(jìn)行乘法運(yùn)算!\n";</p><p><b>  }</b></p><p><b>  else</b></p><p>  if(M.L==N.H)</p><p><b>  {</b></p><p><b>  C.H

43、=M.H;</b></p><p><b>  C.L=N.L;</b></p><p>  C=Zero(C);</p><p>  for(int i=1;i<=Maxsize;i++)</p><p>  for(int j=1;j<=Maxsize;j++)</p><

44、p>  for(int k=1;k<=Maxsize;k++)</p><p><b>  {</b></p><p>  C.zhi[i][j]+=M.zhi[i][k]*N.zhi[k][j];</p><p><b>  }</b></p><p>  cout<<&q

45、uot;運(yùn)算結(jié)果";</p><p>  Display(C);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  5 程序運(yùn)行</b></p><p><b>  5.1 輸

46、入矩陣</b></p><p>  運(yùn)行該運(yùn)算系統(tǒng),進(jìn)入“菜單”選項(xiàng)以后,輸入“1”,選擇“輸入矩陣A”,運(yùn)算結(jié)果如圖3所示;輸入“2”,選擇“輸入矩陣B”,運(yùn)算結(jié)果如圖4所示:</p><p>  圖3 輸入矩陣A 圖4 輸入矩陣B </p><p><b>  5.2 矩陣轉(zhuǎn)置

47、</b></p><p>  輸入矩陣A和矩陣B以后,在“菜單”提示下,輸入“3”,進(jìn)行矩陣A的轉(zhuǎn)置,運(yùn)算結(jié)果如圖5所示;輸入“4”,進(jìn)行矩陣B的轉(zhuǎn)置,運(yùn)算結(jié)果如圖6所示:</p><p>  圖5 矩陣A的轉(zhuǎn)置 圖6 矩陣B的轉(zhuǎn)置

48、 </p><p><b>  5.3 矩陣加法</b></p><p>  在“菜單”提示下,輸入“5”,進(jìn)行兩個(gè)矩陣的加法運(yùn)算,即A+B,運(yùn)算結(jié)果如圖7所示:</p><p><b>  圖7 矩陣加法</b></p><p><b>  5.4 矩陣減法<

49、/b></p><p>  在“菜單”提示下,輸入“6”,進(jìn)行兩個(gè)矩陣的加法運(yùn)算,即A-B,運(yùn)算結(jié)果如圖8所示:</p><p><b>  圖8 矩陣減法</b></p><p><b>  5.5 矩陣乘法</b></p><p>  在“菜單”提示下,輸入“7”,進(jìn)行兩個(gè)矩陣的第一種乘法

50、運(yùn)算,即A*B,運(yùn)算結(jié)果如圖9所示;輸入“8”,進(jìn)行兩個(gè)矩陣的第二種乘法運(yùn)算,即B*A,運(yùn)算結(jié)果如圖10所示:</p><p>  圖9 矩陣乘法1(A*B) 圖10 矩陣乘法2(B*A) </p><p>  5.6 退出及錯(cuò)誤提示 </p><p>  算法在運(yùn)行時(shí)還有退出及錯(cuò)誤提示功能,在“菜單”提示下,輸入“0”則退

51、出系統(tǒng),如圖11所示;若輸入0-8以外的數(shù)字,則會出現(xiàn)錯(cuò)誤提示,如圖12所示:</p><p>  圖11 退出 圖12 錯(cuò)誤提示 </p><p><b>  6 總結(jié)</b></p><p>  通過對數(shù)據(jù)結(jié)構(gòu)這門課的學(xué)習(xí),我了解到:“數(shù)據(jù)結(jié)構(gòu)”在計(jì)算機(jī)科學(xué)中是一門綜合性的專業(yè)基礎(chǔ)課

52、。而我們現(xiàn)在所學(xué)的數(shù)據(jù)結(jié)構(gòu)是C語言版的,是建立在C語言基礎(chǔ)之上的,若是C語言基礎(chǔ)知識不牢固,要想學(xué)好數(shù)據(jù)結(jié)構(gòu)這門課程是有一定的困難的。所以在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)這門課程的時(shí)候,也順便復(fù)習(xí)了C語言的相關(guān)內(nèi)容,加深了我對C語言的理解和應(yīng)用,并且也深深體會到了數(shù)據(jù)結(jié)構(gòu)這門課程的重要性。</p><p>  在本次課程設(shè)計(jì)過程中,我體會到自己所學(xué)的東西太少了,很多都不知道,也遇到了不少實(shí)際問題,使我發(fā)現(xiàn)了在學(xué)習(xí)過程中的不足。這次

53、課程設(shè)計(jì),我本來打算做的是MFC可視化的人機(jī)友好界面,但是由于在程序設(shè)計(jì)以及運(yùn)行時(shí)出現(xiàn)了太多目前無法解決的問題,只好退而求其次,應(yīng)用了DOS界面來完成本次課程設(shè)計(jì)。在代碼設(shè)計(jì)時(shí),也出現(xiàn)了一些基本的C語言語法錯(cuò)誤,如函數(shù)的嵌套定義等,在老師和同學(xué)的幫助下都一一解決了,這也反映了我C語言基礎(chǔ)知識的不扎實(shí),以后應(yīng)在學(xué)習(xí)過程中加強(qiáng)這方面的學(xué)習(xí)。</p><p>  通過本次課程設(shè)計(jì),我對數(shù)據(jù)結(jié)構(gòu)這門課有了進(jìn)一步的理解。數(shù)

54、據(jù)結(jié)構(gòu)這門課最主要的內(nèi)容在于算法思想,而程序編寫次之。在編寫程序時(shí),如果算法思想</p><p>  是正確的,那么這個(gè)程序就已經(jīng)成功了一多半。算法思想在數(shù)據(jù)結(jié)構(gòu)中占有重要地位,如果說C語言是數(shù)據(jù)結(jié)構(gòu)這座程序大廈的根基的話,那么算法思想就是構(gòu)成大廈的一磚一瓦,再好的根基離了磚瓦也構(gòu)不成大廈。所以,要想學(xué)好數(shù)據(jù)結(jié)構(gòu)這門課程,平時(shí)不只要加強(qiáng)程序的編寫,更要多思考算法思想,加強(qiáng)對算法思想的鍛煉和理解。</p>

55、;<p>  本次課程設(shè)計(jì)得到了老師和很多同學(xué)的幫助,在此一并表示感謝。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]秦鋒.數(shù)據(jù)結(jié)構(gòu)(C語言版).北京:清華大學(xué)出版社,2011</p><p>  [2]溫秀梅,丁學(xué)均.Visual C++面向?qū)ο蟪绦蛟O(shè)計(jì).北京:清華大學(xué)出版社,2009</p&g

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論