矩阵连乘问题比较麻烦的地方就是对二维数组形参的赋值,例如形参int **a,它不能由二维数组a[][]直接传参a来表示,必须通过指针进行中转,例如
void subfun(int n, char **subargs)
{
int i;
for (i = 0; i < n; i++) {
printf("subargs[%d] = %s\n", i, subargs[i]);
}
}
void main()
{
char *a[3];
char args[][5] = {"abc", "def", "ghi"};
a[0] = args[0]; //equals with a[0] = &args[0][0];
a[1] = args[1];
a[2] = args[2];
subfun(3, a); //若此处为subfun(3, args);则会编译出错
}
然后才能传参,矩阵连乘问题编程实现如下(运行已通过)
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
void matrixMultiply(int **a,int **b,int **c,int ra,int ca,int rb,int cb);
int a[4][5],b[5][4],c[4][4];
int *A[4],*B[5],*C[4];
cout<<"请输入第一个矩阵:"<<endl;
for(int i=0;i<4;i++)
{
for(int j=0;j<5;j++)
{
cin>>a[i][j];
}
A[i]=a[i];
}
cout<<"请输入第二个矩阵:"<<endl;
for(int m=0;m<5;m++)
{
for(int n=0;n<4;n++)
{
cin>>b[m][n];
}
B[m]=b[m];
}
C[0]=c[0];
C[1]=c[1];
C[2]=c[2];
C[3]=c[3];
matrixMultiply(A,B,C,4,5,5,4);
return 0;
}
void matrixMultiply(int **a,int **b,int **c,int ra,int ca,int rb,int cb)
{
if(ca!=rb) cout<<"矩阵不可乘"<<endl;
for(int i=0;i<ra;i++)
{
for(int j=0;j<cb;j++)
{
int sum = a[i][0]*b[0][j];
for(int k=1;k<ca;k++)
sum+=a[i][k]*b[k][j];
c[i][j]=sum;
}
}
for(int m=0;m<ra;m++)
{
for(int n=0;n<cb;n++)
{
cout<<setw(5)<<c[m][n]<<" ";
}
cout<<endl;
}
}
运行结果如下:

希望能解决你的问题。
本文详细介绍了如何在C++中实现矩阵连乘问题,包括如何正确传递二维数组作为函数参数,以及完整的矩阵乘法函数实现。通过具体代码示例,展示了从输入两个矩阵到输出乘法结果的全过程。
2万+

被折叠的 条评论
为什么被折叠?



