这是我一直在努力的任务。基本上我有核心思想和代码在工作顺序。但问题是,我做的方法与说明不同。
因此,为了将矩阵相乘,我事先询问了数组的维度(行,列)。然后我将再次请求数组的值
但是我想做的是简单地输入数组的值,并根据输入的整数数量自动找到数组的维度。但是我不知道怎么做,因为我记得我的老师说过不能将数组设置为变量值或类似的东西。
//what I'd like to be able to do
Enter the first matrix:
1 2 3
4 5 6
Enter the second matrix:
5 6
7 8
9 0
// what I am currently doing
#include<iostream>
using namespace std;
int main()
{
int l,m,z,n;
int matrixA[10][10];
int matrixB[10][10];
int matrixC[10][10];
cout<<"enter the dimension of the first matrix"<<endl;
cin>>l>>m;
cout<<"enter the dimension of the second matrix"<<endl;
cin>>z>>n;
if(m!=z||z!=m){
cout<<"error in the multiblication enter new dimensions"<<endl;
cout<<"enter the dimension of the first matrix"<<endl;
cin>>l>>m;
cout<<"enter the dimension of the second matrix"<<endl;
cin>>z>>n;
}
else{
cout<<"enter the first matrix"<<endl;
for(int i=0;i<l;i++){
for(int j=0;j<m;j++){
cin>>matrixA[i][j];
}
}
cout<<"enter the second matrix"<<endl;
for(int i=0;i<z;i++){
for(int j=0;j<n;j++){
cin>>matrixB[i][j];
}
}
for(int i=0;i<l;i++){
for(int j=0;j<n;j++){
matrixC[i][j]=0;
for(int k=0;k<m;k++){
matrixC[i][j]=matrixC[i][j]+(matrixA[i][k] * matrixB[k][j]);
}
}
}
cout<<"your matrix is"<<endl;
for(int i=0;i<l;i++){
for(int j=0;j<n;j++){
cout<<matrixC[i][j]<<" ";
}
cout<<endl;
}
}
//system("pause");
return 0;
}
不能声明具有运行时维度的数组(在C语言中称为变长数组,在C语言中是允许的),该维度必须在编译时已知。解决方案是使用std::vector
std::vector<std::vector<int>> matrix(M, std::vector<int>(N)); // M x N
或使用动态数组
int** matrix = new int*[M]; // allocate pointers for rows
for(size_t i = 0; i < N; ++i)
matrix[i] = new int[N]; // allocate each row
那么不要忘记在程序结束时删除它们
for(size_t i = 0; i < N; ++i)
delete[] matrix[i];
delete[] matrix;
您应该更喜欢std::vector
方法,因为您不需要处理内存分配等问题。
从您的代码行来看,您似乎想要求用户输入矩阵1的列和矩阵2的行的正确值。你所使用的是一个if语句,它只会运行一次。如果你的"m"one_answers"z"的值在第一次输入时不相等,那么你将永远无法进入代码的else部分,因为你已经声明了其他代码来输入和相乘矩阵。
为了检查"m"one_answers"z"的值是否相等,可以使用while循环或do while循环。
while(m!=z)
{cout<<"enter the value m and z";`
cin>>m>>z;
}
除此之外,最好使用l,m,z,n作为静态成员来节省内存。
如果你想声明一个你想要的维度的矩阵,那么你可以这样做。
首先,要求用户输入矩阵的维数。然后,当输入正确的尺寸后,您应该能够制作所需尺寸的矩阵。以下是我想说的:
cout<<"enter the values of l and m";
cin>>l>>m;
cout<<"enter the values of z and n";
cin>>z>>n;
int array1[l][m];
int array2[z][n];
因此,您可以轻松地输入所需矩阵的维度。