两个矩阵乘法在c[turbo c++]

k5hmc34c  于 2023-02-11  发布在  其他
关注(0)|答案(1)|浏览(199)
#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();
}

**编译时无错误,但运行时未按预期显示相乘矩阵,获得输入但未给出输出

找出错误并回答**

o3imoua4

o3imoua41#

在实际的乘法循环嵌套中,你有不正确的循环边界。当两个矩阵都是正方形时,这并不重要,但当一个或两个矩阵都是矩形时,它最多会给予你错误的结果。另外,你在循环计数器增量中有一个打字错误(感谢@Bob__)。
假定m是左矩阵(a)的第一维,q是右矩阵(b)的第二维,并且n == p是这两个矩阵的公共维,则乘法应该如下所示:

for (i = 0; i < m; i++) {
            for (j = 0; j < q; j++) {  // note loop bound change here
                c[i][j] = 0;

                for (k = 0; k < p; k++) {
                    c[i][j] = c[i][j] + a[i][k] * b[k][j];
                }
            }
            // ...

相关问题