![中國(guó)地質(zhì)大學(xué)通信工程-c上機(jī)實(shí)習(xí)報(bào)告全_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/28/24e0921a-e81e-4d22-91e1-89a931d51ea7/24e0921a-e81e-4d22-91e1-89a931d51ea71.gif)
![中國(guó)地質(zhì)大學(xué)通信工程-c上機(jī)實(shí)習(xí)報(bào)告全_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/28/24e0921a-e81e-4d22-91e1-89a931d51ea7/24e0921a-e81e-4d22-91e1-89a931d51ea72.gif)
![中國(guó)地質(zhì)大學(xué)通信工程-c上機(jī)實(shí)習(xí)報(bào)告全_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/28/24e0921a-e81e-4d22-91e1-89a931d51ea7/24e0921a-e81e-4d22-91e1-89a931d51ea73.gif)
![中國(guó)地質(zhì)大學(xué)通信工程-c上機(jī)實(shí)習(xí)報(bào)告全_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/28/24e0921a-e81e-4d22-91e1-89a931d51ea7/24e0921a-e81e-4d22-91e1-89a931d51ea74.gif)
![中國(guó)地質(zhì)大學(xué)通信工程-c上機(jī)實(shí)習(xí)報(bào)告全_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/28/24e0921a-e81e-4d22-91e1-89a931d51ea7/24e0921a-e81e-4d22-91e1-89a931d51ea75.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.計(jì)算機(jī)高級(jí)語(yǔ)言(C+)實(shí)習(xí)報(bào)告題 目學(xué)生姓名:班 學(xué) 號(hào):指導(dǎo)老師:實(shí)驗(yàn)一 矩陣操作一、需求規(guī)格說(shuō)明要求實(shí)現(xiàn):矩陣的創(chuàng)建,輸出,復(fù)制,轉(zhuǎn)置,加法,減法,乘以一個(gè)數(shù),通過(guò)行列坐標(biāo)設(shè)置和獲取矩陣該位置元素的值。通過(guò)該題目,掌握(1)動(dòng)態(tài)數(shù)組和指針的使用(2)二維數(shù)組和一維數(shù)組的關(guān)系(3)傳引用調(diào)用參數(shù)(4)函數(shù)重載二、算法設(shè)計(jì)設(shè)計(jì)思想:1、首先建立矩陣結(jié)構(gòu)體struct Matrixint rows, cols; /矩陣的行數(shù)和列數(shù)int* data; /指向一個(gè)容納矩陣的動(dòng)態(tài)數(shù)組的指針變量,使用上等同于數(shù)組名。;2、要求實(shí)現(xiàn)以下函數(shù):矩陣的創(chuàng)建,寫(xiě)3個(gè)重載的函數(shù)CreateMat第1個(gè)函數(shù),有
2、2個(gè)參數(shù),分別是矩陣的行數(shù)和列數(shù),初始化矩陣,分配內(nèi)存空間,不賦初值。Matrix CreateMat (int rows, int cols);第2個(gè)函數(shù),有3個(gè)參數(shù),分別是矩陣的行數(shù),列數(shù),和矩陣各元素的值(是一個(gè)定值,也就是用一個(gè)值對(duì)矩陣初始化)Matrix CreateMat (int rows, int cols, const int scalar); 第3個(gè)函數(shù),有3個(gè)參數(shù),分別是矩陣的行數(shù),列數(shù),和矩陣各元素的值(用數(shù)組對(duì)矩陣初始化,采用數(shù)組參數(shù))Matrix CreateMat (int rows, int cols, const int data); 矩陣的輸出,Output
3、Mat函數(shù),矩陣的引用作為參數(shù)。void OutputMat(const Matrix & mat);注意:要求輸出為矩陣的形式,例如一個(gè)3*3矩陣的輸出格式為(前后有中括號(hào),數(shù)字對(duì)齊):矩陣的復(fù)制,CopyMat函數(shù)。void CopyMat(const Matrix & source, Matrix & target);/把矩陣source復(fù)制到矩陣target矩陣的轉(zhuǎn)置,TransMat函數(shù)。Matrix TransMat (const Matrix & mat); 矩陣的加法,AddMat函數(shù)。Matrix AddMat (const Matrix &a
4、mp; mat1, const Matrix & mat2); 注意,應(yīng)該/首先判斷mat1和mat2的大小是否一致,如果不一致,報(bào)錯(cuò),終止。報(bào)錯(cuò)采用函數(shù)exit(1),需要#include <cstdlib>。矩陣的減法,SubMat函數(shù).Matrix SubMat (const Matrix & mat1, const Matrix & mat2); 矩陣的數(shù)乘,MulMat函數(shù),矩陣mat乘以一個(gè)數(shù)scalarMatrix MulMat (const Matrix & mat, int scalar);獲取一個(gè)位置的矩陣元素的值,GetMatV
5、alue函數(shù)int GetMatValue (const Matrix & mat, int row, int col); /獲取行列坐標(biāo)為row和col位置的矩陣元素的值。11.設(shè)置一個(gè)位置的矩陣元素的值,SetMatValue函數(shù)int SetMatValue (const Matrix & mat, int row, int col, int scalar); /將行列坐標(biāo)為row和col位置的矩陣元素的值設(shè)置為scalar。12.釋放矩陣元素做占的freestore的空間。void ReleaseMat(Matrix & m);(2)設(shè)計(jì)表示:int main(
6、)cout<<"Create a 5*5 matrix mat1 without initialization:n" Matrix mat1 = CreateMat(5, 5); /調(diào)用兩個(gè)參數(shù)的重載函數(shù) OutputMat(mat1); /調(diào)用輸出函數(shù) ReleaseMat(mat1);/調(diào)用release函數(shù)CopyMat(mat3, mat1);/調(diào)用矩陣的復(fù)制函數(shù)OutputMat (mat1); cout<<endl<<"Transpose mat1: n"mat2=TransMat(mat1);/調(diào)用矩陣的
7、轉(zhuǎn)置函數(shù)OutputMat (mat2); Matrix mat4; cout<<endl<<"Add mat1 and mat3: n"mat4= AddMat(mat1, mat3);/調(diào)用矩陣的加法函數(shù)OutputMat (mat4);cout<<endl<<"Substract mat1 and mat3: n"mat4=SubMat(mat1, mat3);/調(diào)用矩陣的減法函數(shù)OutputMat (mat4);cout<<endl<<"mat1 * 2 equal
8、s to: n"mat4=MulMat(mat1, 2);/調(diào)用矩陣的乘法函數(shù)OutputMat (mat4);/設(shè)置和獲取1個(gè)位置的矩陣元素值int value= GetMatValue(mat1,1,2);。cout<<" nthe value of coordinates (2,3) is: "<<value<<endl;SetMatValue(mat1,1,2,100);value= GetMatValue(mat1,1,2);cout<<" n the value of coordinates (
9、2,3) becomes: "<<value<<endl; ReleaseMat(mat1);/釋放mat1所占的freestore空間 ReleaseMat(mat2);/釋放mat2所占的freestore空間 ReleaseMat(mat3);/釋放mat3所占的freestore空間 ReleaseMat(mat4);/釋放mat4所占的freestore空間cout <<endl<< "Hello world!" << endl;return 0; (3)詳細(xì)設(shè)計(jì)表示:頭文件:#ifndef U
10、SEMATRIX_H#define USEMATRIX_H#include <iostream>#include <cstdlib>using namespace std;struct Matrixint rows, cols; /矩陣的行數(shù)和列數(shù)int* data; /指向一個(gè)容納矩陣的動(dòng)態(tài)數(shù)組的指針變量,使用上等同于數(shù)組名。;Matrix CreateMat (int rows, int cols); /矩陣的行數(shù)和列數(shù),初始化矩陣,分配內(nèi)存空間,不賦初值Matrix CreateMat (int rows, int cols, const int scalar);
11、 /矩陣的行數(shù),列數(shù),和矩陣各元素的值,用一個(gè)值對(duì)矩陣初始化,是一個(gè)定值Matrix CreateMat (int rows, int cols, const int data); /矩陣的行數(shù),列數(shù),和矩陣各元素的值,采用數(shù)組參數(shù)對(duì)矩陣初始化void OutputMat(const Matrix & mat); /矩陣的輸出函數(shù),矩陣的引用作為參數(shù)void CopyMat(const Matrix & source, Matrix & target);/把矩陣source復(fù)制到矩陣targetMatrix TransMat (const Matrix & ma
12、t); /矩陣的轉(zhuǎn)置函數(shù)Matrix AddMat (const Matrix & mat1, const Matrix & mat2); /矩陣的加法函數(shù)Matrix SubMat (const Matrix & mat1, const Matrix & mat2); /矩陣的加法函數(shù)Matrix MulMat (const Matrix & mat, int scalar);/矩陣的數(shù)乘函數(shù),使矩陣mat乘以一個(gè)數(shù)scalarint GetMatValue (const Matrix & mat, int row, int col); /獲取
13、行列坐標(biāo)為row和col位置的矩陣元素的值。int SetMatValue (Matrix & mat, int row, int col, int scalar); /設(shè)置一個(gè)位置的矩陣元素的值,將行列坐標(biāo)為row和col位置的矩陣元素的值設(shè)置為scalarvoid ReleaseMat(Matrix & m);/釋放矩陣元素做占的freestore的空間#endif三、調(diào)試報(bào)告問(wèn)題1:在矩陣的轉(zhuǎn)置函數(shù)定義時(shí),由于行數(shù)和列數(shù)的固定規(guī)律及公式?jīng)]有及時(shí)找出來(lái),使得設(shè)計(jì)的程序無(wú)法正確輸出四、用戶手冊(cè)先根據(jù)頭文件#ifndef USEMATRIX_H#define USEMATRIX
14、_H#include <iostream>#include <cstdlib>using namespace std;struct Matrixint rows, cols; /矩陣的行數(shù)和列數(shù)int* data; /指向一個(gè)容納矩陣的動(dòng)態(tài)數(shù)組的指針變量,使用上等同于數(shù)組名。;Matrix CreateMat (int rows, int cols); /矩陣的行數(shù)和列數(shù),初始化矩陣,分配內(nèi)存空間,不賦初值Matrix CreateMat (int rows, int cols, const int scalar); /矩陣的行數(shù),列數(shù),和矩陣各元素的值,用一個(gè)值對(duì)矩陣
15、初始化,是一個(gè)定值Matrix CreateMat (int rows, int cols, const int data); /矩陣的行數(shù),列數(shù),和矩陣各元素的值,采用數(shù)組參數(shù)對(duì)矩陣初始化void OutputMat(const Matrix & mat); /矩陣的輸出函數(shù),矩陣的引用作為參數(shù)void CopyMat(const Matrix & source, Matrix & target);/把矩陣source復(fù)制到矩陣targetMatrix TransMat (const Matrix & mat); /矩陣的轉(zhuǎn)置函數(shù)Matrix AddMat (
16、const Matrix & mat1, const Matrix & mat2); /矩陣的加法函數(shù)Matrix SubMat (const Matrix & mat1, const Matrix & mat2); /矩陣的加法函數(shù)Matrix MulMat (const Matrix & mat, int scalar);/矩陣的數(shù)乘函數(shù),使矩陣mat乘以一個(gè)數(shù)scalarint GetMatValue (const Matrix & mat, int row, int col); /獲取行列坐標(biāo)為row和col位置的矩陣元素的值。int S
17、etMatValue (Matrix & mat, int row, int col, int scalar); /設(shè)置一個(gè)位置的矩陣元素的值,將行列坐標(biāo)為row和col位置的矩陣元素的值設(shè)置為scalarvoid ReleaseMat(Matrix & m);/釋放矩陣元素做占的freestore的空間#endif參考應(yīng)用文件實(shí)現(xiàn)程序功能:#include <iostream>#include "UseMatrix.h"#include<cstdlib>using namespace std;int main()/第一種創(chuàng)建方式co
18、ut<<"Create a 5*5 matrix mat1 without initialization:n" Matrix mat1 = CreateMat(3,3); /創(chuàng)建5*5的矩陣mat1,不設(shè)初值。 OutputMat(mat1); /輸出該矩陣 /第二種創(chuàng)建方式 cout<<endl; cout<<"Create a 4*4 matrix mat2 with value being 7:n" Matrix mat2 = CreateMat(3, 3, 7); /創(chuàng)建4*4的矩陣mat2,各元素初值為7。
19、OutputMat (mat2); /輸出該矩陣 /第三種創(chuàng)建方式 cout<<endl<<"Create a 3*3 matrix mat3 being equal to data:n" int data = 1, 2, 3, 4, 5, 6, 7, 8, 9; Matrix mat3 = CreateMat (3, 3, data); /創(chuàng)建3*3的矩陣mat3,用data賦初值。 OutputMat (mat3);CopyMat(mat3, mat1);OutputMat (mat1); /輸出該矩陣mat1,和mat3相同,3*3矩陣。/實(shí)現(xiàn)
20、矩陣轉(zhuǎn)置(ok)cout<<endl<<"Transpose mat1: n"mat2=TransMat(mat3);OutputMat (mat2); /使用加法,減法,數(shù)乘Matrix mat4; cout<<endl<<"Add mat1 and mat3: n"mat4= AddMat(mat1, mat3);OutputMat (mat4);cout<<endl<<"Substract mat1 and mat3: n"mat4=SubMat(mat1,
21、 mat3);OutputMat (mat4);cout<<endl<<"mat1 * 2 equals to: n"mat4=MulMat(mat1, 2);OutputMat (mat4);/設(shè)置和獲取1個(gè)位置的矩陣元素值int value= GetMatValue(mat1,1,2);/得到mat1第2行第3列的元素值。cout<<" nthe value of coordinates (2,3) is: "<<value<<endl;SetMatValue(mat1,1,2,100);v
22、alue= GetMatValue(mat1,1,2);/得到mat1第2行第3列的新的元素值。cout<<" n the value of coordinates (2,3) becomes: "<<value<<endl; ReleaseMat(mat1);/釋放mat1所占的freestore空間 ReleaseMat(mat2);/釋放mat2所占的freestore空間 ReleaseMat(mat3);/釋放mat3所占的freestore空間 ReleaseMat(mat4);/釋放mat4所占的freestore空間cou
23、t <<endl<< "Hello world!" << endl;return 0;五、附錄頭文件:#ifndef USEMATRIX_H#define USEMATRIX_H#include <iostream>#include <cstdlib>using namespace std;struct Matrixint rows, cols; /矩陣的行數(shù)和列數(shù)int* data; /指向一個(gè)容納矩陣的動(dòng)態(tài)數(shù)組的指針變量,使用上等同于數(shù)組名。;Matrix CreateMat (int rows, int co
24、ls); /矩陣的行數(shù)和列數(shù),初始化矩陣,分配內(nèi)存空間,不賦初值Matrix CreateMat (int rows, int cols, const int scalar); /矩陣的行數(shù),列數(shù),和矩陣各元素的值,用一個(gè)值對(duì)矩陣初始化,是一個(gè)定值Matrix CreateMat (int rows, int cols, const int data); /矩陣的行數(shù),列數(shù),和矩陣各元素的值,采用數(shù)組參數(shù)對(duì)矩陣初始化void OutputMat(const Matrix & mat); /矩陣的輸出函數(shù),矩陣的引用作為參數(shù)void CopyMat(const Matrix &
25、source, Matrix & target);/把矩陣source復(fù)制到矩陣targetMatrix TransMat (const Matrix & mat); /矩陣的轉(zhuǎn)置函數(shù)Matrix AddMat (const Matrix & mat1, const Matrix & mat2); /矩陣的加法函數(shù)Matrix SubMat (const Matrix & mat1, const Matrix & mat2); /矩陣的加法函數(shù)Matrix MulMat (const Matrix & mat, int scalar);/
26、矩陣的數(shù)乘函數(shù),使矩陣mat乘以一個(gè)數(shù)scalarint GetMatValue (const Matrix & mat, int row, int col); /獲取行列坐標(biāo)為row和col位置的矩陣元素的值。int SetMatValue (Matrix & mat, int row, int col, int scalar); /設(shè)置一個(gè)位置的矩陣元素的值,將行列坐標(biāo)為row和col位置的矩陣元素的值設(shè)置為scalarvoid ReleaseMat(Matrix & m);/釋放矩陣元素做占的freestore的空間#endif實(shí)現(xiàn)文件:#include &quo
27、t;UseMatrix.h"#include <iostream>#include<cstdlib>using namespace std;Matrix CreateMat (int rows, int cols) /矩陣的行數(shù)和列數(shù),初始化矩陣,分配內(nèi)存空間,不賦初值Matrix m;m.rows = rows;m.cols = cols;m.data = new int rows * cols;for(int i = 0; i < rows * cols; i+);return m;Matrix CreateMat (int rows, int co
28、ls, const int scalar)/*矩陣的行數(shù),列數(shù),和矩陣各元素的值 用一個(gè)值對(duì)矩陣初始化,是一個(gè)定值*/Matrix m;m.rows=rows;m.cols=cols;m.data = new int rows * cols;for(int i = 0; i < rows * cols; i+)m.datai =scalar;return m;Matrix CreateMat (int rows, int cols, const int data)/*矩陣的行數(shù),列數(shù),和矩陣各元素的值 采用數(shù)組參數(shù)對(duì)矩陣初始化*/Matrix m;m.rows = rows;m.cols
29、 = cols;m.data = new int rows * cols;for(int i = 0; i < rows * cols; i+)m.datai = datai; return m; void OutputMat (const Matrix&mat) /矩陣的輸出函數(shù),矩陣的引用作為參數(shù)cout<<""int i;for(i=0;i<mat.rows*mat.cols;i+)cout<<mat.datai;if(i=mat.rows*mat.cols-1)cout<<""<<
30、;endl;elseif(i+1)%mat.rows=0)cout<<endl;elsecout<<" "void CopyMat (const Matrix & source, Matrix & target)/把矩陣source復(fù)制到矩陣targetif(!(source.rows=target.rows && source.cols=target.cols)cout<<"error!"<<endl;exit(1);target.rows = source.rows;ta
31、rget.cols = source.cols;for(int i = 0; i < source.rows * source.cols; i+)target.datai = source.datai; Matrix TransMat (const Matrix & mat)/矩陣的轉(zhuǎn)置函數(shù)Matrix m; m.rows = mat.rows;m.cols = mat.cols; m.data = new int mat.rows * mat.cols; for (int row=0;row<mat.rows; row+) for(int col=0;col<mat
32、.cols;col+) m.datacol*mat.rows+row = mat.datarow*mat.rows+col; return m; Matrix AddMat (const Matrix & mat1, const Matrix & mat2) /矩陣的加法函數(shù) Matrix m;if(!(mat1.rows=mat2.rows&&mat1.cols=mat2.cols)cout<<"error!"<<endl;exit(1);elsem.rows = mat1.rows;m.cols = mat1.co
33、ls; m.data = new int mat1.rows * mat1.cols;for(int i=0; i<mat1.rows * mat1.cols; i+)m.datai=mat1.datai+mat2.datai;return m;Matrix SubMat (const Matrix & mat1, const Matrix & mat2)/矩陣的減法函數(shù)Matrix m;if(!(mat1.rows=mat2.rows&&mat1.cols=mat2.cols)cout<<"error!"<<e
34、ndl;exit(0);elsem.rows = mat1.rows;m.cols = mat1.cols; m.data = new int mat1.rows * mat1.cols;for(int i=0; i<mat1.rows * mat1.cols; i+)m.datai=mat1.datai-mat2.datai; return m;Matrix MulMat (const Matrix & mat, int scalar)/矩陣的數(shù)乘函數(shù),使矩陣mat乘以一個(gè)數(shù)scalar Matrix mat0;mat0.rows = mat.rows;mat0.cols =
35、mat.cols;mat0.data=new intmat.rows * mat.cols;for(int i=0; i<mat.rows*mat.cols; i+)mat0.datai=mat.datai * scalar; return mat0;int GetMatValue (const Matrix & mat, int row, int col)/獲取行列坐標(biāo)為row和col位置的矩陣元素的值。if(row+1)>mat.rows|(col+1)>mat.cols)cout<<"error!"<<endl;exi
36、t(0);elsereturn(mat.datarow*mat.rows+col);int SetMatValue (Matrix & mat, int row, int col, int scalar)/*設(shè)置一個(gè)位置的矩陣元素的值 將行列坐標(biāo)為row和col位置的矩陣元素的值設(shè)置為scalar*/mat.datarow * mat.rows+col=scalar;return 0;void ReleaseMat(Matrix & m) /釋放矩陣元素做占的freestore的空間 delete m.data;m.data=NULL;應(yīng)用文件:#include <ios
37、tream>#include "UseMatrix.h"#include<cstdlib>using namespace std;int main()/第一種創(chuàng)建方式cout<<"Create a 5*5 matrix mat1 without initialization:n" Matrix mat1 = CreateMat(3,3); /創(chuàng)建5*5的矩陣mat1,不設(shè)初值。 OutputMat(mat1); /輸出該矩陣/第二種創(chuàng)建方式 cout<<endl; cout<<"Create
38、 a 4*4 matrix mat2 with value being 7:n" Matrix mat2 = CreateMat(3, 3, 7); /創(chuàng)建4*4的矩陣mat2,各元素初值為7。 OutputMat (mat2); /輸出該矩陣/第三種創(chuàng)建方式 cout<<endl<<"Create a 3*3 matrix mat3 being equal to data:n" int data = 1, 2, 3, 4, 5, 6, 7, 8, 9; Matrix mat3 = CreateMat (3, 3, data); /創(chuàng)建3*
39、3的矩陣mat3,用data賦初值。 OutputMat (mat3);CopyMat(mat3, mat1);OutputMat (mat1); /輸出該矩陣mat1,和mat3相同,3*3矩陣。/實(shí)現(xiàn)矩陣轉(zhuǎn)置(ok)cout<<endl<<"Transpose mat1: n"mat2=TransMat(mat3);OutputMat (mat2); /使用加法,減法,數(shù)乘Matrix mat4; cout<<endl<<"Add mat1 and mat3: n"mat4= AddMat(mat1,
40、mat3);OutputMat (mat4);cout<<endl<<"Substract mat1 and mat3: n"mat4=SubMat(mat1, mat3);OutputMat (mat4);cout<<endl<<"mat1 * 2 equals to: n"mat4=MulMat(mat1, 2);OutputMat (mat4);/設(shè)置和獲取1個(gè)位置的矩陣元素值int value= GetMatValue(mat1,1,2);/得到mat1第2行第3列的元素值。cout<<
41、" nthe value of coordinates (2,3) is: "<<value<<endl;SetMatValue(mat1,1,2,100);value= GetMatValue(mat1,1,2);/得到mat1第2行第3列的新的元素值。cout<<" n the value of coordinates (2,3) becomes: "<<value<<endl;ReleaseMat(mat1);/釋放mat1所占的freestore空間 ReleaseMat(mat2);/
42、釋放mat2所占的freestore空間 ReleaseMat(mat3);/釋放mat3所占的freestore空間 ReleaseMat(mat4);/釋放mat4所占的freestore空間cout <<endl<< "Hello world!" << endl;return 0;實(shí)驗(yàn)二 MyMat類定義和應(yīng)用一、需求規(guī)格說(shuō)明定義一個(gè)類MyMat,其對(duì)象是矩陣。該類包含3個(gè)成員變量,1是矩陣的行數(shù),2是矩陣的列數(shù),3是指向一個(gè)容納矩陣的動(dòng)態(tài)數(shù)組的指針變量。需要在類中定義的函數(shù)包括:(1) 定義5個(gè)構(gòu)造函數(shù),第一個(gè)是默認(rèn)構(gòu)造函數(shù),指針
43、變量為NULL;第二個(gè)接收2個(gè)參數(shù)(分別是行數(shù)和列數(shù)),為矩陣分配內(nèi)存空間,但不設(shè)初值;第三個(gè)接收3個(gè)參數(shù)(分別是行數(shù),列數(shù),以及一個(gè)int類型變量),為矩陣分配內(nèi)存空間,并將矩陣所有元素的值都設(shè)置為該int類型變量的值;第四個(gè)接收3個(gè)參數(shù)(分別是行數(shù),列數(shù),以及一個(gè)1維數(shù)組),為矩陣分配內(nèi)存空間,并將矩陣初始化為該數(shù)組的值;第五個(gè)是復(fù)制構(gòu)造函數(shù),接收MyMat類型的對(duì)象為參數(shù)。注意,在copy constructor定義中,輸出一句話到屏幕(cout<<" Copy constructor is called.n"),以跟蹤拷貝構(gòu)造函數(shù)是何時(shí)被自動(dòng)調(diào)用的。(2
44、)定義析構(gòu)函數(shù),將對(duì)象占用的內(nèi)存返回給自由存儲(chǔ),并將指針變量設(shè)為NULL,并且輸出一句話到屏幕(cout<<"Destructor is called.n"),以跟蹤析構(gòu)函數(shù)是何時(shí)被自動(dòng)調(diào)用的。(3)定義兩個(gè)初始化矩陣的重載函數(shù)(成員函數(shù)),函數(shù)名為create,一個(gè)具有2個(gè)參數(shù)(分別是行數(shù)和列數(shù)),為矩陣分配內(nèi)存空間,但不設(shè)初值;另一個(gè)接收3個(gè)參數(shù)(分別是行數(shù),列數(shù),以及一個(gè)1維數(shù)組),為矩陣分配內(nèi)存空間,并將矩陣初始化為該數(shù)組的值。(4)定義2個(gè)成員函數(shù),分別返回矩陣的行數(shù)和列數(shù)。(5)定義at成員函數(shù),接收2個(gè)參數(shù),分別是行號(hào)和列號(hào),并返回該坐標(biāo)位置處的矩
45、陣的值。(6)定義1個(gè)重載的賦值=操作符(定義為成員函數(shù)),將MyMat類型的矩陣賦值給當(dāng)前調(diào)用對(duì)象。(7)定義輸出操作符(<<),用來(lái)將MyMat類型的矩陣進(jìn)行輸出(只能用友元函數(shù)實(shí)現(xiàn))。并且,選擇合適的流參數(shù),使得既可以輸出到屏幕,也可以輸出到文件。注意矩陣輸出按照矩陣的格式,例如:(8)定義重載的加號(hào)+操作符和減號(hào)-操作符(可以友元函數(shù)實(shí)現(xiàn),也可以成員函數(shù)實(shí)現(xiàn)),實(shí)現(xiàn)2個(gè)矩陣的相加或者相減操作。(9)定義兩個(gè)重載的數(shù)乘*操作符,一個(gè)實(shí)現(xiàn)1個(gè)int類型變量數(shù)據(jù)乘以矩陣(友元函數(shù)實(shí)現(xiàn)),一個(gè)實(shí)現(xiàn)矩陣乘以1個(gè)int類型變量數(shù)據(jù)(可以友元函數(shù),也可以成員函數(shù))。(10)定義重載的等號(hào)
46、=操作符(可以用友元函數(shù)實(shí)現(xiàn),也可以用成員函數(shù)實(shí)現(xiàn)),判斷2個(gè)矩陣是否相等。二、算法設(shè)計(jì)(1)設(shè)計(jì)思想:明確一個(gè)類的聲明格式,確定好公共成員函數(shù)和私有成員變量的聲明方式,掌握好授課時(shí)老師強(qiáng)調(diào)的典型的幾個(gè)函數(shù)的聲明格式還有定義應(yīng)該注意的問(wèn)題,明確好形參與實(shí)參之間的聯(lián)系以及如何調(diào)用。最后,創(chuàng)建好接口文件還有實(shí)現(xiàn)文件以及應(yīng)用文件,用學(xué)過(guò)的語(yǔ)言模板建立好鏈接。 (2)設(shè)計(jì)表示:int main()/ 初始化,構(gòu)造函數(shù)的使用Mat matrix_0(5, 5);/ 調(diào)用兩個(gè)參數(shù)的構(gòu)造函數(shù)cout << "matrix_0= n"<<matrix_0 <&
47、lt; endl;Mat matrix_1(5, 5, 7);/ 調(diào)用三個(gè)參數(shù),設(shè)為定值的構(gòu)造函數(shù)cout << "matrix_1=n "<<matrix_1 << endl;int datas = 1, 2, 3, 4, 5, 6;Mat matrix_2(2, 3, datas);/ 調(diào)用三個(gè)參數(shù),有數(shù)組的構(gòu)造函數(shù)cout << "matrix_2= n"<<matrix_2 << endl;Mat matrix_3 = matrix_2;/ 調(diào)用拷貝構(gòu)造函數(shù)cout <
48、< "matrix_3= n"<<matrix_3 << endl;/ 已有變量初始化matrix_0.create(3, 4);/ 調(diào)用兩個(gè)參數(shù)的重載函數(shù)cout << "matrix_0=n "<<matrix_0 << endl;matrix_1.create(3, 2, datas);/ 調(diào)用三個(gè)參數(shù)的重載函數(shù)cout << "matrix_1=n "<<matrix_1 << endl;/ 得到/修改 指定位置的值int s
49、calar = matrix_1.at(1, 0);/ 調(diào)用at函數(shù)cout << "The value in (1,0) of matrix_1 is: "<<scalar << endl;matrix_1.at(1, 0) = 7;cout << "Now the value in (1,0) of matrix_1 becomes: "<<matrix_1.at(1, 0) << endl; matrix_0.create(4, 5);for(int i = 0; i <
50、 matrix_0.row(); i+)for(int j = 0; j < matrix_0.col(); j+)matrix_0.at(i, j) = i * matrix_0.col() + j;cout << "matrix_0=n "<<matrix_0 << endl;/ 矩陣運(yùn)算,操作符重載Mat matrix_4(4, 4, 5), matrix_5(4, 4, 3);Mat matrix_6;matrix_6 = matrix_4 + matrix_5;cout << "matrix_6=n
51、"<<matrix_6 << endl;matrix_6 = matrix_4 - matrix_5;cout << "matrix_6=n "<<matrix_6 << endl;/ 矩陣乘數(shù)操作,后一個(gè)是友元函數(shù)matrix_6 = matrix_6 * 4;cout << "matrix_6=n "<<matrix_6 << endl;matrix_6 = 2 * matrix_6;cout << "matrix_6=n
52、"<<matrix_6 << endl;/判斷兩個(gè)矩陣是否相等if (matrix_5=matrix_6)cout<<"They are equal.n"else cout<<"They are different.n"printf("Hello worldn");return 0; (3)詳細(xì)設(shè)計(jì)表示:應(yīng)用文件:#include<iostream.h>#include<fstream>#include<cstdlib>#include &q
53、uot;My Mat.h"/using namespace std;MyMat:MyMat():rows(0),cols(0),datas(NULL)/默認(rèn)構(gòu)造函數(shù),指針變量為NULLMyMat:MyMat (int row, int col)/接收2個(gè)參數(shù),為矩陣分配內(nèi)存空間,但不設(shè)初值rows=row;cols=col;datas = new int rows * cols;MyMat:MyMat (int row, int col, const int scalar)/*接收3個(gè)參數(shù),為矩陣分配內(nèi)存空間并將矩陣所有元素的值都設(shè)置為該int類型變量的值*/ rows = row;
54、cols = col; datas = new int rows * cols;for(int i = 0; i < rows * cols; i+)datasi = scalar;MyMat:MyMat (int row, int col, const int data)/接收3個(gè)參數(shù),為矩陣分配內(nèi)存空間,并將矩陣初始化為該數(shù)組的值rows = row;cols = col;datas = new int rows * cols;for(int i = 0; i < rows * cols; i+)datasi = datai; MyMat:MyMat (const MyMat
55、& matrix)/復(fù)制構(gòu)造函數(shù),接收MyMat類型的對(duì)象為參數(shù) cout<<" Copy constructor is called.n"datas = new int matrix.rows * matrix.cols;for(int i = 0; i < rows * cols; i+)datasi=matrix.datasi;MyMat:MyMat ()/定義析構(gòu)函數(shù)cout<<"Destructor is called.n"delete datas;void MyMat: create (int row,
56、int col)/重載成員函數(shù),具有2個(gè)參數(shù),為矩陣分配內(nèi)存空間,但不設(shè)初值rows=row;cols=col;datas = new int rows * cols;void MyMat: create (int row, int col, const int data)/重載成員函數(shù),接收3個(gè)參數(shù),為矩陣分配內(nèi)存空間,并將矩陣初始化為該數(shù)組的值rows = row;cols = col;datas = new int rows * cols; for(int i = 0; i < rows * cols; i+)datasi = datai; int MyMat:get_row()/
57、返回矩陣行數(shù)的成員函數(shù)return rows;int MyMat:get_col()/返回矩陣列數(shù)的成員函數(shù)return cols;int & MyMat:at (int row, int col)/at成員函數(shù),接收2個(gè)參數(shù),返回指定位置的函數(shù)值if(row>rows-1|col>cols-1)cout<<"error!"<<endl;exit(0);return datasrows*col+cols;void MyMat:operator = (const MyMat & matrix)/定義重載的賦值=操作符為成員函
58、數(shù),將MyMat類型的矩陣賦值給當(dāng)前調(diào)用對(duì)象MyMat m;m.rows = matrix.rows;m.cols = matrix.cols; m.datas = new int matrix.rows * matrix.cols;for(int i = 0; i < matrix.rows * matrix.cols; i+)m.datasi = matrix.datasi; MyMat operator + (const MyMat & matrix1,const MyMat & matrix2)/定義重載的加號(hào)+操作符MyMat m;if(!(matrix1.rows=matrix2.rows && ma
溫馨提示
- 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個(gè)人居間協(xié)議范文(2篇)
- 2025年個(gè)人貨運(yùn)汽車租賃合同模板(2篇)
- 2025年產(chǎn)品經(jīng)銷協(xié)議標(biāo)準(zhǔn)范文(2篇)
- 2025年五年級(jí)班主任期末個(gè)人工作總結(jié)模版(2篇)
- 2025年產(chǎn)品供貨合同格式范文(2篇)
- 智慧小鎮(zhèn)用地中介合同范本
- 辦公大樓石材運(yùn)送合同模板
- 2025年度安防設(shè)備展覽會(huì)現(xiàn)場(chǎng)展位安保合同
- 婚慶服務(wù)居間合同
- 教育設(shè)施改造貸款居間合同
- RB/T 101-2013能源管理體系電子信息企業(yè)認(rèn)證要求
- GB/T 4513.7-2017不定形耐火材料第7部分:預(yù)制件的測(cè)定
- GB/T 10205-2009磷酸一銨、磷酸二銨
- 公司財(cái)務(wù)制度及流程
- 高支模專項(xiàng)施工方案(專家論證)
- 深圳版初中英語(yǔ)單詞匯總
- 健康養(yǎng)生,快樂(lè)生活課件
- 《物流與供應(yīng)鏈管理-新商業(yè)、新鏈接、新物流》配套教學(xué)課件
- MDD指令附錄一 基本要求檢查表2013版
- 駱駝祥子1一24章批注
- 新部編人教版四年級(jí)下冊(cè)道德與法治全冊(cè)教案(教學(xué)設(shè)計(jì))
評(píng)論
0/150
提交評(píng)論