C++初學初練數學指標與字串之矩陣初練
阿新 • • 發佈:2019-01-24
#include <iostream> #include <string> #include <cmath> using namespace std; class Matrix { public: Matrix(int,int); ~Matrix(); Matrix(const Matrix &m); int getLines(){return lines;} int getRows(){return rows;} void cinMatrix(); void coutMatrix(); friend void plusMatrix(Matrix &a,Matrix &b,Matrix &c); friend void subMatrix(Matrix &a,Matrix &b,Matrix &c); private: int lines; int rows; int *p; }; Matrix::Matrix(int Lines,int Rows):lines(Lines),rows(Rows) { p=new int[lines*rows]; } Matrix::Matrix(const Matrix &m) { lines=m.lines; rows=m.rows; p=new int[lines*rows]; for(int i=0;i<lines;i++) { for(int j=0;j<rows;j++) { p[i*rows+j]=m.p[i*rows+j]; } } } Matrix::~Matrix() { delete p; } void Matrix::cinMatrix() { for(int i=0;i<lines;i++) { for(int j=0;j<rows;j++) { cout<<"請輸入矩陣第"<<i+1<<"行第"<<j+1<<"列元素:"; cin>>p[i*rows+j]; } } } void Matrix::coutMatrix() { for(int i=0;i<lines;i++) { for(int j=0;j<rows;j++) { cout<<p[i*rows+j]<<" "; } cout<<endl; } } void plusMatrix(Matrix &a,Matrix &b,Matrix &c) { if(a.getLines()!=b.getLines()) { cout<<"矩陣不相容,不可進行矩陣加法運算"<<endl; exit(0); } else if(a.getRows()!=b.getRows()) { cout<<"矩陣不相容,不可進行矩陣減法運算"<<endl; exit(0); }else { for(int i=0;i<a.getLines();i++) { for(int j=0;j<a.getLines();j++) { c.p[i*a.getRows()+j]=a.p[i*a.getRows()+j]+b.p[i*a.getRows()+j]; } } } } void subMatrix(Matrix &a,Matrix &b,Matrix &c) { if(a.getLines()!=b.getLines()) { cout<<"矩陣不相容,不可進行矩陣加法運算"<<endl; exit(0); } else if(a.getRows()!=b.getRows()) { cout<<"矩陣不相容,不可進行矩陣減法運算"<<endl; exit(0); }else { //Matrix m(a); for(int i=0;i<a.getLines();i++) { for(int j=0;j<a.getLines();j++) { c.p[i*a.getRows()+j]=a.p[i*a.getRows()+j]-b.p[i*a.getRows()+j]; } } } } int main() { Matrix A1(4,3),A2(4,3),A3(4,3); A1.cinMatrix(); cout<<endl; A2.cinMatrix(); cout<<endl; A1.coutMatrix(); cout<<endl; A2.coutMatrix(); cout<<endl; A3.cinMatrix(); plusMatrix(A1,A2,A3); A3.coutMatrix(); Matrix *m=new Matrix(3,4); m[0].cinMatrix(); m[1].cinMatrix(); plusMatrix(m[0],m[1],m[2]); m[2].coutMatrix(); delete []m; return 0; }
這是一次上機實驗課內容,題目是:
用類來實現矩陣,定義一個矩陣的類,屬性包括:
矩陣大小,用 lines, rows(行、列來表示);
存貯矩陣的陣列指標,根據矩陣大小動態申請(new)。
矩陣類的方法包括:
建構函式:引數是矩陣大小,需要動態申請存貯矩陣的陣列;
解構函式:需要釋放矩陣的陣列指標;
拷貝建構函式:需要申請和複製陣列(深複製);
輸入函式:可以從cin 中輸入矩陣元素;
輸出函式:將矩陣格式化輸出到cout;
矩陣相加函式:實現兩個矩陣相加的功能,結果儲存在另一個矩陣裡,但必須矩陣
大小相同;
矩陣相減的函式:實現兩個矩陣相減的功能,結果儲存在另一個矩陣裡,但必須矩
陣大小相同。
主函式功能:
定義三個矩陣:A1、A2、A3;
初始化 A1、A2;
計算並輸出 A3 = A1+A2,A3=A1+A2;
用 new 動態建立三個矩陣類的物件:pA1、pA1、pA3;
初始化 pA1、pA2;
計算並輸出 pA3=pA1+pA2,pA3=pA1+pA2;
釋放 pA1、pA1、pA3。
ps:程式碼初練,錯誤請指出,求賜教,