c++運(yùn)算符重載矩陣運(yùn)算_第1頁
c++運(yùn)算符重載矩陣運(yùn)算_第2頁
c++運(yùn)算符重載矩陣運(yùn)算_第3頁
c++運(yùn)算符重載矩陣運(yùn)算_第4頁
c++運(yùn)算符重載矩陣運(yùn)算_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余7頁可下載查看

下載本文檔

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

文檔簡介

1、C+讓機(jī)實(shí)驗(yàn)報(bào)告指導(dǎo)教師:馮瀟姓名:趙蕊學(xué)號:2010211864班級:0411003時間:2012/5/21實(shí)驗(yàn) 6-3 矩陣運(yùn)算題目:對具有同行列數(shù)的整形矩陣進(jìn)行加、減、乘、轉(zhuǎn)置、賦值運(yùn)算、問題分析和任務(wù)定義1 .本實(shí)驗(yàn)通過矩陣類 Matrix 來實(shí)現(xiàn),并運(yùn)用 Matrix 類的重載做運(yùn)算。2 .Matrix 的數(shù)據(jù)成員有:行 line、列 col、指向矩陣的元素的指針 int*elems。它的成員函數(shù)有:(1)構(gòu)造函數(shù);(2)析構(gòu)函數(shù);(3)復(fù)制構(gòu)造函數(shù);(4)對屬性進(jìn)行修改的 set 方法;(5)對屬性進(jìn)行讀取的 get 方法;(6)對 Matrix 進(jìn)行重載加運(yùn)算符;(7)對 Mat

2、rix 進(jìn)行重載減運(yùn)算符;(8)對 Matrix 進(jìn)行重載乘運(yùn)算符;(9)對 Matrix 進(jìn)行重載轉(zhuǎn)置運(yùn)算符;(10)對 Matrix 進(jìn)行重載賦值運(yùn)算符;、概要設(shè)計(jì)1.為實(shí)現(xiàn)矩陣的加、減、乘、轉(zhuǎn)置、賦值運(yùn)算必須弄清楚矩陣的具體運(yùn)算規(guī)則。(1)矩陣的加減法運(yùn)算;矩陣的加減法必須倆個矩陣的行列數(shù)相同,然后對應(yīng)位置的行列進(jìn)行相加減。(2)矩陣的乘法運(yùn)算;矩陣的乘法運(yùn)算必須運(yùn)算的矩陣的第一個矩陣的列數(shù)與運(yùn)算的第二個矩陣的行數(shù)相同,否則不能運(yùn)算。運(yùn)算時,第一個矩陣的第 i 行第 j 列的數(shù)與第二個矩陣的第 i列元素分別相乘為新矩陣的第 i 行第 j 列的數(shù)。(3)矩陣的賦值運(yùn)算;矩陣的賦值運(yùn)算即倆個

3、矩陣的元素完全相同。(4)矩陣的轉(zhuǎn)置運(yùn)算;矩陣的轉(zhuǎn)置運(yùn)算即為轉(zhuǎn)置前的第 i 行第 j 列的數(shù)即為轉(zhuǎn)置后的矩陣的第 j 行第 i 列的2.程序的流程圖三、詳細(xì)設(shè)計(jì)1 .定義 Matrix 類和友元#ifndefMATRIX_H#defineMATRIX_H#includeusingnamespacestd;classMatrix;Matrixoperator+(constMatrix&a,constMatrix&b);Matrixoperator-(constMatrix&a,constMatrix&b);Matrixoperator*(constMatrix&a

4、mp;a,constMatrix&b);classMatrixfriendMatrixoperator+(constMatrix&a,constMatrix&b);friendMatrixoperator-(constMatrix&a,constMatrix&b);friendMatrixoperator*(constMatrix&a,constMatrix&b);public:Matrix(intl,intc);Matrix(constMatrix&m);Matrix。;voidsetLine(intl);voidsetCol(

5、intc);voidsetElems();intgetLine()const;intgetCol()const;voidprint()const;Matrix&operator=(constMatrix&m);Matrixoperator()const;private:intline;intcol;int*elems;#endif2. Matrix 的構(gòu)造函數(shù)與賦值構(gòu)造函數(shù)和析構(gòu)函數(shù) Matrix:Matrix(intl,intc)setLine(l);setCol(c);elems=newintcol*line;Matrix:Matrix(constMatrix&m)

6、line=m.line;col=m.col;elems=newintline*col;for(inti=0;iline*col;i+)elemsi=m.elemsi;3. Matrix 的賦值運(yùn)算Matrix&Matrix:operator=(constMatrix&m)setLine(m.line);setCol(m.col);deleteelems;elems=newintline*col;for(inti=0;iline*col;i+)elemsi=m.elemsi;return*this;)4. Matrix 的轉(zhuǎn)置運(yùn)算MatrixMatrix:operator()co

7、nst(Matrixt(col,line);for(inti=0;iline;i+)for(intj=0;jcol;j+)t.elemsline*j+i=elemscol*i+j;returnt;)5. Matrix 的加法運(yùn)算Matrixoperator+(constMatrix&a,constMatrix&b)(if(a.line!=b.line|a.col!=b.col)(cerr兩矩陣的行列數(shù)不相同!endl;exit(EXIT_FAILURE);)Matrixc(a.line,a.col);for(inti=0;ia.line*a.col;i+)c.elemsi=a.

8、elemsi+b.elemsi;returnc;)6. Matrix 的減法運(yùn)算Matrixoperator-(constMatrix&a,constMatrix&b)(if(a.line!=b.line|a.col!=b.col)(cerr兩矩陣的行列數(shù)不相同!endl;exit(EXIT_FAILURE);)Matrixc(a.line,a.col);for(inti=0;ia.line*a.col;i+)c.elemsi=a.elemsi-b.elemsi;returnc;)7. Matrix 的乘法運(yùn)算Matrixoperator*(constMatrix&a,

9、constMatrix&b)(if(a.col!=b.line)(cerr第一個矩陣的列數(shù)和第二個矩陣的行數(shù)不相同!endl;exit(EXIT_FAILURE);)intline=a.line,col=b.col;inti,j,k;Matrixtemp(line,col);for(i=0;iline*col;i+)temp.elemsi=0;for(i=0;iline;i+)for(k=0;kcol;k+)for(j=0;jb.line;j+)temp.elemsi*col+k+=a.elemsi*col+j*b.elemsj*col+k;returntemp;)8 .輸出矩陣的元素

10、voidMatrix:print()constinti;for(i=0;iline*col;i+)if(i+1)%(col)=0)coutsetw(5)elemsiendl;)elsecoutsetw(5)elemsi;)9 .主函數(shù)intmain()Matrixa(3,3),b(3,3);cout請輸入第一個矩陣的元素:endl;a.setElems();a.print();cout請輸入第二個矩陣的元素:endl;b.setElems();b.print();Matrixc(3,3);cout兩矩陣的乘積為:endl;c=a*b;c.print();coutn 轉(zhuǎn)置矩陣為:endl;(c)

11、.print();return0;四、調(diào)試分析本程序通過自己構(gòu)造矩陣類,對矩陣進(jìn)行構(gòu)造,并進(jìn)行一系列運(yùn)算,還進(jìn)行復(fù)制構(gòu)造函數(shù)之類的進(jìn)行操作,開始進(jìn)行調(diào)試構(gòu)造函數(shù)沒問題,在進(jìn)行“operator/運(yùn)算時一直出錯,經(jīng)過長達(dá)一個小時左右的調(diào)試,查錯,最終終于查到錯誤,一個很小的錯誤盡然困惑了 1 個小時,在進(jìn)行賦值構(gòu)造函數(shù)時竟然沒有進(jìn)行動態(tài)存儲分配空間,導(dǎo)致每次運(yùn)行到“operator”時直接程序爆掉,也讓我想起上次的一個程序盡然沒有釋放一個開辟的空間,導(dǎo)致在循環(huán)中一直開辟空間導(dǎo)致程序一直處于開辟空間的狀態(tài),也使程序一直爆掉,生活中很少能夠做到很謹(jǐn)慎的處理問題,這是一個合格的程序員必須克服的問題,自

12、己在以后的一定要在熟練掌握各種知識點(diǎn)的同時好好的注意沒一個細(xì)節(jié)。五、運(yùn)行結(jié)果請輸入第一個矩陣的元素;12345&7S912345679請輸入第二個矩陣的元素:9B7654321?B?654兩矩那的藁積為:3月241884695413811490轉(zhuǎn)置矩陣為388413824691141S5490Pressanykeytocontinue附源程序:#ifndefMATRIX_H#defineMATRIX_H#includeusingnamespacestd;classMatrix;Matrixoperator+(constMatrix&a,constMatrix&b);Ma

13、trixoperator-(constMatrix&a,constMatrix&b);Matrixoperator*(constMatrix&a,constMatrix&b);classMatrixfriendMatrixoperator+(constMatrix&a,constMatrix&b);friendMatrixoperator-(constMatrix&a,constMatrix&b);friendMatrixoperator*(constMatrix&a,constMatrix&b);public:M

14、atrix(intl,intc);Matrix(constMatrix&m);Matrix();voidsetLine(intl);voidsetCol(intc);voidsetElems();intgetLine()const;intgetCol()const;voidprint()const;Matrix&operator=(constMatrix&m);Matrixoperator()const;private:intline;intcol;int*elems;#endif#includematrix.h#includeMatrix:Matrix(intl,in

15、tc)setLine(l);setCol(c);elems=newintcol*line;Matrix:Matrix(constMatrix&m)line=m.line;col=m.col;elems=newintline*col;for(inti=0;iline*col;i+)elemsi=m.elemsi;Matrix:Matrix()deleteelems;voidMatrix:setLine(intl)line=l;)voidMatrix:setCol(intc)(col=c;)voidMatrix:setElems()(inti,size=col*line;for(i=0;i

16、elemsi;)intMatrix:getLine()const(returnline;)intMatrix:getCol()const(returncol;)voidMatrix:print()constinti;for(i=0;iline*col;i+)if(i+1)%(col)=0)coutsetw(5)elemsiendl;)elsecoutsetw(5)elemsi;)Matrix&Matrix:operator=(constMatrix&m)(setLine(m.line);setCol(m.col);deleteelems;elems=newintline*col

17、;for(inti=0;iline*col;i+)elemsi=m.elemsi;)return*this;)MatrixMatrix:operator-()constMatrixt(col,line);for(inti=0;iline;i+)for(intj=0;jcol;j+)t.elemsline*j+i=elemscol*i+j;returnt;)#includematrix.hMatrixoperator*(constMatrix&a,constMatrix&b)if(a.col!=b.line)cerr第一個矩陣的列數(shù)和第二個矩陣的行數(shù)不相同exit(EXIT_FA

18、ILURE);)intline=a.line,col=b.col;inti,j,k;Matrixtemp(line,col);for(i=0;iline*col;i+)temp.elemsi=0;!endl;for(i=0;iline;i+)for(k=0;kcol;k+)for(j=0;jb.line;j+)temp.elemsi*col+k+=a.elemsi*col+j*b.elemsj*col+k;returntemp;)Matrixoperator-(constMatrix&a,constMatrix&b)(if(a.line!=b.line|a.col!=b.col)(cerr兩矩陣的行列數(shù)不相同!endl;exit(EXIT_FAILURE);)Matrixc(a.

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論