#include<stdio.h>
#include<conio.h>
void main()
{
int a[9][9],b[9][9],c[9][9],i,j,m,n,p,q,k;
clrscr();
printf("Enter the order of the first matrix:");
scanf("%d%d",&m,&n);
printf("Enter the order of the second matrix:");
scanf("%d%d",&p,&q);
if(p==n)
{
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("enter1st matrix element of row %d & column %d:",i+1,j+1);
scanf("%d",a[i][j]);
}
}
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
printf("enter 2nd matrix element of row %d & column %d:",i+1,j+1);
scanf("%d",b[i][j]);
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;i++)
{
c[i][j]=0;
for(k=0;k<p;k++)
{
c[i][j]=c[i][j]+a[i][k]*b[k][j];
}
}
for(i=0;i<m;i++)
{
for(j=0;j<q;j++)
{
printf("%d\t",c[i][j]);
}
printf("\n");
}
}
}
else
{
printf("Matrix multiplication is invalid !...");
}
getch();
}
**编译时无错误,但运行时未按预期显示相乘矩阵,获得输入但未给出输出
找出错误并回答**
1条答案
按热度按时间o3imoua41#
在实际的乘法循环嵌套中,你有不正确的循环边界。当两个矩阵都是正方形时,这并不重要,但当一个或两个矩阵都是矩形时,它最多会给予你错误的结果。另外,你在循环计数器增量中有一个打字错误(感谢@Bob__)。
假定
m
是左矩阵(a
)的第一维,q
是右矩阵(b
)的第二维,并且n
==p
是这两个矩阵的公共维,则乘法应该如下所示: