Write a Program for the Subtraction of 2 Matrices in C.
Example,
MatrixA 1 2 3 2 3 1 1 1 1 MatrixB 1 1 1 2 2 2 1 1 1 Output 0 1 2 0 1 -1 0 0 0
The Program accepts 2 Matrices: MatrixA and MatrixB.
Steps
- Enter Number of Rows and Number of Columns of MatrixA.
- Then Enter MatrixA (row-wise).
- Enter Number of Rows and Number of Columns of MatrixB.
- Then Enter MatrixB (row-wise).
- The result of MatrixA – MatrixB is stored in MatrixC.
For Matrix Subtraction, the order of MatrixA and MatrixB should be same.
Matrix Subtraction can be Implemented in 2 ways
- Using Loops.
- Using Recursion.
C Program to Subtract 2 Matrices (using loops)
#include<stdio.h>
// The function subtract matrixA and matrixB
// and stores the result in matrixC
void MatrixSubtraction(int matrixA[][50], int matrixB[][50], int matrixC[][50], int r, int c) {
int i, j;
for (i = 0; i < r; ++i) {
for (j = 0; j < c; ++j) {
matrixC[i][j] = matrixA[i][j] - matrixB[i][j];
}
}
}
int main() {
int i, j;
// rA: row of matrixA cA: column of matrixA
// rB: row of matrixB cB: column of matrixB
int rA, cA, rB, cB;
int matrixA[50][50], matrixB[50][50], matrixC[50][50];
// Enter Matrix A
printf("Enter Number of Rows in MatrixA: ");
scanf("%d", &rA);
printf("Enter Number of columns in MatrixA: ");
scanf("%d", &cA);
printf("Enter MatrixA: \n");
for (i = 0; i < rA; ++i) {
for (j = 0; j < cA; ++j) {
scanf("%d", &matrixA[i][j]);
}
}
// Enter Matrix B
printf("Enter Number of Rows in MatrixB: ");
scanf("%d", &rB);
printf("Enter Number of columns in MatrixB: ");
scanf("%d", &cB);
printf("Enter MatrixB: \n");
for (i = 0; i < rB; ++i) {
for (j = 0; j < cB; ++j) {
scanf("%d", &matrixB[i][j]);
}
}
// checking if matrices have same order or not
if (rA != rB || cA != cB) {
printf("MatrixA and MatrixB are not Compatible");
}
else {
// the function subtract matrixA and matrixB and stores
// the result in matrixC
MatrixSubtraction(matrixA, matrixB, matrixC, rA, cB);
// Printing MatrixC
printf("\nMatrixA - MatrixB: \n");
for (i = 0; i < rA; ++i) {
for (j = 0; j < cB; ++j) {
printf("%d ", matrixC[i][j]);
}
printf("\n");
}
}
}
Output

C Program to Subtract 2 Matrices (using recursion)
#include<stdio.h>
// The function subtract matrixA and matrixB
// and stores the result in matrixC
void MatrixSubtraction(int matrixA[][50], int matrixB[][50], int matrixC[][50], int r, int c, int i, int j) {
matrixC[i][j] = matrixA[i][j] - matrixB[i][j];
if (i == r - 1 && j == c - 1)
return;
else if (j == c - 1)
++i;
j = (j + 1) % c;
MatrixSubtraction(matrixA, matrixB, matrixC, r, c, i, j);
}
int main() {
int i, j;
// rA: row of matrixA cA: column of matrixA
// rB: row of matrixB cB: column of matrixB
int rA, cA, rB, cB;
int matrixA[50][50], matrixB[50][50], matrixC[50][50];
// Enter Matrix A
printf("Enter Number of Rows in MatrixA: ");
scanf("%d", &rA);
printf("Enter Number of columns in MatrixA: ");
scanf("%d", &cA);
printf("Enter MatrixA: \n");
for (i = 0; i < rA; ++i) {
for (j = 0; j < cA; ++j) {
scanf("%d", &matrixA[i][j]);
}
}
// Enter Matrix B
printf("Enter Number of Rows in MatrixB: ");
scanf("%d", &rB);
printf("Enter Number of columns in MatrixB: ");
scanf("%d", &cB);
printf("Enter MatrixB: \n");
for (i = 0; i < rB; ++i) {
for (j = 0; j < cB; ++j) {
scanf("%d", &matrixB[i][j]);
}
}
// checking if matrices have same order or not
if (rA != rB || cA != cB) {
printf("MatrixA and MatrixB are not Compatible");
}
else {
// the function subtract matrixA and matrixB and stores
// the result in matrixC
MatrixSubtraction(matrixA, matrixB, matrixC, rA, cB, 0, 0);
// Printing MatrixC
printf("\nMatrixA - MatrixB: \n");
for (i = 0; i < rA; ++i) {
for (j = 0; j < cB; ++j) {
printf("%d ", matrixC[i][j]);
}
printf("\n");
}
}
}
Output

Time Complexity: O(N2)
What to study next?