數(shù)據(jù)結(jié)構(gòu)-矩陣相關(guān)操作的課程設(shè)計_第1頁
已閱讀1頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課 程 設(shè) 計</b></p><p><b>  目 錄</b></p><p>  1 概述………………………………………………………………………3</p><p>  2 設(shè)計目的…………………………………………………………………3</p><p>  3

2、 設(shè)計功能說明……………………………………………………………3</p><p>  4 詳細設(shè)計說明……………………………………………………………3</p><p>  5 流程圖……………………………………………………………………4</p><p>  6 調(diào)試及結(jié)果………………………………………………………………5</p><p>

3、  1程序調(diào)試 ………………………………………………………………5</p><p>  2運行編譯連接過程 ………………………………………………… 5-8</p><p>  7 總結(jié)………………………………………………………………………9</p><p>  附錄 …………………………………………………………………10-24</p><p&

4、gt;  參考文獻 ………………………………………………………………25</p><p>  成績評定表 ……………………………………………………………26</p><p><b>  1 概 述</b></p><p>  數(shù)據(jù)結(jié)構(gòu)是一門理論性強、思維抽象、難度較大的課程,是基礎(chǔ)課和專業(yè)課之間的橋梁只有進行實際操作,將理論應(yīng)用于實際中,才能

5、確實掌握書中的知識點。通過課程設(shè)計,不僅可以加深學(xué)生對數(shù)據(jù)結(jié)構(gòu)基本概念的了解,鞏固學(xué)習(xí)成果,還能夠提高實動手力。為學(xué)生后繼課程的學(xué)習(xí)打下良好的基礎(chǔ)。</p><p><b>  2 設(shè)計目的</b></p><p>  《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計是在教學(xué)實踐基礎(chǔ)上進行的一次大型實驗,也是對該課程所學(xué)理論知識的深化和提高。因此,要求學(xué)生能綜合應(yīng)用所學(xué)知識,設(shè)計與制造出具有較復(fù)

6、雜功能的應(yīng)用系統(tǒng),并且在實驗的基本技能方面上進行一次全面的訓(xùn)練。通過程序的編譯掌握對程序的調(diào)試方法及思想,并且讓學(xué)生學(xué)會使用一些編程技巧。促使學(xué)生養(yǎng)成良好的編程習(xí)慣。</p><p>  1.使學(xué)生能夠較全面地鞏固和應(yīng)用課堂中所學(xué)的的基本理論和程序設(shè)計方法,能夠較熟練地完成程序的設(shè)計和調(diào)試。</p><p>  2.培養(yǎng)學(xué)生綜合運用所學(xué)知識獨立完成程序課題的能力。</p>&

7、lt;p>  3.培養(yǎng)學(xué)生勇于探索、嚴謹推理、實事求是、有錯必改,用實踐來檢驗理論,全方位考慮問題等科學(xué)技術(shù)人員應(yīng)具有的素質(zhì)。</p><p>  4.提高學(xué)生對工作認真負責(zé)、一絲不茍,對同學(xué)團結(jié)友愛,協(xié)作攻關(guān)的素質(zhì)。</p><p>  5.培養(yǎng)學(xué)生從資料文獻、科學(xué)實驗中獲得知識的能力,提高學(xué)生從別人經(jīng)驗中找到解決問題的新途徑的悟性,初步培養(yǎng)工程意識和創(chuàng)新能力。</p>

8、<p>  6.對學(xué)生掌握知識的深度、運用理論去處理問題的能力、實驗?zāi)芰?、課程設(shè)計能力、書面及口頭表達能力進行考核。</p><p><b>  3 設(shè)計功能分析</b></p><p><b>  本設(shè)計的功能如下:</b></p><p>  1、對于用戶給定的矩陣相乘可以進行存儲,并且用戶可以更改<

9、;/p><p>  2、根據(jù)用戶的要求可以選擇相應(yīng)的功能加減乘及轉(zhuǎn)置</p><p>  3、然后顯示用戶輸入的矩陣進行運算并得到結(jié)果后保存到文件</p><p><b>  4 詳細設(shè)計說明</b></p><p>  本程序用數(shù)據(jù)存儲的方式建立矩陣。然后用相加,減,乘,轉(zhuǎn)置的方式計算出最終的矩陣</p>&

10、lt;p><b>  5 流程圖</b></p><p><b>  6 調(diào)試及運行結(jié)果</b></p><p><b>  1、程序調(diào)試</b></p><p>  1)使用Microsoft visual c++ 編輯軟件進行源程序的編寫。</p><p>  2)使

11、用Microsoft visual c++軟件進行編譯,步驟:單擊“組建”選擇“編譯”。</p><p>  3)使用Microsoft visual c++運行程序并調(diào)試,步驟:單擊“組建”選擇“執(zhí)行”。</p><p>  2、運行及編譯連接過程</p><p><b>  1)現(xiàn)在進行調(diào)試</b></p><p>

12、<b>  2)下面進行編譯</b></p><p><b>  3)開始運行程序</b></p><p>  4)首先進行選擇,先選1號進行加法運算</p><p>  這時候系統(tǒng)會彈出TXT文本</p><p>  5)做完加法以后,進行選擇,選“Y”繼續(xù),然后進行減法運行</p>

13、<p>  同樣,程序接著把兩個YXT文本彈出來</p><p>  6)同樣上面的操作,選擇3,進行乘法運行</p><p>  在彈出的TXT文本里面輸入矩陣A,關(guān)閉后,在另一個彈出的TXT中輸入矩陣B</p><p>  最后輸出矩陣B,并彈出結(jié)果的TXT</p><p>  7)最后選擇4,進行矩陣轉(zhuǎn)置的調(diào)試</p&

14、gt;<p><b>  轉(zhuǎn)置后的結(jié)果</b></p><p><b>  8)選擇N程序結(jié)束</b></p><p><b>  7 總 結(jié)</b></p><p>  課程設(shè)計終于做完了,雖然有些疲勞和困倦,但也讓我收獲了很多。數(shù)據(jù)結(jié)構(gòu)已經(jīng)學(xué)了一個學(xué)期,有許多知識都存在似懂非懂的現(xiàn)

15、象,這種現(xiàn)象通過實際的上機操作,實際應(yīng)用,已經(jīng)減少了許多。對這些知識也有了更深的理解和很好的掌握。許多困惑,有許多已經(jīng)通過實際操作解決了,并能夠深刻認識。通過課程設(shè)計,明白到了原來開發(fā)一個小小的實用系統(tǒng),是需要考慮到很多方面的問題的,這些都是要在實踐中摸索的,這與平時做練習(xí)是不同的,但也因為平時有許多的練習(xí)基礎(chǔ),會使你做起程序來,更加得心應(yīng)手。另外就是要把錯誤總結(jié),有許多錯誤是平時自己一手制造的,因此很深刻,但也有些錯誤是自己還沒有接觸

16、的,這就應(yīng)該看多些有關(guān)的書記以及別人的總結(jié),使自己不犯這些錯誤。這樣長期總結(jié),會對自己有很大的幫助。</p><p><b>  附 錄</b></p><p><b>  實現(xiàn)的程序代碼: </b></p><p>  #include<iostream></p><p>  #in

17、clude <stdio.h></p><p>  #include <stdlib.h></p><p>  using namespace std;</p><p>  #include"void Transposition.h"</p><p>  #include"void Mat

18、rixMutiply.h"</p><p>  /* 給 int 類型定義別名 datatype */</p><p>  typedef int datatype;</p><p>  /* 函數(shù)聲明部分 */</p><p>  datatype** Create(int m, int n);</p><p&

19、gt;  void Reset(datatype**, int, int);</p><p>  void Input(datatype**, int, int);</p><p>  void Output(datatype**, int, int);</p><p>  void Summation(datatype**, datatype**, datatyp

20、e**);</p><p>  void Subtraction(datatype**, datatype**, datatype**);</p><p>  void MatrixFree(datatype** , int);</p><p>  /* 定義三個矩陣的行列大小 */</p><p>  int row_a, col_a;&l

21、t;/p><p>  int row_b, col_b;</p><p>  int row_c, col_c;</p><p>  /* 定義文件指針 */</p><p><b>  FILE *fp;</b></p><p>  int main()</p><p>&l

22、t;b>  {</b></p><p><b>  {</b></p><p>  system("color 1c");</p><p><b>  }</b></p><p>  datatype **a, **b, **c, **d;</p>

23、<p>  printf(" ###########################################\n"); </p><p>  printf(" ##### 歡迎您使用矩陣系統(tǒng) ######\n"); </p><p>  print

24、f(" ##### 系統(tǒng)功能: ######\n"); </p><p>  printf(" ##### 計算兩個矩陣相加,相減; ######\n"); </p><p>  printf("

25、 ##### 矩陣相乘;矩陣轉(zhuǎn)置 ######\n"); </p><p>  printf(" ###########################################\n"); </p><p>  printf(" ## 請選擇您需要的運算,

26、按回車鍵結(jié)束 ##\n"); </p><p>  printf(" ###########################################\n"); </p><p>  printf(" ########### 1:矩陣相加 ###########

27、\n"); </p><p>  printf(" ########### 2:矩陣相減 ###########\n"); </p><p>  printf(" ########### 3:矩陣相乘 ###########\n"); </

28、p><p>  printf(" ########### 4:矩陣轉(zhuǎn)置 ###########\n"); </p><p>  printf(" ###########################################\n"); </p><p

29、>  char flag;</p><p><b>  do</b></p><p><b>  {</b></p><p><b>  int x; </b></p><p>  cout<<" 請輸入要

30、操作的選項(1--4):";</p><p><b>  cin>>x;</b></p><p>  switch (x)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>

31、<b>  {</b></p><p>  /* 進行矩陣加法運算 */</p><p>  Summation(a, b, c);</p><p><b>  };break; </b></p><p><b>  case 2: </b></p><p&

32、gt;<b>  { </b></p><p>  /* 進行矩陣減法運算 */</p><p>  Subtraction(a, b, c);</p><p><b>  };break; </b></p><p><b>  case 3: </b></p>

33、<p><b>  { </b></p><p>  /* 進行矩陣乘法運算 */</p><p>  MatrixMutiply();</p><p><b>  };break; </b></p><p><b>  case 4:</b></p>

34、<p><b>  {</b></p><p>  /* 進行矩陣轉(zhuǎn)置運算 */</p><p>  Transposition();</p><p><b>  };break; </b></p><p>  default : cout<<"無此選項請確定后再輸入

35、!"<<endl;</p><p><b>  break;</b></p><p><b>  } </b></p><p>  cout<<"是否繼續(xù)操作?(y/n)"<<endl;</p><p>  cin>>fl

36、ag;</p><p>  }while (flag=='y'||flag=='Y');</p><p><b>  }</b></p><p>  /* 為矩陣動態(tài)分配內(nèi)存的函數(shù) */</p><p>  datatype** Create(int m, int n)</p>

37、<p><b>  {</b></p><p><b>  int i;</b></p><p>  datatype **Matrix;</p><p>  Matrix = (datatype **) malloc(sizeof(datatype *) * m);</p><p>

38、  for(i = 0; i < m; i++)</p><p><b>  {</b></p><p>  Matrix[i] = (datatype *) malloc(sizeof(datatype) * n);</p><p><b>  }</b></p><p>  return

39、Matrix;</p><p><b>  }</b></p><p>  /* 初始化矩陣函數(shù) */</p><p>  void Reset(datatype** Matrix, int m, int n)</p><p><b>  {</b></p><p><

40、b>  int i,j;</b></p><p>  for(i = 0; i < m; i++)</p><p><b>  {</b></p><p>  for(j = 0; j < n; j++)</p><p><b>  {</b></p>&

41、lt;p>  Matrix[i][j] = 0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /* 讀入數(shù)據(jù)函數(shù) */</p><p>  void I

42、nput(datatype** Matrix, int m, int n)</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  for(i = 0; i < m; i++)</p><p><b>  {</b>

43、;</p><p>  for(j = 0; j < n; j++)</p><p><b>  {</b></p><p>  fscanf(fp,"%d", &Matrix[i][j]);</p><p><b>  }</b></p><p

44、><b>  }</b></p><p><b>  }</b></p><p>  /* 輸出數(shù)據(jù)函數(shù) */</p><p>  void Output(datatype** Matrix, int m, int n)</p><p><b>  {</b></p

45、><p><b>  int i,j;</b></p><p>  for(i = 0; i < m; i++)</p><p><b>  {</b></p><p>  for(j = 0; j < n; j++)</p><p><b>  {<

46、/b></p><p>  fprintf(fp,"%4d ", Matrix[i][j]);</p><p><b>  }</b></p><p>  fprintf(fp,"\n");</p><p><b>  }</b></p>

47、<p><b>  }</b></p><p>  /* 釋放矩陣內(nèi)存函數(shù) */</p><p>  void MatrixFree(datatype** Matrix, int m)</p><p><b>  {</b></p><p><b>  int i;</b&

48、gt;</p><p>  for(i = 0; i < m; i++)</p><p><b>  {</b></p><p>  free(Matrix[i]);</p><p><b>  }</b></p><p>  free(Matrix);</p&g

49、t;<p><b>  }</b></p><p>  /* 矩陣加法運算函數(shù) */</p><p>  void Summation(datatype** a, datatype** b, datatype** c)</p><p><b>  {</b></p><p><b

50、>  int i,j;</b></p><p>  /* 以只讀方式打開輸入文件 in.txt */</p><p>  if((fp = fopen("in.txt","r")) == NULL)</p><p><b>  {</b></p><p>  pr

51、intf("Cannot open this file.\n");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  /* 創(chuàng)建并讀入矩陣a */</p><p>  fscanf(fp,"%d%d&quo

52、t;, &row_a, &col_a);</p><p>  a=Create(row_a, col_a);</p><p>  Input(a,row_a, col_a);</p><p>  printf("***** 矩陣A *****\n");</p><p>  for(i=0;i<ro

53、w_a;i++)</p><p><b>  {</b></p><p>  for(j=0;j<col_a;j++)</p><p>  printf("%4d",a[i][j]); //實數(shù)格式</p><p>  printf("\n");<

54、;/p><p><b>  }</b></p><p>  /* 創(chuàng)建并讀入矩陣b */</p><p>  fscanf(fp,"%d%d", &row_b, &col_b);</p><p>  b = Create(row_b, col_b);</p><p>

55、;  Input(b,row_b, col_b);</p><p><b>  //輸出矩陣b</b></p><p>  printf("***** 矩陣B *****\n");</p><p>  for(i=0;i<row_b;i++)</p><p><b>  {<

56、/b></p><p>  for(j=0;j<col_b;j++)</p><p>  printf("%4d",b[i][j]); //實數(shù)格式</p><p>  printf("\n");</p><p><b>  }</b></

57、p><p>  /* 判斷兩個矩陣能否相加 */</p><p>  if(row_a == row_b && col_a == col_b)</p><p><b>  {</b></p><p>  row_c = row_a;</p><p>  col_c = col_b;&l

58、t;/p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("Matrix Can't Mutiply !\n");</p><p&

59、gt;  fprintf(fp,"Matrix Can't Mutiply !\n");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  /* 關(guān)閉輸入文件 */</p><p>  fclose(fp);

60、</p><p>  /* 以寫入方式打開輸出文件 out.txt */</p><p>  if((fp = fopen("out.txt","w")) == NULL)</p><p><b>  {</b></p><p>  printf("Cannot open

61、 this file.\n");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  /* 創(chuàng)建并初始化結(jié)果矩陣c */</p><p>  c = Create(row_c, col_c);</p><p&

62、gt;  Reset(c, row_c, col_c);</p><p>  for(i=0;i<row_c;i++)</p><p><b>  {</b></p><p>  for(j=0;j<col_c;j++)</p><p><b>  {</b></p>&l

63、t;p>  c[i][j]=a[i][j]+b[i][j];</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //矩陣加法</b></p><p>  printf("***** 矩陣加法 ****

64、*\n");</p><p>  for(i=0;i<row_a;i++)</p><p><b>  {</b></p><p>  for(j=0;j<col_b;j++)</p><p>  printf("%4d",c[i][j]); //實數(shù)格式

65、</p><p>  printf("\n");</p><p><b>  }</b></p><p>  /* 輸出結(jié)果矩陣C */</p><p>  Output(c, row_c, col_c);</p><p>  /* 關(guān)閉輸入文件 */</p>&

66、lt;p>  fclose(fp);</p><p>  system("in.txt");</p><p>  /* 關(guān)閉輸出文件 */</p><p>  fclose(fp);</p><p>  system("out.txt");</p><p>  /* 釋放矩

67、陣內(nèi)存 */</p><p>  MatrixFree(a,row_a);</p><p>  MatrixFree(b,row_b);</p><p>  MatrixFree(c,row_c);</p><p><b>  }</b></p><p>  /* 矩陣減法運算函數(shù) */</

68、p><p>  void Subtraction(datatype** a, datatype** b, datatype** c)</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  /* 以只讀方式打開輸入文件 in.txt */<

69、/p><p>  if((fp = fopen("in.txt","r")) == NULL)</p><p><b>  {</b></p><p>  printf("Cannot open this file.\n");</p><p><b>  

70、exit(0);</b></p><p><b>  }</b></p><p>  /* 創(chuàng)建并讀入矩陣a */</p><p>  fscanf(fp,"%d%d", &row_a, &col_a);</p><p>  a=Create(row_a, col_a);&

71、lt;/p><p>  Input(a,row_a, col_a);</p><p>  printf("***** 矩陣A *****\n");</p><p>  for(i=0;i<row_a;i++)</p><p><b>  {</b></p><p>  f

72、or(j=0;j<col_a;j++)</p><p>  printf("%4d",a[i][j]); //實數(shù)格式</p><p>  printf("\n");</p><p><b>  }</b></p><p>  /* 創(chuàng)建并讀入矩陣b

73、*/</p><p>  fscanf(fp,"%d%d", &row_b, &col_b);</p><p>  b = Create(row_b, col_b);</p><p>  Input(b,row_b, col_b);</p><p><b>  //輸出矩陣b</b>&

74、lt;/p><p>  printf("***** 矩陣B *****\n");</p><p>  for(i=0;i<row_b;i++)</p><p><b>  {</b></p><p>  for(j=0;j<col_b;j++)</p><p>  

75、printf("%4d",b[i][j]); //實數(shù)格式</p><p>  printf("\n");</p><p><b>  }</b></p><p>  /* 判斷兩個矩陣能否相減 */</p><p>  if(row_a == row_b

76、&& col_a == col_b)</p><p><b>  {</b></p><p>  row_c = row_a;</p><p>  col_c = col_b;</p><p><b>  }</b></p><p><b>  el

77、se</b></p><p><b>  {</b></p><p>  printf("Matrix Can't Mutiply !\n");</p><p>  fprintf(fp,"Matrix Can't Mutiply !\n");</p><p

78、><b>  exit(0);</b></p><p><b>  }</b></p><p>  /* 關(guān)閉輸入文件 */</p><p>  fclose(fp);</p><p>  /* 以寫入方式打開輸出文件 out.txt */</p><p>  if((

79、fp = fopen("out.txt","w")) == NULL)</p><p><b>  {</b></p><p>  printf("Cannot open this file.\n");</p><p><b>  exit(0);</b><

80、/p><p><b>  }</b></p><p>  /* 創(chuàng)建并初始化結(jié)果矩陣c */</p><p>  c = Create(row_c, col_c);</p><p>  Reset(c, row_c, col_c);</p><p>  for(i = 0; i < row_c;

81、 i++)</p><p><b>  {</b></p><p>  for(j = 0; j < col_c; j++)</p><p><b>  {</b></p><p>  c[i][j] = a[i][j] - b[i][j];</p><p><b

82、>  }</b></p><p><b>  }</b></p><p><b>  //矩陣減法</b></p><p>  printf("***** 矩陣減法 *****\n");</p><p>  for(i=0;i<row_a;i++)&

83、lt;/p><p><b>  {</b></p><p>  for(j=0;j<col_b;j++)</p><p>  printf("%4d",c[i][j]); //實數(shù)格式</p><p>  printf("\n");</p>&

84、lt;p><b>  }</b></p><p>  /* 輸出結(jié)果矩陣C */</p><p>  Output(c, row_c, col_c);</p><p>  system("in.txt");</p><p>  /* 關(guān)閉輸出文件 */</p><p> 

85、 fclose(fp);</p><p>  system("out.txt");</p><p>  /* 釋放矩陣內(nèi)存 */</p><p>  MatrixFree(a,row_a);</p><p>  MatrixFree(b,row_b);</p><p>  MatrixFree(c,

86、row_c);</p><p><b>  }</b></p><p><b>  矩陣乘法的分代碼:</b></p><p>  #include "stdio.h"</p><p>  void MatrixMutiply()</p><p><

87、b>  {</b></p><p>  int m,g,f,n;</p><p>  int i,j,k;</p><p>  printf("\n請輸入矩陣A的行數(shù)和列數(shù)( >0 ):\n");</p><p>  scanf("%d%d",&m,&g);<

88、;/p><p>  printf("請輸入矩陣B的行數(shù)和列數(shù)( >0 ):\n");</p><p>  scanf("%d%d",&f,&n);</p><p>  if(f==g) //判斷能否相乘</p><p><b>  {</b><

89、;/p><p><b>  //矩陣a </b></p><p>  FILE *fpa;</p><p>  printf("請輸入矩陣A的元素\n");</p><p>  system("cheng-a.txt"); </p><p>  fpa=fo

90、pen("cheng-a.txt","r"); //讀文件cheng-a.txt</p><p>  if(fpa==NULL)</p><p><b>  {</b></p><p>  printf("文件寫打開失敗");</p><p>

91、<b>  exit (0);</b></p><p><b>  }</b></p><p>  double **a=NULL;/*二級指針用來代表一個二維數(shù)組,在聲明指針的時候?qū)⑵滟x值為NULL;</p><p>  釋放后再賦值為NULL在一些進行有效性判斷的地方用a==NULL來判斷指針是否為空指針*/&

92、lt;/p><p>  a=(double**)malloc(m*sizeof(double*));/*這句是動態(tài)定義二維數(shù)組的行數(shù)。</p><p>  新的標準ANSI C規(guī)定malloc函數(shù)的返回值類型為void型,所以需要強制轉(zhuǎn)化為double型的指針后才能賦給a。*/</p><p>  for(i=0;i<m;i++)</p><p

93、>  a[i]=(double*)malloc(g*sizeof(double));/*這句是動態(tài)定義二維數(shù)組的列數(shù)。*/</p><p>  for(i=0;i<m;i++) </p><p>  for(j=0;j<g;j++)</p><p>  fscanf(fpa,"%lf",&a[i

94、][j]); //從文件讀取數(shù)據(jù)</p><p>  fclose(fpa);</p><p><b>  //輸出矩陣A</b></p><p>  printf("***** 矩陣A *****\n");</p><p>  for(i=0;i<m;i++)<

95、/p><p><b>  {</b></p><p>  for(j=0;j<g;j++)</p><p>  printf("%g\t",a[i][j]); //實數(shù)格式</p><p>  printf("\n");</p><p&

96、gt;<b>  }</b></p><p><b>  //矩陣B</b></p><p>  FILE *fpb;</p><p>  printf("請輸入矩陣B的元素\n");</p><p>  system("cheng-b.txt"); &l

97、t;/p><p>  fpb=fopen("cheng-b.txt","r");</p><p>  if(fpb==NULL)</p><p><b>  {</b></p><p>  printf("文件寫打開失敗");</p><p>

98、;<b>  exit (0);</b></p><p><b>  }</b></p><p>  double **b=NULL;</p><p>  b=(double**)malloc(g*sizeof(double *));</p><p>  for(i=0;i<f;i++)<

99、;/p><p>  b[i]=(double*)malloc(n*sizeof(double));</p><p>  for(i=0;i<f;i++)</p><p>  for(j=0;j<n;j++)</p><p>  fscanf(fpb,"%lf",&b[i][j]);</p>&

100、lt;p>  fclose(fpb);</p><p><b>  //輸出矩陣B</b></p><p>  printf("***** 矩陣B *****\n");</p><p>  for(i=0;i<f;i++)</p><p><b>  {</b>&

101、lt;/p><p>  for(j=0;j<n;j++)</p><p>  printf("%g\t",b[i][j]); //實數(shù)格式</p><p>  printf("\n");</p><p><b>  }</b></p><

102、;p><b>  //矩陣相乘</b></p><p>  printf("***** 矩陣乘法 *****\n");</p><p>  double **result=NULL;/*存放計算結(jié)果的二維數(shù)組*/</p><p>  result=(double**)malloc(m*sizeof(double*)

103、);</p><p>  for(i=0;i<m;i++)</p><p>  result[i]=(double*)malloc(n*sizeof(double));</p><p>  for(i=0;i<m;i++)</p><p>  for(j=0;j<n;j++)</p><p>  re

104、sult[i][j]=0;/*初始化為0*/</p><p>  for(i=0;i<m;i++)</p><p>  for(j=0;j<n;j++)</p><p>  for(k=0;k<g;k++)</p><p>  result[i][j]+=a[i][k]*b[k][j];</p><p&g

105、t;  //屏幕輸出矩陣乘法</p><p>  for(i=0;i<m;i++)</p><p><b>  {</b></p><p>  for(j=0;j<n;j++)</p><p>  printf("%g\t",result[i][j]); //實數(shù)格式

106、</p><p>  printf("\n");</p><p><b>  }</b></p><p>  //屏幕輸出矩陣乘法</p><p>  FILE *fpc;</p><p>  fpc=fopen("cheng-c.txt","wb

107、");</p><p>  if(fpc==NULL)</p><p><b>  {</b></p><p>  printf("文件打開失敗");</p><p><b>  exit(0);</b></p><p><b>  }

108、</b></p><p>  for(i=0;i<m;i++)</p><p><b>  {</b></p><p>  for(j=0;j<n;j++)</p><p>  fprintf(fpc,"%g\t",result[i][j]);</p><p

109、>  fprintf(fpc,"\r\n" ); //文件中換行</p><p><b>  }</b></p><p>  fclose(fpc);</p><p>  system("cheng-c.txt"); </p><p><b>  

110、//釋放</b></p><p>  for(i=0;i<m;i++)/*釋放之前分配的空間是一個好習(xí)慣*/</p><p><b>  {</b></p><p>  free(a[i]);</p><p>  a[i]=NULL;</p><p>  free(result[

111、i]);</p><p>  result[i]=NULL;/*將之前分配的內(nèi)存空間釋放后,把指針置0是一個好的習(xí)慣*/</p><p><b>  }</b></p><p><b>  free(a);</b></p><p><b>  a=NULL;</b></p

112、><p>  free(result);</p><p>  result=NULL;</p><p>  for(i=0;i<f;i++)</p><p><b>  {</b></p><p>  free(b[i]);</p><p>  b[i]=NULL;<

113、;/p><p><b>  }</b></p><p><b>  free(b);</b></p><p><b>  b=NULL;</b></p><p><b>  }</b></p><p><b>  else

114、</b></p><p>  printf("\n\t\t***** 輸入有誤,請重新輸入 *****\n\n");</p><p><b>  }</b></p><p><b>  矩陣轉(zhuǎn)置的分代碼:</b></p><p>  #include "

115、stdio.h"</p><p>  void Transposition()</p><p><b>  {</b></p><p><b>  int m,g;</b></p><p><b>  int i,j;</b></p><p>

116、  printf("請輸入矩陣的行數(shù)和列數(shù)( >0 ):\n");</p><p>  scanf("%d%d",&m,&g);</p><p><b>  //矩陣 </b></p><p>  FILE *fpa;</p><p>  printf(&

117、quot;請輸入矩陣的元素\n\n\n");</p><p>  system("zhuanzhi-a.txt"); </p><p>  fpa=fopen("zhuanzhi-a.txt","r"); //讀文件zhuanzhi-a.txt</p><p>  if(fpa=

118、=NULL)</p><p><b>  {</b></p><p>  printf("文件寫打開失敗");</p><p><b>  exit (0);</b></p><p><b>  }</b></p><p> 

119、 double **a=NULL;/*二級指針用來代表一個二維數(shù)組,在聲明指針的時候?qū)⑵滟x值為NULL;</p><p>  釋放后再賦值為NULL在一些進行有效性判斷的地方用a==NULL來判斷指針是否為空指針*/</p><p>  a=(double**)malloc(m*sizeof(double*));/*這句是動態(tài)定義二維數(shù)組的行數(shù)。</p><p> 

120、 新的標準ANSI C規(guī)定malloc函數(shù)的返回值類型為void型,所以需要強制轉(zhuǎn)化為double型的指針后才能賦給a。*/</p><p>  for(i=0;i<m;i++)</p><p>  a[i]=(double*)malloc(g*sizeof(double));/*這句是動態(tài)定義二維數(shù)組的列數(shù)。*/</p><p>  for(i=0;i&

121、lt;m;i++) </p><p>  for(j=0;j<g;j++)</p><p>  fscanf(fpa,"%lf",&a[i][j]); //從文件讀取數(shù)據(jù)</p><p>  fclose(fpa);</p><p><b>  //屏幕

122、輸出矩陣</b></p><p>  printf("***** 矩陣 *****\n");</p><p>  for(i=0;i<m;i++)</p><p><b>  {</b></p><p>  for(j=0;j<g;j++)</p><p

123、>  printf("%g\t",a[i][j]); //實數(shù)格式</p><p>  printf("\n");</p><p><b>  }</b></p><p><b>  //轉(zhuǎn)置矩陣</b></p><p>  pr

124、intf("***** 轉(zhuǎn)置矩陣 *****\n");</p><p>  double **result=NULL;/*存放計算結(jié)果的二維數(shù)組*/</p><p>  result=(double**)malloc(m*sizeof(double*));</p><p>  for(i=0;i<g;i++)</p>&l

125、t;p>  result[i]=(double*)malloc(g*sizeof(double));</p><p>  for(i=0;i<g;i++)</p><p>  for(j=0;j<m;j++)</p><p>  result[i][j]=0;/*初始化為0*/</p><p>  for(i=0;i<

126、g;i++) </p><p>  for(j=0;j<m;j++)</p><p>  result[i][j]=a[j][i];</p><p>  //屏幕輸出轉(zhuǎn)置矩陣</p><p>  for(i=0;i<g;i++)</p><p><b>  {</b><

127、/p><p>  for(j=0;j<m;j++)</p><p>  printf("%g\t",result[i][j]);</p><p>  printf("\n");</p><p><b>  }</b></p><p>  //文件輸出轉(zhuǎn)置

128、矩陣</p><p>  FILE *fpc;</p><p>  fpc=fopen("zhuanzhi-c.txt","wb");</p><p>  if(fpc==NULL)</p><p><b>  {</b></p><p>  printf(

129、"文件打開失敗");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  for(i=0;i<g;i++)</p><p><b>  {</b></p><p> 

130、 for(j=0;j<m;j++)</p><p>  fprintf(fpc,"%g\t",result[i][j]);</p><p>  fprintf(fpc,"\r\n" );</p><p><b>  }</b></p><p>  fclose(fpc);&l

131、t;/p><p>  system("zhuanzhi-c.txt"); </p><p><b>  //釋放</b></p><p>  for(i=0;i<m;i++)/*釋放之前分配的空間是一個好習(xí)慣*/</p><p><b>  {</b></p>&

132、lt;p>  free(a[i]);</p><p>  a[i]=NULL;</p><p><b>  }</b></p><p>  for(i=0;i<g;i++)</p><p><b>  {</b></p><p>  free(result[i])

133、;</p><p>  result[i]=NULL;/*將之前分配的內(nèi)存空間釋放后,把指針置0是一個好的習(xí)慣*/</p><p><b>  }</b></p><p><b>  free(a);</b></p><p><b>  a=NULL;</b></p&

134、gt;<p><b>  }</b></p><p><b>  參考文獻</b></p><p><b>  教材:</b></p><p>  [1] 蘇仕民.數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 北京:機械工業(yè)出版社.2005</p><p>  [2] C++面向?qū)ο?/p>

135、程序設(shè)計教程/陳維興,林小茶編著 北京:清華大學(xué)出版社,2009.6</p><p>  [3] C語言版/嚴蔚敏,吳偉民 北京:清華大學(xué)出版社,2007</p><p>  [4] 徐孝凱.數(shù)據(jù)結(jié)構(gòu)實用教程(C/C++描述)[M]. (第一版)北京:清華大學(xué)出版社.1999</p><p>  [5] 陳慧南.數(shù)據(jù)結(jié)構(gòu)(使用C++語言描述)[M]. (第

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論