题目描述
利用重载运算符,实现矩阵的加法,减法。
请重载加减运算符并自定义矩阵类完成相应的操作
输入
第一行为测试数据数
对于每组测试数据
第一行为矩阵的行数和列数
接下来分别为两个矩阵的各个元素
输出
输出矩阵的和与差
输入样例
2
4 5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
9 8 7 6 5
4 3 2 1 0
-1 5 6 9 1
2 0 2 1 6
4 5
9 8 7 6 5
4 3 2 1 0
-1 5 6 9 1
2 0 2 1 6
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
输出样例
Add:
10 10 10 10 10
10 10 10 10 10
10 17 19 23 16
18 17 20 20 26
Minus:
-8 -6 -4 -2 0
2 4 6 8 10
12 7 7 5 14
14 17 16 18 14
-----------------
Add:
10 10 10 10 10
10 10 10 10 10
10 17 19 23 16
18 17 20 20 26
Minus:
8 6 4 2 0
-2 -4 -6 -8 -10
-12 -7 -7 -5 -14
-14 -17 -16 -18 -14
-----------------
代码
#include<iostream>
using namespace std;
class JU{
private:
int L,H;
int **a;
public:
JU(){}
JU(int h,int l,int**b)
{
L=l;
H=h;
a=new int*[H];
for(int i=0;i<H;i++){
a[i]=new int[L];
}
for(int i=0;i<H;i++)
{
for(int j=0;j<L;j++)
{
a[i][j]=b[i][j];
}
}
}
JU(JU &t)
{
H= t.H;
L= t.L;
a = new int* [H];
int i, j;
for (i = 0; i < H; i++)
{
a[i] = new int[L];
}
for (i = 0; i < H; i++)
{
for (j = 0; j < L; j++)
{
a[i][j] = t.a[i][j];
}
}
}
void set(int l,int h,int**b)
{
L=l;
H=h;
a=new int*[H];
for(int i=0;i<H;i++){
a[i]=new int[L];
}
for(int i=0;i<H;i++)
{
for(int j=0;j<L;j++)
{
a[i][j]=b[i][j];
}
}
}
JU operator+(JU t)
{
for(int i=0;i<H;i++)
{
for(int j=0;j<L;j++)
{
a[i][j]+=t.a[i][j];
}
}
return *this;
}
JU operator-(JU t)
{
for(int i=0;i<H;i++)
{
for(int j=0;j<L;j++)
{
a[i][j]-=t.a[i][j];
}
}
return *this;
}
void print()
{
for (int i = 0; i < H; i++)
{
for (int j = 0; j < L; j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
}
};
int main()
{
int n;
int **b,**a;
int x,y;
cin>>n;
while(n--)
{
cin>>x>>y;
a=new int*[x];
b=new int*[x];
for(int i=0;i<x;i++)
{
a[i]=new int[y];
b[i]=new int[y];
}
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
{
cin>>a[i][j];
}
}
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
{
cin>>b[i][j];
}
}
JU j1(x,y,a);
JU j2(x,y,b);
JU temp=j1;
j1+j2;
cout<<"Add:"<<endl;
j1.print();
temp-j2;
cout<<"Minus:"<<endl;
temp.print();
cout<<"-----------------"<<endl;
}
return 0;
}