矩阵运算
描述
在下面的编辑器中的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 <iostream>
#include <string>
using namespace std;
/********* Begin *********/
//矩阵类的声明
class Matrix {
};
//矩阵类的定义
//实现矩阵加法
Matrix operator+(Matrix &m1, Matrix &m2) {
}
//实现矩阵减法
Matrix operator-(Matrix &m1, Matrix &m2) {
}
//实现矩阵乘法
Matrix operator*(Matrix &m1, Matrix &m2) {
}
/********* End *********/
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 | | |
#include <iostream>
#include <string>
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;
}