矩阵乘法

Matrix multiplication

我不明白哪里错了。请帮我改正。结果矩阵的所有元素都为零时输出。

 #include<stdio.h>
#include<conio.h>
int main()
{
    int a[5][5],b[5][5],c[5][5],i=0,j=0,row1,col1,row2,col2,row3,col3,s=0,k=0,l=0;
    printf("Enter no. of rows and no. of columns of first matrix:\n");
    scanf("%d %d",&row1,&col1);
    printf("Enter no. of rows and no. of columns of second matrix:\n");
    scanf("%d %d",&row2,&col2);
    if(col1==row2)
    {
                  row3=row1;
                  col3=col2;
    }
    else
    {
        printf("Not possible!");
        exit(1);
    }

    printf("Enter elements of first matrix:\n");
    for(i=0;i<row1;i++)
    {
                       for(j=0;j<col1;j++)
                       {
                                          scanf("%d",&a[i][j]);
                       }
    }


        printf("Enter elements of second matrix:\n");
    for(i=0;i<row2;i++)
    {
                       for(j=0;j<col2;j++)
                       {
                                          scanf("%d",&b[i][j]);
                       }
    }

    i=0;
    j=0;

    for(k=0;k<row3;k++)
    {
                       for(l=0;l<col3;l++)
                       {

                                          while(i<row3 || j<col3)
                                          {
                                                       //printf("Hi");
                                                       s=s+a[i][j++]*b[i++][j];
                                                       //printf("%d\n",s);

                                          }

                       }
                       printf("%d\n",s);
                       c[k][l]=s;
                        s=0;
    }


    printf("Sum matrix is:\n");
        for(k=0;k<row3;k++)
    {
                       for(l=0;l<col3;l++)
                       {
                                          printf("%d ",c[k][l]);
                       }
                       printf("\n");
    }
    getch();
}

我在 while 循环中加入了打印注释以便进行调试,但它没有帮助。

您在列循环之外设置结果,因此每行只设置一个结果。通过在大括号内移动这 3 行来更改代码:

for(k=0;k<row3;k++)
{
      for(l=0;l<col3;l++)
      {
          i = 0; j = 0;
          while(i<row3 || j<col3)
          {
              //printf("Hi");
              s=s+a[k][j++]*b[i++][l];
              //printf("%d\n",s);
           }

           // THIS CODE HAS MOVED:
           printf("%d\n",s);
           c[k][l]=s;
           s=0;
     }
}

此外,您的添加需要使用 k 和 l 索引,以便您沿着 k 给定的 a[][] 行和 l 给定的 b[][] 列移动:

s=s+a[k][j++]*b[i++][l];

您忘记在添加两个矩阵的循环中初始化 i 和 j。

根据你的代码添加。

我=0; j=0 在用于加法的双 for 循环中。

希望对您有所帮助