C Program to Multiply Two Matrices Using Multi-dimensional Arrays

In this example, you will learn to multiply two matrices and display it using user-defined functions.

To understand this example, you should have the knowledge of the following C programming topics:

This program asks the user to enter the size (rows and columns) of two matrices.

To multiply two matrices, the number of columns of the first matrix should be equal to the number of rows of the second matrix.

The program below asks for the number of rows and columns of two matrices until the above condition is satisfied.

Then, the multiplication of two matrices is performed, and the result is displayed on the screen.

To perform this, we have created three functions:

  • enterData() - to take matrix elements from the user.
  • multiplyMatrices() - to multiply two matrices.
  • display() - to display the resultant matrix after multiplication.

Multiply Matrices by Passing it to a Function

#include <stdio.h>
void enterData(int first[][10], int second[][10], int r1, int c1, int r2, int c2);
void multiplyMatrices(int first[][10], int second[][10], int multResult[][10], int r1, int c1, int r2, int c2);
void display(int mult[][10], int r1, int c2);

int main() {
    int first[10][10], second[10][10], mult[10][10], r1, c1, r2, c2;
    printf("Enter rows and column for the first matrix: ");
    scanf("%d %d", &r1, &c1);
    printf("Enter rows and column for the second matrix: ");
    scanf("%d %d", &r2, &c2);

    // Taking input until columns of the first matrix is equal to the rows of the second matrix
    while (c1 != r2) {
        printf("Error! Enter rows and columns again.\n");
        printf("Enter rows and columns for the first matrix: ");
        scanf("%d%d", &r1, &c1);
        printf("Enter rows and columns for the second matrix: ");
        scanf("%d%d", &r2, &c2);
    }

    // Function to take matrices data
    enterData(first, second, r1, c1, r2, c2);

    // Function to multiply two matrices.
    multiplyMatrices(first, second, mult, r1, c1, r2, c2);

    // Function to display resultant matrix after multiplication.
    display(mult, r1, c2);

    return 0;
}

void enterData(int first[][10], int second[][10], int r1, int c1, int r2, int c2) {
    printf("\nEnter elements of matrix 1:\n");

    for (int i = 0; i < r1; ++i) {
        for (int j = 0; j < c1; ++j) {
            printf("Enter a%d%d: ", i + 1, j + 1);
            scanf("%d", &first[i][j]);
        }
    }
    printf("\nEnter elements of matrix 2:\n");

    for (int i = 0; i < r2; ++i) {
        for (int j = 0; j < c2; ++j) {
            printf("Enter b%d%d: ", i + 1, j + 1);
            scanf("%d", &second[i][j]);
        }
    }
}

void multiplyMatrices(int first[][10], int second[][10], int mult[][10], int r1, int c1, int r2, int c2) {

    // Initializing elements of matrix mult to 0.
    for (int i = 0; i < r1; ++i) {
        for (int j = 0; j < c2; ++j) {
            mult[i][j] = 0;
        }
    }

    // Multiplying first and second matrices and storing in mult.
    for (int i = 0; i < r1; ++i) {
        for (int j = 0; j < c2; ++j) {
            for (int k = 0; k < c1; ++k) {
                mult[i][j] += first[i][k] * second[k][j];
            }
        }
    }
}

void display(int mult[][10], int r1, int c2) {

    printf("\nOutput Matrix:\n");
    for (int i = 0; i < r1; ++i) {
        for (int j = 0; j < c2; ++j) {
            printf("%d  ", mult[i][j]);
            if (j == c2 - 1)
                printf("\n");
        }
    }
}

Output

Enter rows and column for the first matrix: 2
3
Enter rows and column for the second matrix: 3
2

Enter elements of matrix 1:
Enter a11: 3
Enter a12: -2
Enter a13: 5
Enter a21: 3
Enter a22: 0
Enter a23: 4

Enter elements of matrix 2:
Enter b11: 2
Enter b12: 3
Enter b21: -9
Enter b22: 0
Enter b31: 0
Enter b32: 4

Output Matrix:
24  29
6  25