C Program to Add Two Matrix Using Multi-dimensional Arrays

Introduction

This example will show you how to add two matrices using two dimensional array in C program. In this example a user will be asked to enter the number of rows and columns for two matrices. Then user will be asked to enter the elements at each index of the matrices. Once user finishes providing inputs for two matrices then the summation of two matrices will be shown in the output.

Here you will see also how to use pointers to allocate memory dynamically for array using malloc() function.

Prerequisites

Knowledge of C Program

Addition of two matrices without return statement

I will perform addition of two matrices in the same function and I will not return the resultant matrix from the function.

#include <stdio.h> 
#include <stdlib.h>

int main() {

    int i, j, rows, cols, **a, **b, **result;

    printf("Addition 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 *));
    b = malloc(rows * sizeof (int *));
    result = malloc(rows * sizeof (int *));

    // for each row allocate cols int
    for (i = 0; i < rows; i++) {
        a[i] = malloc(cols * sizeof (int));
        b[i] = malloc(cols * sizeof (int));
        result[row] = malloc(cols * sizeof (int));
    }

    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            printf("Enter Element %d %d : ", i, j);
            scanf("%d", &a[i][j]);
        }
    }

    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            printf("Enter Element %d %d : ", i, j);
            scanf("%d", &b[i][j]);
        }
    }

    for (i = 0; i < rows; i++) {
        for (j = 0; j < rows; j++) {
            result[i][j] = a[i][j] + b[i][j];
        }
    }

    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            printf("\nElement at %d %d : %d", i, j, result[i][j]);
        }
    }

    return 0;
}

Addition of two matrices using return statement

I will perform addition of two matrices and I will return the resultant matrix from the function.

#include <stdio.h>
#include <stdlib.h>

int main() {

    int i, j, rows, cols, **a, **b;

    printf("Addition 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 *));
    b = malloc(rows * sizeof (int *));

    // for each row allocate cols int
    for (i = 0; i < rows; i++) {
        a[i] = malloc(cols * sizeof (int));
        b[i] = malloc(cols * sizeof (int));
    }

    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            printf("Enter Element %d %d : ", i, j);
            scanf("%d", &a[i][j]);
        }
    }

    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            printf("Enter Element %d %d : ", i, j);
            scanf("%d", &b[i][j]);
        }
    }

    result = matrixAdd(a, b, rows, cols);

    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            printf("\nElement at %d %d : %d", i, j, result[i][j]);
        }
    }

    return 0;
}

int ** matrixAdd(int **a, int **b, int r, int c) {
    int i, j;
    int **result = malloc(r * sizeof (int *));

    for (i = 0; i < r; i++) {
        result[i] = malloc(c * sizeof (int));
    }

    for (i = 0; i < r; i++) {
        for (j = 0; j < c; j++) {
            result[i][j] = a[i][j] + b[i][j];
        }
    }

    return result;
}

Testing Addition of Two matrices

When any of the the above program is run then you will see below output:

Addition of two Matrix
Enter number of rows :2

Enter number of columns :2
Enter Element 0 0 : 1
Enter Element 0 1 : 2
Enter Element 1 0 : 3
Enter Element 1 1 : 4
Enter Element 0 0 : 1
Enter Element 0 1 : 2
Enter Element 1 0 : 3
Enter Element 1 1 : 4

Element at 0 0 : 2
Element at 0 1 : 4
Element at 1 0 : 6
Element at 1 1 : 8

The resultant matrix is of two 2 dimensional matrices.

Source Code

Download

Leave a Reply

Your email address will not be published.