版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--稀疏矩陣的操作
- 數(shù)據(jù)結(jié)構(gòu)--稀疏矩陣課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---稀疏矩陣
- 數(shù)據(jù)結(jié)構(gòu)與課程設(shè)計---稀疏矩陣
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-- 稀疏矩陣的運算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-圖的鄰接矩陣
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---數(shù)據(jù)結(jié)構(gòu)相關(guān)算法的演示系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--稀疏矩陣運算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計論文----稀疏矩陣的轉(zhuǎn)置
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-稀疏矩陣實現(xiàn)與應(yīng)用
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--二叉樹的相關(guān)操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--字符串的操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---skiplist基本操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
評論
0/150
提交評論