题目描述
正在上传…重新上传取消
(1)在向量CVector类的代码上,定义n阶矩阵类CMatrix,包含私有数据成员data存储矩阵数据,n存储矩阵阶数。
(2)将CMatrix定义为CVector的友元类。
(3)为CMatrix添加成员函数:CVector multi(const CVector &v1),计算n阶矩阵与n维向量v1的乘积。
(4)为CMatrix添加成员函数,判定矩阵与向量v1是否可计算乘积。
(5)为CMatrix添加需要的构造函数、析构函数和其它成员函数。
主函数输入数据,测试矩阵与向量的乘积。
动态创建n阶矩阵示例代码如下:
int n;
int** data;
int i, j;
cin >> n;
// 先创建n行
data = new int* [n];
// 再创建n列
for (i = 0; i < n; i++)
{
data[i] = new int[n];
}
// 打印矩阵
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
cin >> data[i][j];
}
}
输入
测试次数t
对每组测试数据,格式如下
第一行,矩阵阶数n 向量维数m
n阶矩阵
m维向量
输出
对每组测试数据,若矩阵与向量不能计算乘积,输出error;否则输出计算结果
#include<iostream>
using namespace std;
class cmatrix;
class cvector {
int n;
int* data;
public:
cvector(int n1)
{
n = n1;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = 0;
};
cvector(int n1, int* data1)
{
n = n1;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = data1[i];
}
~cvector() { delete data; }
void print()
{
for (int i = 0; i < n; i++)
cout << data[i] << ' ';
cout << endl;
}
friend class cmatrix;
};
class cmatrix {
int n;
int** data;
public:
cmatrix() {};
cmatrix(int n1, int** data1) {
n = n1;
data = new int* [n];
for (int i = 0; i < n; i++)
data[i] = new int[n];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
data[i][j] = data1[i][j];
}
cvector Multi(const cvector& v1)
{
cvector sum(v1.n);
for (int j = 0; j < v1.n; j++)
for (int i = 0; i < v1.n; i++)
sum.data[j] += v1.data[i] * data[j][i];
return sum;
};
bool mul(int m, int n)
{
return m == n;
}
~cmatrix() { delete[]data; }
};
int main() {
int t;
cin >> t;
while (t--) {
int n, m;
int** data;
int i, j;
cin >> n;
data = new int* [n];
for (i = 0; i < n; i++)
{
data[i] = new int[n];
}
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
cin >> data[i][j];
cmatrix cm(n, data);
cin >> m;
int* a = new int[m];
for (i = 0; i < m; i++)
cin >> a[i];
cvector cv(m, a);
if (cm.mul(m, n)) {
cvector cv1= cm.Multi(cv);
cv1.print();
}
else cout << "error" << endl;
delete[]data;
}
return 0;
}