在下面的编辑器中的Begin-End之间补充代码,设计一个矩阵类( Matrix ),并实现矩阵的简单运算,具体要求如下:
-
成员变量:这一部分学员可以自由发挥,但要求都是私有成员。
-
成员函数:
-
构造函数:Matrix(int r,int c),参数 r 和 c 分别代表矩阵的行和列。
-
全部设值函数:void Fill(int value),函数将矩阵内所有的元素都设置为参数 value 的值。
-
指定位置设值函数:void Set(int r,int c,int value),函数将矩阵第 r 行 c 列的元素设置为 value 的值。
-
获取元素函数:int Get(int r,int c)函数,函数返回矩阵第 r 行 c 列的元素。
-
打印函数:void Print(),函数按照矩阵的形状打印出矩阵内容,每一个值后跟着一个空格。比如一个2x4元素全为1的矩阵,打印结果为(更明显表示格式,空格均用下划线_代替):
- 1_1_1_1_
- 1_1_1_1_
-
-
普通函数:
-
Matrix operator+(Matrix &m1,Matrix &m2)函数,重载Matrix类的加法运算符,实现矩阵的加法运算。
-
Matrix operator-(Matrix &m1,Matrix &m2)函数,重载Matrix类的减法运算符,实现矩阵的减法运算。
-
Matrix operator*(Matrix &m1,Matrix &m2)函数,重载Matrix类的乘法运算符,实现矩阵的乘法运算。
-
#include输入#include using namespace std; //矩阵类的声明 class Matrix { }; //矩阵类的定义 //实现矩阵加法 Matrix operator+(Matrix &m1, Matrix &m2) { } //实现矩阵减法 Matrix operator-(Matrix &m1, Matrix &m2) { } //实现矩阵乘法 Matrix operator*(Matrix &m1, Matrix &m2) { } int main() { int i, j; cin >> i >> j; Matrix m1(i, j), m2(i, j), m3(j, i); m1.Fill(1); m2.Fill(2); m3.Fill(0); for (int s = 0 ; s < i ; s++) { for (int c = 0 ; c < j ; c++) { if (s == c) m3.Set(s, c, s + 1); } } cout << "m1 + m2 :" << endl ; (m1 + m2).Print(); cout << "m1 - m2 :" << endl ; (m1 - m2).Print(); cout << "m1 * m3 :" << endl ; (m1 * m3).Print(); return 0; }
矩阵的行、列数
输出两个矩阵之和
两个矩阵之差
两个矩阵之乘积
输入输出示例| 输入 | 输出 | |
| 示例 1 | 2 2 | m1 + m2 : 3 3 3 3 m1 - m2 : -1 -1 -1 -1 m1 * m3 : 1 2 1 2 |
#include#include using namespace std; int sum = 0; class Matrix { public: Matrix(int r_ = 0, int c_ = 0) { r = r_; c = c_; } void Fill(int value); void Set(int r, int c, int value); int Get(int r, int c); void Print(); int Getr() { return r; } int Getc() { return c; } void Setr(int r_) { r = r_; } void Setc(int c_) { c = c_; } private: int r, c; int a[100][100]; }; void Matrix::Fill(int value) { for (int i = 0;i < r;i++) { for (int j = 0;j < c;j++) { a[i][j] = value; } } } void Matrix::Set(int i, int j, int value) { a[i][j] = value; } int Matrix::Get(int i, int j) { return a[i][j]; } void Matrix::Print() { for (int i = 0;i < r;i++) { for (int j = 0;j < c;j++) { cout << a[i][j] << " "; } cout << endl; } } Matrix operator+(Matrix& m1, Matrix& m2) { Matrix temp;int res = 0; for (int i = 0;i < m1.Getr();i++) { for (int j = 0;j < m1.Getc();j++) { res = m1.Get(i, j) + m2.Get(i, j); temp.Set(i, j, res); } res = 0; } temp.Setr(m1.Getr()); temp.Setc(m1.Getc()); return temp; } Matrix operator-(Matrix& m1, Matrix& m2) { Matrix temp; for (int i = 0;i < m1.Getr();i++) { for (int j = 0;j < m1.Getc();j++) { int res; res = m1.Get(i, j) - m2.Get(i, j); temp.Set(i, j, res); } } temp.Setr(m1.Getr()); temp.Setc(m1.Getc()); return temp; } Matrix operator*(Matrix& m1, Matrix& m2) { Matrix temp; for (int i = 0;i < m1.Getr();i++) { for (int j = 0;j < m2.Getc();j++) { for (int k = 0;k < m1.Getc();k++) { sum = sum + m1.Get(i, k) * m2.Get(k, j); if (k == m1.Getc() - 1) { temp.Set(i, j, sum); } } sum = 0; } } temp.Setr(m1.Getr()); temp.Setc(m2.Getc()); return temp; } int main() { int i, j; cin >> i >> j; Matrix m1(i, j), m2(i, j), m3(j, i); m1.Fill(1); m2.Fill(2); m3.Fill(0); for (int s = 0; s < i; s++) { for (int c = 0; c < j; c++) { if (s == c) m3.Set(s, c, s + 1); } } cout << "m1 + m2 :" << endl; (m1 + m2).Print(); cout << "m1 - m2 :" << endl; (m1 - m2).Print(); cout << "m1 * m3 :" << endl; (m1 * m3).Print(); return 0; }



