题目描述
在向量CVector类的代码上,定义n阶矩阵类CMatrix,包含私有数据成员M存储矩阵数据,n存储矩阵阶数。 将CMatrix定义为CVector的友元类。 为CMatrix添加成员函数:CVector Multi(const CVector &V1),计算n阶矩阵与n维向量V1的乘积。 为CMatrix添加成员函数,判定矩阵与向量V1是否可计算乘积。
为CMatrix添加需要的构造函数、析构函数和其它成员函数。 主函数输入数据,测试矩阵与向量的乘积。 附:n阶矩阵包含n*
输入
测试次数t 对每组测试数据,格式如下
第一行,矩阵阶数n 向量维数m n阶矩阵 m维向量输出
对每组测试数据,若矩阵与向量不能计算乘积,输出error;否则输出计算结果
样例输入
1
3
1 0 0
0 1 0
0 0 1
3
1 2 3样例输出
1 2 3
提示
#include <bits/stdc++.h>
using namespace std;
template <class T>
class CVector;
template <class S>
class CMatrix;
template <class T>
class CVector
{
private:
T *x;
int m;
public:
CVector(int b)
{
m = b;
x = new T[m];
for (int i = 0; i < m; i++)
{
cin >> x[i];
}
}
void show()
{
for (int i = 0; i < m; i++)
{
cout << x[i] << " ";
}
cout << endl;
}
template <typename S>
friend class CMatrix;
};
template <class S>
class CMatrix
{
private:
S **p;
int n;
public:
CMatrix(int b)
{
n = b;
p = new S *[n];
for (int i = 0; i < n; i++)
{
p[i] = new S[n];
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> p[i][j];
}
}
}
template <class T>
CVector<T> Multi(const CVector<T> &V1)
{
T *temp;
temp = new T[n];
for (int i = 0; i < n; i++)
{
temp[i] = 0;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
temp[i] += p[i][j] * V1.x[j];
}
}
for (int i = 0; i < n; i++)
{
V1.x[i] = temp[i];
}
return V1;
}
bool Multiplyable(int a, int b)
{
if (a == b)
{
return 1;
}
else
{
return 0;
}
}
};
int main()
{
int t, n, m;
cin >> t;
while (t--)
{
cin >> n >> m;
CMatrix<int> q(n);
CVector<int> v1(m);
bool t = q.Multiplyable(n, m);
if (t == 1)
{
cout << "error" << endl;
}
else
{
q.Multi(v1);
v1.show();
}
}
return 0;
}