求高手帮忙用c语言求出两个矩阵的乘积
- 提问者网友:嘚啵嘚啵
- 2021-03-15 13:56
- 五星知识达人网友:你哪知我潦倒为你
- 2021-03-15 14:07
其中k表示矩阵a的列数和矩阵b的行数;
故有如下代码:
#include
int main(){
int a[2][3]={1,2,3,4,5,6};
int b[3][2]={4,2,3,0,1,7};
int c[2][2]={0};
int i,j,k;
for(k=0;k<2;k++){
for(i=0;i<2;i++){
for(j=0;j<3;j++){
c[k][i]+=a[k][j]*b[j][i];
}
}
}
for(i=0;i<2;i++){
for(j=0;j<2;j++){
printf("c[%d][%d]=%d ",i,j,c[i][j]);
}
printf("
");
}
}
你没得到正确结果的关键在于:对矩阵乘法规则不是很清楚追问谢谢你的回答,但是我看完你这个还有一个问题,你这里k i都是<2,而j<3,那意思不不就是每组数都被舍去了 两个数么,还是说矩阵乘法就是这样的规则,说实话我对矩阵乘法确实不了解了.追答只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。一个m×n的矩阵a(m,n)左乘一个n×p的矩阵b(n,p),会得到一个m×p的矩阵c(m,p)。这个就是矩阵乘法的定义。就你这个题目而言,左侧矩阵是2*3(2行3列),右侧矩阵是3*2,所以他们的乘积是2*2.并不是你理解的两个数被舍弃了。
仔细研究这个题目可以发现:k只是作为左侧矩阵的行,i只是做右侧矩阵的列,而左侧矩阵的列和右侧矩阵的行(数值均为3)均由j来表示,而j恰好能表示三个数,所以并没有任何数据被舍弃。
你可以根据矩阵乘法定义,用笔在纸上实现一下矩阵乘法:将每个结果一步步实现出来,有助于你的理解!
- 1楼网友:怀裏藏嬌
- 2021-03-15 16:09
- 2楼网友:琴狂剑也妄
- 2021-03-15 14:38
void main()
{
int a[2][3]={1,2,3,4,5,6},b[3][2]={4,2,3,0,1,7},c=0,c1=0,x,y,n=0;
for(x=0;x<2;x++)
{
for(y=0;y<3;y++){
c+=a[x][y]*b[y][x];
n++;
}
if(x==0){
for(y=0;y<3;y++){
c1+=a[x][y]*b[y][x+1];}
}else{
for(y=0;y<3;y++){
c1+=a[x][y]*b[y][x-1];}
}
printf("%d\t%d\n",c,c1);
c=0;
c1=0;
}
}追问{
int a[2][3]={1,2,3,4,5,6},b[3][2]={4,2,3,0,1,7},c=0,c1=0,x,y,n=0;
for(x=0;x<2;x++)
{
for(y=0;y<3;y++){
c+=a[x][y]*b[y][x];
n++;(这里的n++是做什么的,记录循环次数?)
}
if(x==0)(这里算是把x的值定为常量0了吧)追答这个程序仅对本题有效,再循环过程,x只有0,1俩个值,if(x==0)只作判断,没有改变x旳值,n记录循环次数,可以舍去