版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課 程 設(shè) 計(jì)</b></p><p><b> 目 錄</b></p><p> 1 概述………………………………………………………………………3</p><p> 2 設(shè)計(jì)目的…………………………………………………………………3</p><p> 3
2、 設(shè)計(jì)功能說(shuō)明……………………………………………………………3</p><p> 4 詳細(xì)設(shè)計(jì)說(shuō)明……………………………………………………………3</p><p> 5 流程圖……………………………………………………………………4</p><p> 6 調(diào)試及結(jié)果………………………………………………………………5</p><p>
3、 1程序調(diào)試 ………………………………………………………………5</p><p> 2運(yùn)行編譯連接過(guò)程 ………………………………………………… 5-8</p><p> 7 總結(jié)………………………………………………………………………9</p><p> 附錄 …………………………………………………………………10-24</p><p&
4、gt; 參考文獻(xiàn) ………………………………………………………………25</p><p> 成績(jī)?cè)u(píng)定表 ……………………………………………………………26</p><p><b> 1 概 述</b></p><p> 數(shù)據(jù)結(jié)構(gòu)是一門(mén)理論性強(qiáng)、思維抽象、難度較大的課程,是基礎(chǔ)課和專業(yè)課之間的橋梁只有進(jìn)行實(shí)際操作,將理論應(yīng)用于實(shí)際中,才能
5、確實(shí)掌握書(shū)中的知識(shí)點(diǎn)。通過(guò)課程設(shè)計(jì),不僅可以加深學(xué)生對(duì)數(shù)據(jù)結(jié)構(gòu)基本概念的了解,鞏固學(xué)習(xí)成果,還能夠提高實(shí)動(dòng)手力。為學(xué)生后繼課程的學(xué)習(xí)打下良好的基礎(chǔ)。</p><p><b> 2 設(shè)計(jì)目的</b></p><p> 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)是在教學(xué)實(shí)踐基礎(chǔ)上進(jìn)行的一次大型實(shí)驗(yàn),也是對(duì)該課程所學(xué)理論知識(shí)的深化和提高。因此,要求學(xué)生能綜合應(yīng)用所學(xué)知識(shí),設(shè)計(jì)與制造出具有較復(fù)
6、雜功能的應(yīng)用系統(tǒng),并且在實(shí)驗(yàn)的基本技能方面上進(jìn)行一次全面的訓(xùn)練。通過(guò)程序的編譯掌握對(duì)程序的調(diào)試方法及思想,并且讓學(xué)生學(xué)會(huì)使用一些編程技巧。促使學(xué)生養(yǎng)成良好的編程習(xí)慣。</p><p> 1.使學(xué)生能夠較全面地鞏固和應(yīng)用課堂中所學(xué)的的基本理論和程序設(shè)計(jì)方法,能夠較熟練地完成程序的設(shè)計(jì)和調(diào)試。</p><p> 2.培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí)獨(dú)立完成程序課題的能力。</p>&
7、lt;p> 3.培養(yǎng)學(xué)生勇于探索、嚴(yán)謹(jǐn)推理、實(shí)事求是、有錯(cuò)必改,用實(shí)踐來(lái)檢驗(yàn)理論,全方位考慮問(wèn)題等科學(xué)技術(shù)人員應(yīng)具有的素質(zhì)。</p><p> 4.提高學(xué)生對(duì)工作認(rèn)真負(fù)責(zé)、一絲不茍,對(duì)同學(xué)團(tuán)結(jié)友愛(ài),協(xié)作攻關(guān)的素質(zhì)。</p><p> 5.培養(yǎng)學(xué)生從資料文獻(xiàn)、科學(xué)實(shí)驗(yàn)中獲得知識(shí)的能力,提高學(xué)生從別人經(jīng)驗(yàn)中找到解決問(wèn)題的新途徑的悟性,初步培養(yǎng)工程意識(shí)和創(chuàng)新能力。</p>
8、<p> 6.對(duì)學(xué)生掌握知識(shí)的深度、運(yùn)用理論去處理問(wèn)題的能力、實(shí)驗(yàn)?zāi)芰Α⒄n程設(shè)計(jì)能力、書(shū)面及口頭表達(dá)能力進(jìn)行考核。</p><p><b> 3 設(shè)計(jì)功能分析</b></p><p><b> 本設(shè)計(jì)的功能如下:</b></p><p> 1、對(duì)于用戶給定的矩陣相乘可以進(jìn)行存儲(chǔ),并且用戶可以更改<
9、;/p><p> 2、根據(jù)用戶的要求可以選擇相應(yīng)的功能加減乘及轉(zhuǎn)置</p><p> 3、然后顯示用戶輸入的矩陣進(jìn)行運(yùn)算并得到結(jié)果后保存到文件</p><p><b> 4 詳細(xì)設(shè)計(jì)說(shuō)明</b></p><p> 本程序用數(shù)據(jù)存儲(chǔ)的方式建立矩陣。然后用相加,減,乘,轉(zhuǎn)置的方式計(jì)算出最終的矩陣</p>&
10、lt;p><b> 5 流程圖</b></p><p><b> 6 調(diào)試及運(yùn)行結(jié)果</b></p><p><b> 1、程序調(diào)試</b></p><p> 1)使用Microsoft visual c++ 編輯軟件進(jìn)行源程序的編寫(xiě)。</p><p> 2)使
11、用Microsoft visual c++軟件進(jìn)行編譯,步驟:?jiǎn)螕簟敖M建”選擇“編譯”。</p><p> 3)使用Microsoft visual c++運(yùn)行程序并調(diào)試,步驟:?jiǎn)螕簟敖M建”選擇“執(zhí)行”。</p><p> 2、運(yùn)行及編譯連接過(guò)程</p><p><b> 1)現(xiàn)在進(jìn)行調(diào)試</b></p><p>
12、<b> 2)下面進(jìn)行編譯</b></p><p><b> 3)開(kāi)始運(yùn)行程序</b></p><p> 4)首先進(jìn)行選擇,先選1號(hào)進(jìn)行加法運(yùn)算</p><p> 這時(shí)候系統(tǒng)會(huì)彈出TXT文本</p><p> 5)做完加法以后,進(jìn)行選擇,選“Y”繼續(xù),然后進(jìn)行減法運(yùn)行</p>
13、<p> 同樣,程序接著把兩個(gè)YXT文本彈出來(lái)</p><p> 6)同樣上面的操作,選擇3,進(jìn)行乘法運(yùn)行</p><p> 在彈出的TXT文本里面輸入矩陣A,關(guān)閉后,在另一個(gè)彈出的TXT中輸入矩陣B</p><p> 最后輸出矩陣B,并彈出結(jié)果的TXT</p><p> 7)最后選擇4,進(jìn)行矩陣轉(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è)計(jì)終于做完了,雖然有些疲勞和困倦,但也讓我收獲了很多。數(shù)據(jù)結(jié)構(gòu)已經(jīng)學(xué)了一個(gè)學(xué)期,有許多知識(shí)都存在似懂非懂的現(xiàn)
15、象,這種現(xiàn)象通過(guò)實(shí)際的上機(jī)操作,實(shí)際應(yīng)用,已經(jīng)減少了許多。對(duì)這些知識(shí)也有了更深的理解和很好的掌握。許多困惑,有許多已經(jīng)通過(guò)實(shí)際操作解決了,并能夠深刻認(rèn)識(shí)。通過(guò)課程設(shè)計(jì),明白到了原來(lái)開(kāi)發(fā)一個(gè)小小的實(shí)用系統(tǒng),是需要考慮到很多方面的問(wèn)題的,這些都是要在實(shí)踐中摸索的,這與平時(shí)做練習(xí)是不同的,但也因?yàn)槠綍r(shí)有許多的練習(xí)基礎(chǔ),會(huì)使你做起程序來(lái),更加得心應(yīng)手。另外就是要把錯(cuò)誤總結(jié),有許多錯(cuò)誤是平時(shí)自己一手制造的,因此很深刻,但也有些錯(cuò)誤是自己還沒(méi)有接觸
16、的,這就應(yīng)該看多些有關(guān)的書(shū)記以及別人的總結(jié),使自己不犯這些錯(cuò)誤。這樣長(zhǎng)期總結(jié),會(huì)對(duì)自己有很大的幫助。</p><p><b> 附 錄</b></p><p><b> 實(shí)現(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> /* 定義三個(gè)矩陣的行列大小 */</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(" ##### 計(jì)算兩個(gè)矩陣相加,相減; ######\n"); </p><p> printf("
25、 ##### 矩陣相乘;矩陣轉(zhuǎn)置 ######\n"); </p><p> printf(" ###########################################\n"); </p><p> printf(" ## 請(qǐng)選擇您需要的運(yùn)算,
26、按回車(chē)鍵結(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<<" 請(qǐng)輸入要
30、操作的選項(xiàng)(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> /* 進(jìn)行矩陣加法運(yùn)算 */</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> /* 進(jìn)行矩陣減法運(yùn)算 */</p><p> Subtraction(a, b, c);</p><p><b> };break; </b></p><p><b> case 3: </b></p>
33、<p><b> { </b></p><p> /* 進(jìn)行矩陣乘法運(yùn)算 */</p><p> MatrixMutiply();</p><p><b> };break; </b></p><p><b> case 4:</b></p>
34、<p><b> {</b></p><p> /* 進(jìn)行矩陣轉(zhuǎn)置運(yùn)算 */</p><p> Transposition();</p><p><b> };break; </b></p><p> default : cout<<"無(wú)此選項(xiàng)請(qǐng)確定后再輸入
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> /* 為矩陣動(dòng)態(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> /* 矩陣加法運(yùn)算函數(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> /* 以只讀方式打開(kāi)輸入文件 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í)數(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í)數(shù)格式</p><p> printf("\n");</p><p><b> }</b></
57、p><p> /* 判斷兩個(gè)矩陣能否相加 */</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> /* 以寫(xiě)入方式打開(kāi)輸出文件 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í)數(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> /* 矩陣減法運(yùn)算函數(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> /* 以只讀方式打開(kāi)輸入文件 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í)數(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í)數(shù)格式</p><p> printf("\n");</p><p><b> }</b></p><p> /* 判斷兩個(gè)矩陣能否相減 */</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> /* 以寫(xiě)入方式打開(kāi)輸出文件 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í)數(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請(qǐng)輸入矩陣A的行數(shù)和列數(shù)( >0 ):\n");</p><p> scanf("%d%d",&m,&g);<
88、;/p><p> printf("請(qǐng)輸入矩陣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("請(qǐng)輸入矩陣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("文件寫(xiě)打開(kāi)失敗");</p><p>
91、<b> exit (0);</b></p><p><b> }</b></p><p> double **a=NULL;/*二級(jí)指針用來(lái)代表一個(gè)二維數(shù)組,在聲明指針的時(shí)候?qū)⑵滟x值為NULL;</p><p> 釋放后再賦值為NULL在一些進(jìn)行有效性判斷的地方用a==NULL來(lái)判斷指針是否為空指針*/&
92、lt;/p><p> a=(double**)malloc(m*sizeof(double*));/*這句是動(dòng)態(tài)定義二維數(shù)組的行數(shù)。</p><p> 新的標(biāo)準(zhǔn)ANSI C規(guī)定malloc函數(shù)的返回值類型為void型,所以需要強(qiáng)制轉(zhuǎn)化為double型的指針后才能賦給a。*/</p><p> for(i=0;i<m;i++)</p><p
93、> a[i]=(double*)malloc(g*sizeof(double));/*這句是動(dòng)態(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í)數(shù)格式</p><p> printf("\n");</p><p&
96、gt;<b> }</b></p><p><b> //矩陣B</b></p><p> FILE *fpb;</p><p> printf("請(qǐng)輸入矩陣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("文件寫(xiě)打開(kāi)失敗");</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í)數(shù)格式</p><p> printf("\n");</p><p><b> }</b></p><
102、;p><b> //矩陣相乘</b></p><p> printf("***** 矩陣乘法 *****\n");</p><p> double **result=NULL;/*存放計(jì)算結(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í)數(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("文件打開(kāi)失敗");</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++)/*釋放之前分配的空間是一個(gè)好習(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是一個(gè)好的習(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***** 輸入有誤,請(qǐng)重新輸入 *****\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("請(qǐng)輸入矩陣的行數(shù)和列數(shù)( >0 ):\n");</p><p> scanf("%d%d",&m,&g);</p><p><b> //矩陣 </b></p><p> FILE *fpa;</p><p> printf(&
117、quot;請(qǐng)輸入矩陣的元素\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("文件寫(xiě)打開(kāi)失敗");</p><p><b> exit (0);</b></p><p><b> }</b></p><p>
119、 double **a=NULL;/*二級(jí)指針用來(lái)代表一個(gè)二維數(shù)組,在聲明指針的時(shí)候?qū)⑵滟x值為NULL;</p><p> 釋放后再賦值為NULL在一些進(jìn)行有效性判斷的地方用a==NULL來(lái)判斷指針是否為空指針*/</p><p> a=(double**)malloc(m*sizeof(double*));/*這句是動(dòng)態(tài)定義二維數(shù)組的行數(shù)。</p><p>
120、 新的標(biāo)準(zhǔn)ANSI C規(guī)定malloc函數(shù)的返回值類型為void型,所以需要強(qiáng)制轉(zhuǎn)化為double型的指針后才能賦給a。*/</p><p> for(i=0;i<m;i++)</p><p> a[i]=(double*)malloc(g*sizeof(double));/*這句是動(dòng)態(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í)數(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;/*存放計(jì)算結(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、"文件打開(kāi)失敗");</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++)/*釋放之前分配的空間是一個(gè)好習(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是一個(gè)好的習(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> 參考文獻(xiàn)</b></p><p><b> 教材:</b></p><p> [1] 蘇仕民.數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 北京:機(jī)械工業(yè)出版社.2005</p><p> [2] C++面向?qū)ο?/p>
135、程序設(shè)計(jì)教程/陳維興,林小茶編著 北京:清華大學(xué)出版社,2009.6</p><p> [3] C語(yǔ)言版/嚴(yán)蔚敏,吳偉民 北京:清華大學(xué)出版社,2007</p><p> [4] 徐孝凱.數(shù)據(jù)結(jié)構(gòu)實(shí)用教程(C/C++描述)[M]. (第一版)北京:清華大學(xué)出版社.1999</p><p> [5] 陳慧南.數(shù)據(jù)結(jié)構(gòu)(使用C++語(yǔ)言描述)[M]. (第
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--稀疏矩陣的操作
- 數(shù)據(jù)結(jié)構(gòu)--稀疏矩陣課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---稀疏矩陣
- 數(shù)據(jù)結(jié)構(gòu)與課程設(shè)計(jì)---稀疏矩陣
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-- 稀疏矩陣的運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-圖的鄰接矩陣
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---數(shù)據(jù)結(jié)構(gòu)相關(guān)算法的演示系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--稀疏矩陣運(yùn)算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)論文----稀疏矩陣的轉(zhuǎn)置
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-稀疏矩陣實(shí)現(xiàn)與應(yīng)用
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--二叉樹(shù)的相關(guān)操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--字符串的操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---skiplist基本操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論