版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、.C+課程設(shè)計報告姓名 學(xué)號 班級0804 任課教師 時間 2009.9 教師指定題目 矩陣乘法計算 評定難易級別 A級 實(shí)驗(yàn)報告成績 自評成績:優(yōu) 一、題目名稱:矩陣乘法計算二、難易等級: A級三、程序設(shè)計思想1、建立矩陣類的類模板,通過實(shí)例化形成模板類,再實(shí)例化成矩陣對象,大大縮短了代碼的長度,同時也方便了對象的建立;class CMatrix /矩陣類的模板 T * * Mat; /矩陣的頭指針 int nRow; /矩陣的行數(shù) int nCol; /矩陣的列數(shù)public: CMatrix(); /缺省構(gòu)造函數(shù) CMatrix(T * * mat,int row,int col); /
2、構(gòu)造函數(shù) CMatrix(int row,int col); /構(gòu)造函數(shù) CMatrix(int row,int col,int k); /構(gòu)造函數(shù),從鍵盤輸入矩陣 VoidShow(); /輸出 VoidInputFromFile(); /從文件中輸入矩陣 friend CMatrix<T>operator *(CMatrix<T> &mat1,CMatrix<T> &mat2);/重載乘法;2、依照模板,在模板外依次定義相關(guān)的函數(shù)模板,再通過實(shí)例化建立相應(yīng)的成員函數(shù),同樣方便快捷,避免了代碼的冗長,程序?qū)哟吻逦?;template<c
3、lass T>CMatrix<T>:CMatrix(int row,int col) /兩個參數(shù)的構(gòu)造函數(shù) 3、建立選擇函數(shù)choose,實(shí)現(xiàn)程序的多態(tài)性,同時也簡化了主函數(shù)的內(nèi)容,主函數(shù)只需簡單調(diào)用choose函數(shù)就能執(zhí)行整個程序的相關(guān)功能;void choose() /數(shù)據(jù)類型選擇函數(shù)cout<<"時間:2009年9月26日n"<<endl<<"作者:"<<setw(32)<<"學(xué)號: "<<setw(32)<<"專業(yè):
4、電子技術(shù)"<<endl;cout<<endl<<"<1> 整型"<<endl<<"<2> 浮點(diǎn)型"<<endl<<"<3> 雙精度型"<<endl;cout<<"請選擇數(shù)據(jù)類型:n"int sjlx;cin>>sjlx;switch(sjlx) case 1: choose1(1); break; case 2: choose1(0.0); break
5、; case 3: choose1(1e-10); break; default:cout<<"輸入選擇錯誤!"<<endl;4、main函數(shù)中加入相關(guān)界面輸出語句和程序結(jié)束語句,使程序更加人性化,并加入了異常處理語句,使程序運(yùn)行的更加穩(wěn)定可靠;四、程序增加功能及實(shí)現(xiàn)辦法1、模板的使用本程序使用了大量的模板,譬如矩陣類模板、相關(guān)函數(shù)模板,以T為模板參數(shù),通過對T的不同類型的選擇實(shí)現(xiàn)相應(yīng)的運(yùn)算處理。其中choose1()函數(shù)本是無參函數(shù),為了方便模板化,給其賦以偽參數(shù)T,在執(zhí)行時通過T的取值生成相應(yīng)的函數(shù)模板,真可謂方便!template<cla
6、ss T>void choose1(T) /數(shù)據(jù)輸入類型選擇函數(shù)模板,其中T為偽參數(shù),用于函數(shù)模板實(shí)例化調(diào)用時:switch(sjlx) case 1: choose1(1); /生成int型模板 break; case 2: choose1(0.0); /生成float型模板 break; case 3: choose1(1e-10); /生成double型模板 break; default:cout<<"輸入選擇錯誤!"<<endl;2、矩陣類的構(gòu)造 本程序采用二級指針動態(tài)開辟內(nèi)存空間,結(jié)構(gòu)合理,操作方便,節(jié)省內(nèi)存使用;其中數(shù)據(jù)結(jié)構(gòu)如下:M
7、at->Mat0 ->Mat00 Mat01 Mat0j Mat1 ->Mat10 Mat11 Mat1j : : Mati ->Mati0 Mati1 Matij實(shí)現(xiàn)構(gòu)造的代碼為: template<class T>CMatrix<T>:CMatrix(int row,int col) /兩個參數(shù)的構(gòu)造函數(shù)int i,j;nRow=row,nCol=col;Mat=new T*nRow;for(i=0;i<nRow;i+)Mati=new TnCol;cout<<"請輸入數(shù)據(jù):n"for(i=0;i<
8、nRow;i+)for(j=0;j<nCol;j+)cout<<"第"<<i+1<<""<<j+1<<"個數(shù)據(jù):"cin>>Matij;3、運(yùn)算符的重載要實(shí)現(xiàn)矩陣間的乘法運(yùn)算,有必要對其運(yùn)算符進(jìn)行重載。而乘法運(yùn)算符又要針對不同數(shù)據(jù)類型進(jìn)行運(yùn)算,因此,對運(yùn)算符重載函數(shù)模板化也是很有必要的。template<class T>CMatrix<T> operator* (CMatrix<T> &mat1,CMatrix&l
9、t;T> &mat2) /矩陣乘法運(yùn)算符重載CMatrix<T> mat3(mat1.nRow,mat2.nCol,0);for(int i=0;i<mat1.nRow;i+)for(int j=0;j<mat2.nCol;j+)mat3.Matij=0;for(int k=0;k<mat1.nCol;k+)mat3.Matij+=mat1.Matik*mat2.Matkj;return mat3;無論何種數(shù)據(jù)類型的矩陣,其乘法算法都是一致的,詳見以上代碼。4、數(shù)據(jù)的輸入輸出 本程序數(shù)據(jù)可以初始賦值也可以通過鍵盤輸入,還可以從外部文件輸入。鍵盤輸入:
10、cout<<"請輸入數(shù)據(jù):n"for(i=0;i<nRow;i+)for(j=0;j<nCol;j+)cout<<"第"<<i+1<<""<<j+1<<"個數(shù)據(jù):"cin>>Matij;文件輸入:template<class T>void CMatrix<T>:InputFromFile() /矩陣文件輸入函數(shù)ifstream infile;infile.open("daijp.txt&
11、quot;,ios:nocreate);if(!infile)cout<<"輸入文件不存在,請先建立輸入文件n"exit(0);for(int i=0;i<nRow;i+)for(int j=0;j<nCol;j+)infile>>Matij;infile.close();矩陣的輸出:template<class T>void CMatrix<T>:Show() /矩陣輸出函數(shù)int i,j;for(i=0;i<nRow;i+)cout<<endl;for(j=0;j<nCol;j+)cou
12、t<<Matij<<setw(6);cout<<endl;5、程序的菜單設(shè)計和異常處理 本程序主要是使用switch開關(guān)語句進(jìn)行菜單設(shè)計,通過讀取鍵入不同的值進(jìn)入不同的子句執(zhí)行入口,進(jìn)而實(shí)現(xiàn)不同的功能。通過比較輸入的兩矩陣的行和列判斷能否進(jìn)行乘法運(yùn)算,防止亂輸入出現(xiàn)的異常。同時,本程序只是在主函數(shù)中使用了少量goto語句,并非濫用,非但沒有使程序流程無規(guī)律,反倒使程序代碼更加簡潔,層次結(jié)構(gòu)更加清晰。void main() /主函數(shù)loop:cout<<" *n"cout<<" *n" cout&
13、lt;<" *" cout<<"nnn*您好,歡迎使用矩陣乘法計算程序!*n"cout<<" *n"cout<<" *n"cout<<" *nn" choose();loop1:cout<<"想繼續(xù)執(zhí)行嗎?"<<endl<<"1.繼續(xù)"<<endl<<"2.退出"<<endl;int a;cin>>a
14、;switch(a) case 1:goto loop; break; case 2: cout<<"非常感謝您的使用!"<<endl<<endl<<"歡迎不嗇賜教!"<<endl<<endl<<"聯(lián)系方式:"<<endl<<"電話: 151"<<endl<<"QQ: 12345678"<<endl; cout<<"按任意鍵退出&q
15、uot;<<endl; cin.get(); cin.get(); /去除緩沖區(qū)的回車符 exit(1); default:cout<<"輸入選擇錯誤!"<<endl; goto loop1;五、程序設(shè)計中遇到的主要問題及解決辦法1、無法實(shí)現(xiàn)文件輸入主要原因是輸入之前調(diào)用的是默認(rèn)構(gòu)造函數(shù),只是簡單賦值,并未開辟內(nèi)存空間,后來調(diào)用帶參構(gòu)造函數(shù)就可以正常輸入數(shù)據(jù);2、重載乘法運(yùn)算的函數(shù)無法重載 經(jīng)檢查發(fā)現(xiàn),由于重載的是友元函數(shù),函數(shù)不存在this指針,因此必須顯式地調(diào)用兩個相乘的矩陣類。六、設(shè)計中尚存的不足1、功能還不夠強(qiáng)大,只能做簡單的矩陣
16、乘法,我所期望的是能夠做各種混合運(yùn)算,具有強(qiáng)大處理功能的實(shí)用程序,無奈所學(xué)知識有限,時間倉促;2、矩陣的輸出還有一個問題,當(dāng)矩陣的行數(shù)超過了窗口一行所能顯示的數(shù)時,這時又該怎么來輸出矩陣呢?3、關(guān)于異常處理這,我覺得處理功能也不是很行,覺得還是應(yīng)該建立全面的異常檢測與異常處理機(jī)制;七、設(shè)計的感想和心得體會1、本程序解皆系本人自主開發(fā),開發(fā)過程自然十分艱辛,使我深深地懂得了軟件版權(quán)保護(hù)的重要性;2、此次程序設(shè)計使我透徹地領(lǐng)悟到面向?qū)ο蟮某绦蛟O(shè)計的優(yōu)點(diǎn)和強(qiáng)大生命力,特別是類和模板的使用,使程序的兼容性和擴(kuò)展能力都大大加強(qiáng),比如我們想要再做一個處理其他類型數(shù)據(jù)的矩陣的乘法計算,只需要添加一個相應(yīng)的類
17、型聲明就可以利用模板迅速構(gòu)造出來;3、對凡事都應(yīng)當(dāng)有毅力,不要中途放棄。在開發(fā)過程中,好幾次遇到困難我都想再換一個別的程序或找同學(xué)拷一個程序,但我最終還是堅持下來了。永不言棄,你就一定會成功的;4、磨刀不誤砍柴工。在剛拿到任務(wù)時,書上的關(guān)鍵代碼我也是看的一頭霧水,后來我將上學(xué)期的課本認(rèn)真研讀一遍之后,感覺收獲真的不少,接著編起程來就順手好多了;5、通過這次程序設(shè)計,我相信我十月份的等級考試已經(jīng)沒多大問題了,哈哈修改后的程序(矩陣乘法計算)#include<iostream.h>#include<fstream.h>#include<iomanip.h>#in
18、clude<stdlib.h>template<class T> class CMatrix /矩陣類的模板 T * * Mat; /矩陣的頭指針 int nRow; /矩陣的行數(shù) int nCol; /矩陣的列數(shù)public: CMatrix(); /缺省構(gòu)造函數(shù) CMatrix(int row,int col); /構(gòu)造函數(shù) CMatrix(int row,int col,int k); /構(gòu)造函數(shù),從鍵盤輸入矩陣 void Show(); /輸出 void InputFromFile(); /從文件中輸入矩陣 friend CMatrix<T>oper
19、ator *(CMatrix<T> &mat1,CMatrix<T> &mat2); /重載乘法;template<class T> CMatrix<T>:CMatrix() /缺省構(gòu)造函數(shù)nRow=100,nCol=100; Mat=new T*100;for(int i=0;i<100;i+)Mati=new T100;template<class T>CMatrix<T>:CMatrix(int row,int col) /兩個參數(shù)的構(gòu)造函數(shù)int i,j;nRow=row,nCol=col;M
20、at=new T*nRow;for(i=0;i<nRow;i+)Mati=new TnCol;cout<<"請輸入數(shù)據(jù):n"for(i=0;i<nRow;i+)for(j=0;j<nCol;j+)cout<<"第"<<i+1<<""<<j+1<<"個數(shù)據(jù):"cin>>Matij;template<class T>CMatrix<T>:CMatrix(int row,int col,int k
21、)/三個參數(shù)的構(gòu)造函數(shù)nRow=row,nCol=col;Mat=new T*nRow;for(int i=0;i<nRow;i+)Mati=new TnCol;template<class T>void CMatrix<T>:Show() /矩陣輸出函數(shù)int i,j;for(i=0;i<nRow;i+)cout<<endl;for(j=0;j<nCol;j+)cout<<Matij<<setw(6);cout<<endl;template<class T>void CMatrix<T
22、>:InputFromFile() /矩陣文件輸入函數(shù)ifstream infile;infile.open("daijp.txt",ios:nocreate);if(!infile)cout<<"輸入文件不存在,請先建立輸入文件n"exit(0);for(int i=0;i<nRow;i+)for(int j=0;j<nCol;j+)infile>>Matij;infile.close();template<class T>CMatrix<T> operator* (CMatrix<
23、;T> &mat1,CMatrix<T> &mat2) /矩陣乘法運(yùn)算符重載CMatrix<T> mat3(mat1.nRow,mat2.nCol,0);for(int i=0;i<mat1.nRow;i+)for(int j=0;j<mat2.nCol;j+)mat3.Matij=0;for(int k=0;k<mat1.nCol;k+)mat3.Matij+=mat1.Matik*mat2.Matkj;return mat3;template<class T>void choose1(T) /數(shù)據(jù)輸入類型選擇函數(shù)模
24、板,其中T為偽參數(shù),用于函數(shù)模板實(shí)例化 cout<<"<1> 初始化賦值"<<endl<<"<2> 鍵盤輸入"<<endl<<"<3> 文件輸入"<<endl; int srfs; cout<<"請選擇數(shù)據(jù)輸入方式:n" cin>>srfs; switch(srfs) /用于選擇不同的輸入方式 case 1: CMatrix<T> mata,matb,matc; break
25、; case 2: int a,b,c,d; cout<<"請輸入第一個矩陣的行數(shù)和列數(shù):"<<endl; cin>>a>>b; CMatrix<T> mata(a,b); cout<<"請輸入第二個矩陣的行數(shù)和列數(shù):"<<endl; cin>>c>>d;if(b!=c)cout<<"錯誤!兩矩陣不能相乘!n"break; CMatrix<T> matb(c,d); CMatrix<T> ma
26、tc(a,d,0); mata.Show(); matb.Show(); matc=mata*matb;cout<<"兩矩陣相乘結(jié)果為:n" matc.Show(); break; case 3: int a,b,c,d; cout<<"請輸入第一個矩陣的行數(shù)和列數(shù):"<<endl; cin>>a>>b; CMatrix<T> mata(a,b,0); cout<<"請輸入第二個矩陣的行數(shù)和列數(shù):"<<endl; cin>>c&
27、gt;>d; if(b!=c)cout<<"錯誤!兩矩陣不能相乘!n"break; CMatrix<T> matb(c,d,0); CMatrix<T> matc(a,d,0);mata.InputFromFile();matb.InputFromFile(); mata.Show(); matb.Show(); matc=mata*matb;cout<<"兩矩陣相乘結(jié)果為:n" matc.Show(); break; default:cout<<"輸入選擇錯誤!"&l
28、t;<endl; void choose() /數(shù)據(jù)類型選擇函數(shù)cout<<"時間:2009年9月26日n"<<endl<<"作者:"<<setw(32)<<"學(xué)號: "<<setw(32)<<"專業(yè): "<<endl;cout<<endl<<"<1> 整型"<<endl<<"<2> 浮點(diǎn)型"<<endl<<"<3> 雙精度型"<<endl;cout<<"請選擇數(shù)據(jù)類型:n"int sjlx;cin>>sjlx;switch(sjlx) ca
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024污水處理廠運(yùn)營合同書(范本)
- 2024幼兒園租房合同協(xié)議書樣本
- 房產(chǎn)抵押擔(dān)保借款合同書范例
- 2024貨船租賃合同范本范文
- 股權(quán)抵押借款合同范文2024年
- 店面租房門面房租房合同協(xié)議
- 商業(yè)鋪?zhàn)赓U合同格式
- 項(xiàng)目合作協(xié)議書模板示例
- 2024居間合同,居間合同范例
- 技術(shù)合作協(xié)議樣式
- 大同重力儲能設(shè)備項(xiàng)目可行性研究報告
- 樁基及基坑質(zhì)量通病防治講義PPT(105頁)
- 精品堆垛機(jī)安裝指導(dǎo)書
- 前臺月度績效考核表(KPI)
- 雞的飼養(yǎng)管理-優(yōu)質(zhì)課件
- 德育課(共19張PPT)
- 化學(xué)微生物學(xué)第7章 微生物轉(zhuǎn)化
- 《少年正是讀書時》-完整版PPT課件
- 四、貼標(biāo)機(jī)基本調(diào)整法1
- 船舶建造方案
- 35KV集電線路鐵塔組立專項(xiàng)方案
評論
0/150
提交評論