C Program to Multiply Two Matrix Using Multi-dimensional Arrays

#include <stdio.h>
#include <stdlib.h>
int ** matrixMult(int **a, int **b, int r, int c) {
    int i, j, k, sum = 0;
    int **result = malloc(r * sizeof (int *));
    for (i = 0; i < r; i++) {
        result[i] = malloc(r * sizeof (int));
    }
    for (i = 0; i < r; i++) {
        for (j = 0; j < r; j++) {
            for (k = 0; k < c; k++) {
                sum += a[i][k] * b[k][j];
            }
            result[i][j] = sum;
            sum = 0;
        }
    }
    return result;
}
int main() {
    int i, j, rows, cols, **a, **b, **result;
    printf("Multiplication of two Matrix");
    printf("\nEnter number of rows :");
    scanf("%d", &rows);
    printf("\nEnter number of columns :");
    scanf("%d", &cols);
    // allocate rows, each row is a pointer to int
    a = malloc(rows * sizeof (int *));
    // allocate cols(rows), each row is a pointer to int
    b = malloc(cols * sizeof (int *));
    // for each row allocate cols int
    for (i = 0; i < rows; i++) {
        a[i] = malloc(cols * sizeof (int));
    }
    for (i = 0; i < cols; i++) {
        b[i] = malloc(rows * sizeof (int));
    }
    printf("\nEnter Matrix A\n");
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            printf("Enter Element %d %d : ", i, j);
            scanf("%d", &a[i][j]);
        }
    }
    printf("\nEnter Matrix B\n");
    for (i = 0; i < cols; i++) {
        for (j = 0; j < rows; j++) {
            printf("Enter Element %d %d : ", i, j);
            scanf("%d", &b[i][j]);
        }
    }
    result = matrixMult(a, b, rows, cols);
    printf("\nMultiplication results of Matrix A & B\n");
    for (i = 0; i < rows; i++) {
        for (j = 0; j < rows; j++) {
            printf("%d ", result[i][j]);
        }
        printf("\n");
    }
    return 0;
}

Output:

Multiplication of two Matrix
Enter number of rows :3
Enter number of columns :4
Enter Matrix A
Enter Element 0 0 : 9
Enter Element 0 1 : 1
Enter Element 0 2 : 0
Enter Element 0 3 : -5
Enter Element 1 0 : 6
Enter Element 1 1 : 2
Enter Element 1 2 : 10
Enter Element 1 3 : 0
Enter Element 2 0 : 9
Enter Element 2 1 : -15
Enter Element 2 2 : 5
Enter Element 2 3 : 9
Enter Matrix B
Enter Element 0 0 : 1
Enter Element 0 1 : 2
Enter Element 0 2 : 3
Enter Element 1 0 : 4
Enter Element 1 1 : 5
Enter Element 1 2 : 6
Enter Element 2 0 : 7
Enter Element 2 1 : 8
Enter Element 2 2 : 9
Enter Element 3 0 : 10
Enter Element 3 1 : 11
Enter Element 3 2 : 12
Multiplication results of Matrix A & B
-37 -32 -27
84 102 120
74 82 90

Leave a Comment