版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 數據結構課程設計</b></p><p><b> 設計說明書</b></p><p> 2014年1月5 日 </p><p> 矩陣的加、減、乘法運算的實現(xiàn)</p><p><b> 課程設計任務書</b></p><
2、;p> 2013—2014學年第1學期</p><p> 課程設計名稱: 課程設計Ⅰ </p><p> 設 計 題 目: 矩陣的加、減、乘法運算的實現(xiàn) </p><p> 完 成 期 限:自
3、2013 年 12月 23 日至 2014 年 1 月 5 日共 2 周</p><p><b> 設計內容:</b></p><p> 矩陣基本運算是程序設計語言編譯中的一個最基本問題,也是棧的一個典型應用。使用算法優(yōu)先法,棧作為存儲空間,運用C、JAVA、VC++編程工具,編程實現(xiàn)矩陣的加、減、乘法運算的實現(xiàn)</p><p>
4、<b> 要求:</b></p><p> 闡述設計思想,畫出流程圖;</p><p> 主要功能:程序運行時,輸入相應的矩陣,選擇運算方法,輸出相應的計算結果。其中,方法為加法,減法和乘法;</p><p> 熟悉算法步驟,理解算法意思;</p><p><b> 較好的界面設計;</b>
5、;</p><p><b> 編寫課程設計報告。</b></p><p> 以上要求中第一個階段的任務完成后,先將設計說明書的草稿交指導老師面審,審查合格后方可進入后續(xù)階段的工作。設計工作結束后,經指導老師驗收合格后將設計說明書打印裝訂,并進行答辯。</p><p> 指導教師: 曹陽 教研室主任:
6、余冬梅 </p><p> 批準日期: 年 月 日</p><p><b> 課程設計評閱</b></p><p><b> 摘 要</b></p><p> 設計一個程序,用該程序實現(xiàn)矩陣的加、減、乘法運算的功能。設計程序時,采用VC++作為軟件開發(fā)環(huán)境,在根
7、據對矩陣運算的了解和掌握,運用程序來實現(xiàn)矩陣之間相加、相減和相乘的基本運算。</p><p> 關鍵詞:矩陣;算法;程序</p><p><b> 目 錄</b></p><p><b> 1 課題描述1</b></p><p><b> 2 需求分析2</b&g
8、t;</p><p><b> 3 算法設計3</b></p><p><b> 4流程圖4</b></p><p><b> 5 算法實現(xiàn)7</b></p><p> 6 運行與測試12</p><p> 7 測試結果分析15<
9、;/p><p><b> 8 總結16</b></p><p><b> 參考文獻17</b></p><p><b> 1 課題描述</b></p><p> 理解矩陣的定義、掌握矩陣的基本律、掌握幾類特殊矩陣(比如零矩陣,單位矩陣,對稱矩陣和反對稱矩陣 ) 的定義與
10、性質、注意矩陣運算與通常數的運算異同。能熟練正確地進行矩陣的計算。</p><p> 矩陣運算系統(tǒng)是一個數據運算系統(tǒng),程序主要包括矩陣的基本數據成員,矩陣運算成員函數,實現(xiàn)矩陣的運算和矩陣讀入和輸出操作等。 </p><p> 本系統(tǒng)用C++語言開發(fā),包含了矩陣的最基本數據成員,其中有矩陣的維數和矩陣的個元素。類中實現(xiàn)了判斷矩陣維數相等,是否可以相乘,以及矩陣加法、減法和乘法
11、的運算功能。</p><p> 本系統(tǒng)可以先用來實現(xiàn)對于矩陣的基本運算,直接輸入所求的兩個矩陣就可以得到相應的結果,操作簡單容易實現(xiàn)。</p><p> 設計一個程序,演示輸入相應的矩陣求出對應功能的過程,對相應的算法和結構加以了解并熟練掌握。</p><p><b> 2 需求分析</b></p><p> 本
12、次課程設計,所設計的運算系統(tǒng)主要實現(xiàn)的功能如以下各點:</p><p> 1)首先理解計算機解決一個具體問題時,需要經過幾個步驟:首先要從具體問題抽象出一個適當的數學模型,然后設計一個解決此數學模型的算法,最后編出程序,進行測試,調試直至得到想要的答案。</p><p> 2)其次演示程序是以用戶與計算機的對話方式執(zhí)行,這需要一個模塊或者一種試驗環(huán)境來完成使用者與計算機語言的轉化。&l
13、t;/p><p> 3)最主要程序所能達到的功能:程序可以實現(xiàn)矩陣的初始化,矩陣相加、相減和相乘的條件判斷以及對符合條件的兩個矩陣進行算法選擇得出相應的矩陣。</p><p> 4)最后輸出的形式:在計算過程中遇到的問題或最終的答案將顯示在屏幕上。</p><p><b> 3 算法設計</b></p><p> 3
14、.1 首先建立矩陣,然后通過運算系統(tǒng)的選擇,選擇出所要進行的下一步運算,輸入運算指令后,即得到運行結果,如果在輸入有誤的情況下,則要輸出運行結果錯誤,請重新輸入。每一種算法的運算實現(xiàn)后,都會得到與之對應的結果。矩陣,是由m*n個數組成的一個m行n列的矩形表格,通常用大寫字母A、B、C…表示,組成矩陣的每一個數,均稱為矩陣的元素,通常用小寫字母其元素a、b、c。表示,也可以帶下標,如i、j、k都是正整數,他們表示該元素在矩陣中的位置。&l
15、t;/p><p> 如果一個矩陣的行數m與列數n相等時,該矩陣稱為一個m階方陣。對于方陣,從左上角到右下角的連線,稱為主對角線;而從左下角到右上角的連線稱為付對角線。若一個n階方陣的主對角線上的元素都是1,而其余元素都是零,則為單位矩陣。</p><p> 3.2 兩個矩陣的加是矩陣中對應的元素相加,相加的前提是:兩個矩陣要是通行矩陣,即具有相同的行和列數。如 矩陣A=[1 2] B=[
16、2 3] ,A+B=[1+2 2+3]=[3 5]。 3.3兩個矩陣相減,跟加法類似。 3.4矩陣的乘法。兩個矩陣要可以相乘,必須是A矩陣的列數B矩陣的行數相等,才可以進行乘法,乘法的原則是,A矩陣的第i行中的元素分別與B矩陣中的第j列中的元素相乘再求和,得到的結果就是新矩陣的第i行第j列的值。</p><p><b> 4 流程圖</b></p><p>
17、<b> 5 算法實現(xiàn)</b></p><p> #include<stdio.h></p><p> #include<math.h></p><p> //定義全局變量//</p><p> int n1,n2,m1,m2,m,n,c=0;</p><p>
18、 int x[100][100],</p><p> int y[100][100];</p><p> int fc[100][100];</p><p><b> //函數聲明//</b></p><p> void print();</p><p> void print_sub(
19、);</p><p> void input_marry();</p><p> void add_marry();</p><p> void sub_marry();</p><p> void mut_marry();</p><p><b> //主函數//</b></p&
20、gt;<p> void main()</p><p><b> {</b></p><p> print(); </p><p> scanf("%d",&c);</p><p> while(c!='\0')</p><p>
21、;<b> { </b></p><p> if(c==1) {input_marry();}</p><p> if(c==2) {add_marry();}</p><p> if(c==3) {sub_marry();}</p><p> if(c==4) {mut_marry();}&
22、lt;/p><p> if(c==0) {c='\0';}</p><p> printf("請選擇運算:\n\n");</p><p> scanf("%d",&c); </p><p><b> }</b></p><p>
23、<b> }</b></p><p><b> //打印函數//</b></p><p> void print()</p><p><b> {</b></p><p> printf("矩陣的運算系統(tǒng) \n");<
24、;/p><p> printf("------------------------------------\n");</p><p> printf("1 請輸入矩陣");</p><p> printf("2 矩陣進行加法運算");</p><p> printf("
25、3 矩陣進行減法運算");</p><p> printf("4 矩陣進行乘法運算");</p><p> printf("0 退出運算系統(tǒng)");</p><p> printf("------------------------------------\n");</p>&l
26、t;p> printf("請選擇:\n\n");</p><p><b> }</b></p><p><b> //矩陣的輸入//</b></p><p> void input_marry()</p><p><b> {</b><
27、/p><p><b> int i,j;</b></p><p> printf("請輸入x矩陣的行數: ");</p><p> scanf("%d",&n1);</p><p> printf("請輸入x矩陣的列數: ");</p>
28、<p> scanf("%d",&n2);</p><p><b> m=n1*n2;</b></p><p> //第一個矩陣輸入//</p><p> printf("請輸入第一個矩陣x(共有%4d個元素):\n\n",m);</p><p><
29、;b> do</b></p><p><b> {</b></p><p><b> m--;</b></p><p> for(i=0;i<n1;i++)</p><p> for(j=0;j<n2;j++)</p><p><
30、b> {</b></p><p> scanf("%d",&x[i][j]);</p><p><b> }</b></p><p> }while(m<0);</p><p> //打印第一個矩陣//</p><p> printf
31、("您輸入的矩陣x=\n\n");</p><p> for(i=0;i<n1;i++)</p><p> for(j=0;j<n2;j++)</p><p><b> { </b></p><p> printf("%10d",x[i][j]);</p&
32、gt;<p> if(j==n2-1)printf("\n");</p><p><b> }</b></p><p> //第二個矩陣輸入//</p><p> printf("請輸入y矩陣的行數: ");</p><p> scanf("%d&
33、quot;,&m1);</p><p> printf("請輸入y矩陣的列數: ");</p><p> scanf("%d",&m2);</p><p><b> n=m1*m2;</b></p><p> printf("請輸入第二個矩陣y(共
34、有%4d個元素):\n\n",n);</p><p><b> do</b></p><p><b> {</b></p><p><b> m--;</b></p><p> for(i=0;i<m1;i++)</p><p>
35、 for(j=0;j<m2;j++)</p><p><b> {</b></p><p> scanf("%d",&y[i][j]);</p><p><b> }</b></p><p> }while(n<0);</p><
36、p> //打印第二個矩陣//</p><p> printf("您輸入的矩陣y=\n\n");</p><p> for(i=0;i<m1;i++)</p><p> for(j=0;j<m2;j++)</p><p><b> { </b></p><
37、p> printf("%10d",y[i][j]);</p><p> if(j==m2-1)printf("\n");</p><p><b> }</b></p><p> print_sub(); </p><p><b> }</b>&
38、lt;/p><p> //矩陣加法運算//</p><p> void add_marry()</p><p><b> {</b></p><p><b> int i,j;</b></p><p> if(n1!=m1||n2!=m2)</p><
39、;p><b> {</b></p><p> printf("輸入錯誤!");</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p>
40、<p> for(i=0;i<n1;i++)</p><p> for(j=0;j<n2;j++)</p><p> { fc[i][j]=0;</p><p> fc[i][j]=x[i][j]+y[i][j]; </p><p><b> }</b></p><p
41、> printf("矩陣和為:\n\n");</p><p> for(i=0;i<n1;i++)</p><p> for(j=0;j<n2;j++)</p><p><b> { </b></p><p> printf("%10d",fc[i][j
42、]);</p><p> if(j==n2-1)printf("\n");</p><p><b> }</b></p><p> print_sub(); </p><p><b> }</b></p><p><b> }</
43、b></p><p> //矩陣減法運算//</p><p> void sub_marry()</p><p><b> {</b></p><p><b> int i,j;</b></p><p> if(n1!=m1||n2!=m2)</p>
44、;<p><b> {</b></p><p> printf("輸入錯誤!");</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></
45、p><p> for(i=0;i<n1;i++)</p><p> for(j=0;j<n2;j++)</p><p> { fc[i][j]=0;</p><p> fc[i][j]=x[i][j]-y[i][j];</p><p><b> }</b></p>
46、<p> printf("矩陣差為:\n\n");</p><p> for(i=0;i<n1;i++)</p><p> for(j=0;j<n2;j++)</p><p><b> { </b></p><p> printf("%10d",fc
47、[i][j]);</p><p> if(j==n2-1)printf("\n");</p><p><b> }</b></p><p><b> }</b></p><p> print_sub(); </p><p><b> }
48、</b></p><p> //矩陣乘法運算//</p><p> void mut_marry()</p><p><b> {</b></p><p> int k,i,j;</p><p> if(n2!=m1)</p><p><b>
49、; {</b></p><p> printf("輸入錯誤!");</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> fo
50、r (i=0;i<n1;i++)</p><p> for (j=0;j<n2;j++)</p><p> { fc[i][j]=0;</p><p> for (k=0;k<n1;k++)</p><p> fc[i][j]+=x[i][k]*y[k][j];</p><p><b&g
51、t; }</b></p><p> printf("矩陣積為:\n\n");</p><p> for(i=0;i<n1;i++)</p><p> for(j=0;j<m2;j++)</p><p><b> { </b></p><p>
52、 printf("%10d",fc[i][j]);</p><p> if(j==m2-1)printf("\n");</p><p><b> }</b></p><p><b> }</b></p><p> print_sub();
53、 </p><p><b> }</b></p><p> void print_sub()</p><p><b> {</b></p><p> printf("\n---------------------------------------------------
54、--------------------------------\n");</p><p> printf("\n2 矩陣進行加法運算 ;3 矩陣進行減法運算 ;4 矩陣進行乘法運算 \n");</p><p> printf("\n------------------------------------------------------
55、-----------------------------\n");</p><p><b> }</b></p><p><b> 6 運行與測試</b></p><p> 在正確情況下進行矩陣運算:</p><p> 1) 輸入矩陣x和y</p><p>
56、; 圖6.1 矩陣的輸入</p><p><b> 2) 矩陣相加</b></p><p> 圖6.2 矩陣的加法運算</p><p><b> 3)矩陣相減</b></p><p> 圖6.3 矩陣的減法運算</p><p><b> 4)矩陣相乘&l
57、t;/b></p><p> 圖6.4 矩陣的乘法運算</p><p> 輸入矩陣不能進行正常運算情況:</p><p><b> 5)輸入有誤情況</b></p><p> 圖6.5 不能進行運算情況下</p><p><b> 7測試結果分析</b><
58、;/p><p> 通過理解矩陣基本運算的內容,兩個矩陣能進行相加的條件為第一個矩陣的行數和列數分別等于第二個矩陣的行數和列數,然后分別對每個相應的元素進行相加,得到的矩陣也是一個和兩個矩陣的行數和列數相等的矩陣,對應減法也是運用同樣的方法,但矩陣相乘的條件為第一個矩陣的列數等于第二個矩陣的行數,如:第一個矩陣為m*n,第二個矩陣的行數必須為n,列數不定,如第二個矩陣為n*a,則進行矩陣相乘的結果得到一個新的矩陣m*
59、a。</p><p> 同時理解零矩陣的概念,零矩陣是一個元素全部為零的特殊矩陣,并不是說它的值為數學意義上的零,而是矩陣元素全部為零,零矩陣和任意矩陣相加,結果為原任意矩陣,任意矩陣減去零矩陣為原任意矩陣,零矩陣和任意矩陣相乘,結果為零。</p><p> 在測試結果中,當任意兩個矩陣的行數和列數不相等時,選擇加法運算和減法運算顯示輸出錯誤,在矩陣相乘的第一個矩陣的行和第二個矩陣的列
60、不相等時,顯示輸出錯誤,但輸入的矩陣是零矩陣并選擇加減法運算時,我們要明白這個零矩陣是行和列分別和第二個矩陣的行和列都相等的零矩陣,對應矩陣相乘,是行和列對應相等的零矩陣。要是可理解零矩陣的概念。</p><p> 有了矩陣最基本的運算,可以編寫,輸入輸出功能的函數,實現(xiàn)其輸入輸出,分別編寫了控制臺輸入輸出和文件輸入輸出。運用了提高了系統(tǒng)的可用性。 </p><p> 本次使
61、用的矩陣的存儲形式為數組存儲,由于數組一般不作插入或者刪除操作,也就是說,一旦建立了數組,則結構中的數據元素個數和元素之間的關系就不再發(fā)生變動。因此,采用順序存儲結構表示數組是自然的事了。</p><p> 由于存儲單元是一維的結構,而數組是個多維的結構,則用一組連續(xù)存儲單元存放數組的數據元素就有個次序約定問題。由此,對于數組,一旦規(guī)定了它的維數和各維的長度,便可為它分配存儲空間。反之,只要給出一組下標便可求得
62、相應元素的存儲位置。</p><p> 然而,在數值分析中經常出現(xiàn)一些階數很高的矩陣,同時在矩陣中有許多值相同的元素或者零元素。有時為了節(jié)省存儲空間,可以對這些矩陣進行壓縮存儲。所謂壓縮存儲是指:為多個值相同的元分配一個存儲空間;對零元素不分配存儲空間。本程序運用數組來存儲矩陣,也可以運用矩陣的壓縮存儲來實現(xiàn)程序,這里不與討論。</p><p> 文件流的使用,可以令系統(tǒng)的使用更加靈活
63、,可以產期保存輸入和輸出的數據,不至于系統(tǒng)關閉之后而造成數據丟失,可以說,沒有哪個應用程序不使用文件操作,沒有文件操作的程序是沒有價值的。</p><p> 開始編寫程序的時候,沒有進行文件的分離編寫,程序過于的長,很難查看其結構和調試,之后將其分為三段之后,使得程序結構更加合理,更易于編寫開發(fā)。</p><p><b> 8 總結</b></p>
64、<p> 通過這次在制作對矩陣算法的運算與設計中,遇到了許多自己以前沒有想到的困難和問題尤其是在一些細節(jié)方面,不僅要寫出實現(xiàn)各種功能的函數還要保證函數之間的連接,怎樣通過函數之間的關系能很好的把函數連接起來,還要保證程序能夠很好的而且有效的運行。還有可能遇到一些以前沒有用到的知識,像怎樣在輸入有誤的情況下進行異常處理,這些都要通過函數的功能來實現(xiàn),這些對我來說都是新的知識,而且覺得很有難度。 </p>
65、<p> 在制做程序設計前還必須把書本上的基本知識搞懂,程序設計會用到書中的類做,對類的理解也不是很到位,還有一些運算符的重載問題以及它們重載時是作為友元函數還是成員函數。更重要的是定義它們得格式,否則一不小心將會出錯。還有一些概念的知識還沒有很好的理解,所以還需要借助書中的知識來加深對類的理解,以及復習一下老師上課課件關于類的內容等。當然還的通過實際的運算和測試才能更加明白那些含糊不懂得問題,多做下幾好多了。
66、</p><p> 在編程的過程中也碰到了很多的問題,但是通過同學的幫助,和相互之間的討論以及對課本的熟悉漸漸對于程序有更深一步的理解,還有一個函數定義時困難比較大,就是矩陣乘法,也通過參考以前所學習過的《線性代數》課本中矩陣乘法的法則來編的。是這樣在異常處理的過程中就能很好的處理因為在輸入有誤的情況的錯誤。</p><p> 也通過網絡對矩陣運算的了解和實現(xiàn),充分把握住其核心的東西。
67、在了解流的概念,流,簡單來說就是建立在面向對象基礎上的一種抽象的處理數據的工具。在流中,定義了一些處理數據的基本操作,如讀取數據,寫入數據等,程序員是對流進行所有操作的,而不用關心流的另一頭數據的真正流向。流不但可以處理文件,還可以處理動態(tài)內存、網絡數據等多種數據形式。如果能對流的操作非常熟練,在程序中利用流的方便性,寫起程序會大大提高效率的。當然還有許多好的方法也要多掌握,這都有利于以后的學習和工作。</p><p
68、><b> 參考文獻</b></p><p> [1] 嚴蔚敏,吳偉民.數據結構(C語言版)[M].北京:清華大學出版社,2008</p><p> [2] 譚浩強.C程序設計(第四版)[M]. 北京:清華大學出版社,2010</p><p> [3] 李春葆.數據結構(C語言版)習題與解析[M]. 北京:清華大學出版社,2006
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數據結構課程設計-- 稀疏矩陣的運算
- 數據結構課程設計--基本稀疏矩陣運算的運算器
- 數據結構課程設計--稀疏矩陣運算器
- 《數據結構》課程設計報告--稀疏矩陣運算器
- 數據結構課程設計報告--稀疏矩陣運算器
- 數據結構課程設計報告 稀疏矩陣運算器
- 數據結構課程設計報告 稀疏矩陣運算器設計
- 數據結構課程設計--數據結構的實現(xiàn)
- 數據結構--稀疏矩陣課程設計
- 數據結構課程設計---稀疏矩陣
- 數據結構課程設計-稀疏矩陣實現(xiàn)與應用
- 數據結構課程設計--稀疏矩陣的操作
- 數據結構-矩陣相關操作的課程設計
- 數據結構課程設計--大整數的運算
- 數據結構與課程設計---稀疏矩陣
- 數據結構課程設計-圖的鄰接矩陣
- 數據結構課程設計集合的交并差運算
- 數據結構課程設計--廣義表運算的驗算設計
- 數據結構課程設計報告-長整數運算
- 數據結構課程設計-長整數加減運算
評論
0/150
提交評論