c语言初学求两个矩阵乘积问题 5
{
int i,j,k;
int a[4][3],b[3][2],c[4][2];
for(i=0;i<4;i++)
{for(k=0;k<3;k++)
scanf("%d",&a[i][k]);
}
for(k=0;k<3;k++)
{for(j=0;j<2;j++)
scanf("%d",&b[k][j]);
}
for(i=0;i<4;i++)
{for(j=0;j<2;j++)
{c[i][j]=0;
for(k=0;k<3;k++)
c[i][j]+=a[i][k]*b[k][j];
printf("%6d",c[i][j]);
}
printf("\n");
}
}
本人初学,请各位把求积部分用通俗易懂的加上注释 !! 谢谢!!! 展开
若然一矩阵的列数与另一矩阵的行数相等,则可定义这两个矩阵的 乘积。 如 A 是 m×n 矩阵和 B 是 n×p矩阵,它们是乘积 AB 是一个 m×p 矩阵,其中
(AB)[i, j] = A[i, 1] * B[1, j] + A[i, 2] * B[2, j] + ... + A[i, n] * B[n, j] 对所有 i 及 j。
此乘法有如下性质:
(AB)C = A(BC) 对所有 k×m 矩阵 A, m×n 矩阵 B 及 n×p 矩阵 C ("结合律").
(A + B)C = AC + BC 对所有 m×n 矩阵 A 及 B 和 n&tiems;k 矩阵 C ("分配律")。
C(A + B) = CA + CB 对所有 m×n 矩阵 A 及 B 和 k×m 矩阵 C ("分配律")。
要注意的是:可置换性不一定成立,即有矩阵 A 及 B 使得 AB ≠ BA。
Q=M*N(Q的行数和M相同,列数和N相同)
其中,M是m1*n1矩阵,N是m2*n2矩阵。当n1=m2时有:
for(i=1;i<=m1;++i)
for(j=1;j<=n2;++j){
Q[i][j]=0;
for(k=1;k<=n1;++k)Q[i][j]+=M[i][k]*N[k][j];
}
c[i][j]+=a[i][k]*b[k][j];这一句
其他的你应该明白
for(i=0;i<4;i++)
{for(k=0;k<3;k++)
scanf("%d",&a[i][k]);
}
for(k=0;k<3;k++)
{for(j=0;j<2;j++)
scanf("%d",&b[k][j]);
}
这两个是把a,b矩阵输入的,没难度理解
for(i=0;i<4;i++)
{for(j=0;j<2;j++)
{c[i][j]=0; //这个是让c赋初始值,没难度理解
for(k=0;k<3;k++) //这个循环,就是一句话,就是关键,数学公式而已
c[i][j]+=a[i][k]*b[k][j];
printf("%6d",c[i][j]);
}
printf("\n");
}
{for(j=0;j<2;j++)
{c[i][j]=0;//给矩阵c中元素赋初值
for(k=0;k<3;k++)
c[i][j]+=a[i][k]*b[k][j];//矩阵a的第i行与矩阵b的第j列相乘,结果放在矩阵c[i][j]中
printf("%6d",c[i][j]);
}
printf("\n");
}