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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(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>  題目: 稀疏矩陣的運(yùn)算 </p><p>  院 系: 計(jì)算機(jī)科學(xué)與工程學(xué)院 </p><p>  專業(yè)班級(jí): 計(jì)算機(jī)10-*班

2、 </p><p>  學(xué) 號(hào): 201030**** </p><p>  學(xué)生姓名: ******    </p><p>  指導(dǎo)教師:  </p><p>  2011年 12 月 28 日</p><p>  課程

3、設(shè)計(jì)(論文)任務(wù)書</p><p>  計(jì)算機(jī)科學(xué)與工程 學(xué)院 </p><p>  2011年 11 月 8 日 </p><p><b>  目  錄</b></p><p><b>  1 問題描述1</b><

4、;/p><p><b>  2 需求分析1</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>

5、;</p><p>  4.1 “菜單”界面4</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>

6、<p>  4.7 矩陣的乘法運(yùn)算9</p><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>

7、;<p>  5.5 矩陣乘法12</p><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>

8、<p>  題目內(nèi)容:設(shè)計(jì)稀疏矩陣運(yùn)算系統(tǒng)實(shí)現(xiàn)兩個(gè)稀疏矩陣的加法、減法、乘法以及轉(zhuǎn)置操作。</p><p><b>  基本要求:</b></p><p>  存儲(chǔ)結(jié)構(gòu)選擇三元組存儲(chǔ)方式;</p><p>  實(shí)現(xiàn)一個(gè)稀疏矩陣的轉(zhuǎn)置運(yùn)算;</p><p>  實(shí)現(xiàn)兩個(gè)稀疏矩陣的加法運(yùn)算;</p>

9、;<p>  實(shí)現(xiàn)兩個(gè)稀疏矩陣的減法運(yùn)算;</p><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)為

10、稀疏矩陣運(yùn)算系統(tǒng)主要實(shí)現(xiàn)的功能如下:</p><p>  建立矩陣:只有先建立了矩陣,才能夠?qū)仃囘M(jìn)行運(yùn)算操作,包括建立矩陣A和矩陣B;</p><p>  轉(zhuǎn)置運(yùn)算操作:對(duì)矩陣A或者矩陣B進(jìn)行轉(zhuǎn)置運(yùn)算,輸出相應(yīng)的轉(zhuǎn)置矩陣;</p><p>  四則運(yùn)算操作:該步驟由兩個(gè)矩陣同時(shí)參與,對(duì)其進(jìn)行加法運(yùn)算(A+B)、減法運(yùn)算(A-B)以及乘法運(yùn)算(A*B和B*A);&l

11、t;/p><p>  退出:當(dāng)做完矩陣的運(yùn)算操作之后,就可以點(diǎn)擊它退出該界面。</p><p>  在這次設(shè)計(jì)中用到了一些變量和函數(shù),例如:void Display(Matrix M);int Max(int i,int j);Matrix Zero(Matrix M)等,下面會(huì)做進(jìn)一步詳細(xì)的介紹。</p><p><b>  3 總體設(shè)計(jì)</b>

12、</p><p>  3.1 Matrix結(jié)構(gòu)的定義</p><p>  struct Matrix{</p><p>  int H;//矩陣的行數(shù)</p><p>  int L;//矩陣的列數(shù)</p><p>  int fly;//矩陣中的非零元個(gè)數(shù)</p><p>  int

13、 zhi[Maxsize][Maxsize];//非零元值[所在行][所在列]</p><p><b>  }; </b></p><p><b>  操作集合:</b></p><p>  Matrix Enter(Matrix M);//建立矩陣M</p><p>  void Displ

14、ay(Matrix M);//顯示矩陣M</p><p>  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&

15、gt;  void Multi(Matrix M,Matrix N);//求積運(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>&l

16、t;p>  該運(yùn)算系統(tǒng)的系統(tǒng)流程圖如圖1所示:</p><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><

17、;p>  圖2 “菜單”界面</p><p><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)控制變量,按提示輸入非

18、零元所在的行h和列l(wèi)以及非零元的值,如果輸入的行h或者列l(wèi)大于矩陣M的行H或列L,則提示輸入錯(cuò)誤;最后將非零元的值保存在矩陣M中的相應(yīng)位置。程序如下:</p><p>  Matrix Enter(Matrix M)//建立矩陣</p><p><b>  {</b></p><p>  cout<<"請(qǐng)輸入矩陣的行數(shù)和

19、列數(shù):";</p><p>  cin>>M.H>>M.L;</p><p>  cout<<"請(qǐng)輸入矩陣的非零元個(gè)數(shù):";</p><p>  cin>>M.fly;</p><p>  cout<<endl;</p><p>

20、  if(M.fly>(M.H*M.L))</p><p><b>  {</b></p><p>  cout<<"非零元個(gè)數(shù)多于矩陣元素總數(shù),請(qǐng)重新輸入!"<<endl;</p><p>  cout<<"請(qǐng)重新輸入矩陣的非零元個(gè)數(shù):";</p>

21、<p>  cin>>M.fly;</p><p><b>  }</b></p><p>  M=Zero(M);</p><p><b>  int h;</b></p><p><b>  int l;</b></p><p&g

22、t;  for(int n=1;n<=M.fly;n++)//輸入非零元所在的行、列和值</p><p><b>  {</b></p><p>  cout<<"請(qǐng)輸入第"<<n<<"個(gè)非零元所在的行和列:";</p><p>  cin>>h&g

23、t;>l;</p><p>  if(h>M.H||l>M.L)//行列輸入錯(cuò)誤提示</p><p><b>  {</b></p><p>  cout<<"行列輸入錯(cuò)誤,請(qǐng)重新輸入:"<<endl;</p><p>  cout<<&quo

24、t;請(qǐng)重新輸入第"<<n<<"個(gè)非零元所在的行和列:";</p><p>  cin>>h>>l;</p><p><b>  }</b></p><p>  cout<<"請(qǐng)輸入該非零元的值:";</p><p&g

25、t;  cin>>M.zhi[h][l];</p><p>  cout<<endl;</p><p><b>  }</b></p><p><b>  return M;</b></p><p><b>  }</b></p><

26、p>  注:該函數(shù)中調(diào)用的Zero()函數(shù)的功能為將矩陣M根據(jù)行數(shù)H和列數(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>

27、<p>  for(int j=1;j<=M.L;j++)</p><p>  M.zhi[i][j]=0;</p><p><b>  return M;</b></p><p><b>  }</b></p><p><b>  4.3 顯示矩陣</b>&l

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

29、/p><p>  cout<<"矩陣為:"<<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&g

30、t;  printf("%-4d",M.zhi[i][j]);</p><p><b>  count++;</b></p><p>  if(count==M.L)</p><p><b>  {</b></p><p>  cout<<endl;</p>

31、;<p><b>  count=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  cout<<endl;</p><p><b>  }</b></p>

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

33、/b></p><p><b>  C.H=M.L;</b></p><p><b>  C.L=M.H;</b></p><p>  cout<<"原來的";</p><p>  Display(M);</p><p>  for(in

34、t i=1;i<=M.L;i++)</p><p>  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&

35、gt;  cout<<"轉(zhuǎn)置后的";</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

36、 Add(Matrix M,Matrix N)//A+B</p><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>

37、<p><b>  C.L=n2;</b></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>

38、<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é)果";</p><p>  Display(C);</p><p><b>  }<

39、/b></p><p>  4.6 矩陣的減法運(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=Ma

40、x(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></p><p>  C=Zero(C);</p><p>  for(int i=1;

41、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.zhi[i][j];</p><p><b>  }</b></p>&l

42、t;p>  cout<<" A-B 的運(yùn)算結(jié)果";</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ù)不相同,則無法

43、進(jìn)行乘法運(yùn)算,系統(tǒng)會(huì)提示錯(cuò)誤,其代碼如下:</p><p>  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>

44、;  cout<<"矩陣A的列數(shù)和矩陣B的行數(shù)不相同,無法進(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&

45、gt;</p><p><b>  C.H=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

46、j=1;j<=Maxsize;j++)</p><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>

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

48、;</p><p><b>  5.1 輸入矩陣</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 &l

49、t;/p><p><b>  5.2 矩陣轉(zhuǎn)置</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)置

50、 </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

51、><p><b>  5.4 矩陣減法</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>

52、<p>  在“菜單”提示下,輸入“7”,進(jìn)行兩個(gè)矩陣的第一種乘法運(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&g

53、t;  算法在運(yùn)行時(shí)還有退出及錯(cuò)誤提示功能,在“菜單”提示下,輸入“0”則退出系統(tǒng),如圖11所示;若輸入0-8以外的數(shù)字,則會(huì)出現(xiàn)錯(cuò)誤提示,如圖12所示:</p><p>  圖11 退出 圖12 錯(cuò)誤提示 </p><p><b>  6 總結(jié)</b></p><p>  通過對(duì)數(shù)據(jù)結(jié)

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

55、少了,很多都不知道,也遇到了不少實(shí)際問題,使我發(fā)現(xiàn)了在學(xué)習(xí)過程中的不足。這次課程設(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í)的不扎實(shí),以后應(yīng)在學(xué)習(xí)過程中加強(qiáng)這方面的學(xué)習(xí)。</p>&

56、lt;p>  通過本次課程設(shè)計(jì),我對(duì)數(shù)據(jù)結(jié)構(gòu)這門課有了進(jìn)一步的理解。數(shù)據(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)程

57、序的編寫,更要多思考算法思想,加強(qiáng)對(duì)算法思想的鍛煉和理解。</p><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é)均.Visu

58、al C++面向?qū)ο蟪绦蛟O(shè)計(jì).北京:清華大學(xué)出版社,2009</p><p>  [3]何欽銘,顏暉.C語言程序設(shè)計(jì).北京:高等教育出版社,2008</p><p>  Matrix CreateMatrix()</p><p><b>  {</b></p><p><b>  matrix A;</b

59、></p><p>  printf("\n\t\t親輸入稀疏矩陣的行數(shù),列數(shù)和非零元個(gè)數(shù)(用逗號(hào)隔開);");</p><p>  scanf("%d,%d,%d",&A.rows,&A.terms);</p><p>  for(int n=o;n<=A.terms-1;n++)</p&g

60、t;<p>  {printf("\n\t\t輸入非零元值個(gè)數(shù)(格式:行號(hào),列號(hào),值):");</p><p>  scanf("%d,%d,%d",&A.data[n].i,&A.data[n].j,&A.data[n].v);</p><p><b>  }</b></p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論