2014-09-30 2 views
0

Я пытаюсь умножить 2-мерные матрицы на языке C. Я привел ниже код для вашей справки. Когда я пытаюсь напечатать «myC», я продолжаю получать нули. Где я иду не так? Я пробовал несколько вещей и до сих пор не могу понять это. У кого-нибудь есть идеи, это было бы очень полезно.Матричное умножение на языке C

#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; 
} 
+0

Это весь код, который вы ожидаете умножить на свои матрицы? 'Myc ​​[I] [J] = my [I] [к] * my [к] [J];'. Вы знаете достаточно о циклах, чтобы понять, почему это не работает. – Adam

ответ

1

Это только умножает два элемента, где i j и k все находятся за пределами границ.

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

Он должен быть в тройном цикле, где вы установите i j и k соответствующим образом.

+0

Я думаю, вы имеете в виду «тройной цикл» – Adam

+0

@Adam Хороший улов. Благодарю. –

2

умножение матриц должно выполняться для всех элементов. поэтому он должен быть в замкнутом цикле. что вы делаете в вашем коде

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

это утверждение будет умножать только один элемент матрицы, представленный индексом i,j,k (из связанных в вашем коде). приведенное выше утверждение должно храниться внутри 3 вложенных циклов. что-то вроде этого.

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]; 
    } 
} 
Смежные вопросы