【问题标题】:Matrix Multiplication in C languageC语言中的矩阵乘法
【发布时间】:2014-09-30 17:57:13
【问题描述】:

我正在尝试用 C 语言将二维矩阵相乘。我在下面提供了代码供您参考。当我尝试打印“myC”时,我一直在输出零。我哪里错了?我已经尝试了多种方法,但仍然无法弄清楚。有没有人有想法,将不胜感激。

#include <stdio.h> 
#define mysize 4 

int myA[mysize][mysize];
int myC[mysize][mysize];
int i,k;
int j,l;
int total;
int iLimit;
int jLimit;

void printMatrix(int iLimit,int jLimit,int myA[iLimit][jLimit]){
    i=0;
    while (i<iLimit){
        j=0;
        while (j<jLimit){
            printf ("%7d", myA[i][j]);
            j=j+1;
        }
        printf ("\n");
        i=i+1;}
}

int main(void){
    iLimit=mysize;
    jLimit=mysize;
    k=0;
    while (k < iLimit){
        l=0;
        while (l < jLimit) {
            scanf ("%d",&myA[k][l]);
            l=l+1;
        }
        k=k+1;
    }

    printMatrix(mysize,mysize,myA);
    myC[i][j]=myA[i][k]*myA[k][j];
    printf("\n");
    printMatrix(mysize,mysize,myC);
    return 0;
}

【问题讨论】:

  • 这是您希望将矩阵相乘的全部代码吗? myC[i][j]=myA[i][k]*myA[k][j];。你对循环有足够的了解,知道为什么它不起作用。

标签: c matrix matrix-multiplication


【解决方案1】:

必须对所有元素进行矩阵的乘法运算。所以它应该在一个嵌套的for循环中。你在你的代码中做了什么

myC[i][j]=myA[i][k]*myA[k][j];

此语句将仅乘以索引i,j,k 表示的矩阵的一个元素(在您的代码中超出范围)。上面的语句必须保持在 3 个嵌套的 for 循环中。像这样..

for (i=0;i<m;i++)
{
   for(j=0;j<q;j++)
   {
       myC[i][j]=0;
       for(k=0;k<n;k++)
           myC[i][j]+= myA[i][k]*myA[k][j];
   }
}

【讨论】:

    【解决方案2】:

    这只会将两个元素相乘,其中 i j 和 k 都超出范围。

     myC[i][j]=myA[i][k]*myA[k][j];
    

    它应该在一个三重循环中,您可以在其中适当地设置 i j 和 k。

    【讨论】:

    • 我想你的意思是“三重循环”
    • @Adam 不错。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多