根据矩阵乘法规则,编程计算矩阵的乘积。函数fix_prod_ele()是基本方法编写,函数fix_prod_opt()是优化方法编写。
程序代码
#define N 3
#define M 4
typedef int fix_matrix1[N][M];
typedef int fix_matrix2[M][N];
int fix_prod_ele(fix_matrix1,fix_matrix2,int,int);
int fix_prod_opt(fix_matrix1,fix_matrix2,int,int);
void main()
{
int i,j,k;
int C[N][N],D[N][N];
fix_matrix1 A;
fix_matrix2 B;
for(i=0;i<N;i++) //A、B矩阵赋初值
for(j=0;j<M;j++)
{
A[i][j]=i+j;
}
for(i=0;i<M;i++) //A、B矩阵赋初值
for(j=0;j<N;j++)
{
B[i][j]=i+j+1;
}
for(i=0;i<N;i++)
for(k=0;k<N;k++)
C[i][k]=fix_prod_ele(A,B,i,k); //C为矩阵A和B的乘积
for(i=0;i<N;i++)
for(k=0;k<N;k++)
D[i][k]=fix_prod_opt(A,B,i,k); //D为矩阵A和B的乘积
while(1);
}
int fix_prod_ele(fix_matrix1 A,fix_matrix2 B,int i,int k)
{
int l;
int result=0;
for(l=0;l<M;l++)
result+=A[i][l]*B[l][k];
return result;
}
int fix_prod_opt(fix_matrix1 A,fix_matrix2 B,int i,int k)
{
int *Arow=&A[i][0];
int *Bptr=&B[0][k];
int result=0;
int l;
for(l=0;l!=M;l++)
{
result+=Arow[l]*(*Bptr);
Bptr+=N;
}
return result;
}