How to implement matrix multiplication in C

2 Answers

0 votes
#include <stdio.h> 
 
#define N 3
 
void Print(int arr2d[][N]);
int Calc(int a[][N], int b[][N], int i, int j);
 
int main(int argc, char **argv) 
{
    int a[N][N] = { { 1, 8, 5 }, { 6, 7, 1 }, { 8, 7, 6 } };
    int b[N][N] = { { 4, 8, 1 }, { 6, 5, 3 }, { 4, 6, 5 } };
    int c[N][N] = {{0}};
  
    Print(a);
    printf("\n");
    Print(b);
    printf("\n");
  
    // c[0, 0] = (a[0, 0] * b[0, 0]) + (a[0, 1] * b[1, 0]) + (a[0, 2] * b[2, 0])
  
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            c[i][j] = Calc(a, b, i, j);
    Print(c);
   
    return 0;
}
void Print(int arr2d[][N])
{
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++)
            printf("%4d", arr2d[i][j]);
        printf("\n");
    }
}
int Calc(int a[][N], int b[][N], int i, int j)
{
    int sum = 0;
     
    for (int x = 0; x < N; x++) 
        sum += a[i][x] * b[x][j];
        //printf("a[%d][%d] * b[%d][%d] + ", i, x, x, j); 
    return sum;
}      
  

 
/*
run:
  
   1   8   5
   6   7   1
   8   7   6
 
   4   8   1
   6   5   3
   4   6   5
 
  72  78  50
  70  89  32
  98 135  59
  
*/

 



answered Feb 28, 2016 by avibootz
edited 3 days ago by avibootz
0 votes
#include <stdio.h> 
 
#define N 3
 
void Print(int arr2d[][N]);
void multiple_matrix(int a[][N], int b[][N], int c[][N]);
 
int main(int argc, char **argv) 
{
    int a[N][N] = { { 1, 8, 5 }, { 6, 7, 1 }, { 8, 7, 6 } };
    int b[N][N] = { { 4, 8, 1 }, { 6, 5, 3 }, { 4, 6, 5 } };
    int c[N][N] = {{0}};
  
    Print(a);
    printf("\n");
    Print(b);
    printf("\n");
  
    // c[0, 0] = (a[0, 0] * b[0, 0]) + (a[0, 1] * b[1, 0]) + (a[0, 2] * b[2, 0])
  
    multiple_matrix(a, b, c);
     
    Print(c);
   
    return 0;
}
void Print(int arr2d[][N])
{
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++)
            printf("%4d", arr2d[i][j]);
        printf("\n");
    }
}
void multiple_matrix(int a[][N], int b[][N], int c[][N])
{
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            for (int k = 0; k < N; k++) 
                c[i][j] = c[i][j] + a[i][k] * b[k][j];
        }
    }
}     
  
  
  
/*
run:
  
   1   8   5
   6   7   1
   8   7   6
 
   4   8   1
   6   5   3
   4   6   5
 
  72  78  50
  70  89  32
  98 135  59
  
*/

 



answered Feb 28, 2016 by avibootz
edited 3 days ago by avibootz
...