#include "stdafx.h"
#include<iostream>
using namespace std;
int **createMat(int row, int col)
{
int **mat;
mat = new int*[row];//申请空间
for (int i = 0; i < row; i++)
{
mat[i] = new int[col];
}
return mat;
}
void deleteMat(int **mat, int row)//释放空间
{
for (int i = 0; i < row; i++)
{
delete[] mat[i];
}
delete[] mat;
}
void input(int **mat, int row, int col)
{
cout << "请输入矩阵中的元素:";
for (int i = 0; i < row; i++)
for (int j = 0; j < col; j++)
cin >> mat[i][j];
}
void output(int **mat, int row, int col)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cout << mat[i][j] << '\t';
}
cout << endl;
}
}
//矩阵相加
int **matAdd(int **mat1, int r1, int c1, int **mat2, int r2, int c2)
{
int **res1;
res1 = createMat(r1, c2);
int i, j, k;
for (i = 0; i < r1; i++)
{
for (j = 0; j < c2; j++)
{
res1[i][j] = 0;
for (k = 0; k < c1; k++)
{
res1[i][j] = mat1[i][k] + mat2[k][i];
}
}
}
return res1;
}
//矩阵相减
int **matSub(int **mat1, int r1, int c1, int **mat2, int r2, int c2)
{
int **res2;
res2 = createMat(r1, c2);
int i, j, k;
for (i = 0; i < r1; i++)
{
for (j = 0; j < c2; j++)
{
res2[i][j] = 0;
for (k = 0; k < c1; k++)
{
res2[i][j] = mat1[i][k] -mat2[k][i];//mat1 i行
}
}
}
return res2;
}
int _tmain(int argc, _TCHAR* argv)
{
int r, c;
cout << "请输入矩阵的行和列" << endl;
cin >> r;
cin >> c;
int **mat1 = createMat(r, c);
input(mat1, r, c);
output(mat1, r, c);
int **mat2 = createMat(r, c);
input(mat2, r, c);
output(mat2, r, c);
int **res1,**res2;
res1 = matAdd(mat1, 2, 2, mat2, 2, 2);
cout << "新的矩阵为:" << endl;
output(res1, r, c);
res2 = matSub(mat1, 2, 2, mat2, 2, 2);
cout << "新的矩阵为:" << endl;
output(res2, r, c);
deleteMat(mat1, r);
deleteMat(mat2, r);
deleteMat(res1, r);
deleteMat(res2, r);
return 0;
}
结果如下: