# C PROGRAMS
# C Array PROGRAMS
Matrix Programs in C
➤ How to Print 2D Array in C
➤ Store temperature of 2 Cities
➤ Pass MultiD Array to Function
➤ Largest-mallest in 2D Array
➤ Take and Print Matrix in C
➤ Matrix Addition in C
➤ Subtraction of Matrix in C
➤ Matrix Multiplication in C
➤ Transpose of Matrix in C
➤ Sum of Diagonal Elements
➤ Find Row-Sum Column-Sum
➤ Menu Driven Matrix Operations
In this post we will see Matrix Multiplication in C programming language. We will see 2×2 and 3×3 matrix multiplication in C. What is matrix multiplication in C algorithm? How to write program for matrix multiplication in C using function.
Matrix Multiplication
Let A be an m×k matrix and B be a k ×n matrix. The product of A and B, denoted by AB, is the m × n matrix with its (i, j )th entry equal to the sum of the products of the corresponding elements from the ith row of A and the jth column of B. In other words, if AB =[cij], then cij = ai1b1j + ai2b2j +···+aikbkj.
Condition for the Matrix multiplication:- The product of two matrices is not defined when the number of columns in the first matrix and the number of rows in the second matrix are not the same.
Example of Matrix Multiplication,
Matrix A =
a11 a12
a21 a22
Matrix B =
b11 b12
b21 b22
The product of A and B is denoted as AB and it can be calculated as, AB=
(a11*b11 + a12b21) (a11*b12 + a12*b22)
(a21*b11 + a22b21) (a21*b12 + a22*b22)
Example using 2×2 matrices,
A =
1 3
7 5
B =
6 8
4 2
C = 1*6+3*4 1*8+3*2 7*6+5*4 7*8+5*2 = 18 14 62 66
2×2 Matrix Multiplication in C
It is a simple C program to find the 2×2 matrix multiplication in C. The values for the matrix is given inside the program.
#include <stdio.h>
int main()
{
// matrix A and B
int a[2][2] = {{5,6},{9,8}};
int b[2][2] = {{1,3},{3,2}};
// declare matix C
int c[2][2];
// multiply both matrix A and B
for(int i=0; i < 2; i++)
{
for(int j=0; j < 2; j++)
{
// assign 0
c[i][j] = 0;
for (int k = 0; k < 2; k++)
{
// find product
c[i][j] += a[i][k] * b[k][j];
}
}
}
// display matrix
printf("Resultant Matrix: \n");
for(int i=0; i<2; i++)
{
for(int j=0; j<2; j++)
{
printf("%d ", c[i][j]);
}
printf("\n"); // new line
}
return 0;
}
Output:-
Resultant Matrix:
23 27
33 43
Similar to the above program, you can also find the 3×3 matrix multiplication in C. Replace 2 with 3 in the above program.
Matrix Multiplication in C using Function
Square matrix:- The matrix having equal row and column size is called square matrix. Example of square matrix:- 2×2, 3×3, 4×4, 5×5, and e.t.c. When matrix doesn’t have equal size of row and column then those matrices are called non-square matrix. Example of non-square matrix:- 2×3, 2×4, 3×2, 3×4, and e.t.c.
Since we are working with square matrix and both matrices are of same order therefore matrix multiplication is always possible, and no need to check whether matrix multiplication is possible for them or not.
C Function to Find Multiplication for Square Matrix
// function to multiply two square matrix
void multiplyMatrix(int a[10][10], int b[10][10],
int c[10][10], int size)
{
for(int i=0; i<size; i++)
{
for(int j=0; j<size; j++)
{
// assign 0
c[i][j] = 0;
for (int k = 0; k < size; k++)
{
// find product
c[i][j] += a[i][k] * b[k][j];
}
}
}
}
Time Complexity:- O(N3)
Why it need three for loops? For accessing all the elements of any matrix we need two for loop. But for finding the product it requires one additional for loop. Therefore the time-complexity is O(N3).
C Program to Find Multiplication of Two Square Matrix
In the previous program both matrices A and B were initialized within the program, now let us see an another C program for by taking input value from user.
#include <stdio.h>
// function to multiply two square matrix
void multiplyMatrix(int a[10][10], int b[10][10],
int c[10][10], int size)
{
for(int i=0; i<size; i++)
{
for(int j=0; j<size; j++)
{
// assign 0
c[i][j] = 0;
for (int k = 0; k < size; k++)
{
// find product
c[i][j] += a[i][k] * b[k][j];
}
}
}
}
// function to read square matrix
void readMatrix(int matrix[10][10], int size)
{
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
scanf("%d", &matrix[i][j]);
}
}
}
// function to display square matrix
void displayMatrix(int matrix[10][10], int size)
{
for (int i = 0; i < size; ++i)
{
for (int j = 0; j < size; ++j)
{
printf("%d ", matrix[i][j]);
}
printf("\n"); // new line
}
}
// main function
int main()
{
// declare matrix matrix A, B, & C
int a[10][10]; // first matrix
int b[10][10]; // second matrix
int c[10][10]; // resultant matrix
// read the size of matrices
int size;
printf("Enter Order of Both Matrix,\n");
printf("Enter 2 for 2x2, 3 for 3x3 and e.t.c.: ");
scanf("%d", &size);
// read matrix A and B
printf("Enter Matrix-1 Elements: \n");
readMatrix(a, size);
printf("Enter Matrix-2 Elements: \n");
readMatrix(b, size);
// multiply both matrix A and B
multiplyMatrix(a, b, c, size);
// display resultant matrix
printf("Resultant Matrix: \n");
displayMatrix(c, size);
return 0;
}
Output:-
Enter Order of Both Matrix,
Enter 2 for 2×2, 3 for 3×3 and e.t.c.: 2
Enter Matrix-1 Elements:
1 3
7 5
Enter Matrix-2 Elements:
6 8
4 2
Matrix-1:
1 3
7 5
Matrix-2:
6 8
4 2
Resultant Matrix:
18 14
62 66
Enter Order of Both Matrix,
Enter 2 for 2×2, 3 for 3×3 and e.t.c.: 3
Enter Matrix-1 Elements:
1 2 3
4 5 6
7 8 9
Enter Matrix-2 Elements:
5 6 7
8 9 10
3 1 2
Matrix-1:
1 2 3
4 5 6
7 8 9
Matrix-2:
5 6 7
8 9 10
3 1 2
Resultant Matrix:
30 27 33
78 75 90
126 123 147
Program for Both Square and Non-Square matrix
In the above examples, we were assuming that matrix is a square matrix, therefore those functions will work only for square matrix. For non square matrix, row and column sizes will vary. We have write different logic for them, and we must check matrix multiplication is possible between them or not Below C program works for both square and non-square matrix.
Multiplication in C for both square and non-square matrix
#include <stdio.h>
#include <stdlib.h>
// function to multiply two square matrix
void multiplyMatrix(int a[10][10], int b[10][10],
int c[10][10], int row3, int column3, int column1)
{
// outer for loop upto row3
for(int i=0; i < row3; i++)
{
// inner-1 for loop upto column3
for(int j=0; j < column3; j++)
{
// assign 0
c[i][j] = 0;
// inner-2 for loop upto column2
for (int k = 0; k < column1; k++)
{
// find product
c[i][j] += (a[i][k] * b[k][j]);
}
}
}
}
// function to read matrix
void readMatrix(int matrix[10][10], int row, int column)
{
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < column; ++j)
{
scanf("%d", &matrix[i][j]);
}
}
}
// function to display matrix
void displayMatrix(int matrix[10][10], int row, int column)
{
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < column; ++j)
{
printf("%d ", matrix[i][j]);
}
printf("\n"); // new line
}
}
// main function
int main()
{
// declare matrix matrix A, B, & C
int a[10][10]; // first matrix
int b[10][10]; // second matrix
int c[10][10]; // resultant matrix
// read the size of matrix-1
int row1, column1;
printf("Enter row and column for matrix-1: ");
scanf("%d %d", &row1, &column1);
// read matrix A
printf("Enter Matrix-1 Elements: \n");
readMatrix(a, row1, column1);
// read the size of matrix-2
int row2, column2;
printf("Enter row and column for matrix-2: ");
scanf("%d %d", &row2, &column2);
// read matrix B
printf("Enter Matrix-2 Elements: \n");
readMatrix(b, row2, column2);
// check matrix multiplication is possible or not
if (column1 != row2) {
printf("Matrix Multiplication is not possible.\n");
printf("Column size of first matrix and \n");
printf("row size of second matrix should be the same. \n");
exit(0); // stop execution
}
// assign row and column for matrix-3
/** Note:-The product of matrices 3x2 and 2x4
* will become matrix of size 3x4
**/
int row3 = row1;
int column3 = column2;
// multiply both matrix A and B
/** Pass matrix1, Matrix2, Matrix3,
* row3, column3, and column1.
*
* In place of column1, you can also
* pass row2 because both are same, else
* matrix multiplication is not possible.
*/
multiplyMatrix(a, b, c, row3, column3, column1);
// display resultant matrix
printf("Matrix-1: \n");
displayMatrix(a, row1, column1);
printf("Matrix-2: \n");
displayMatrix(b, row2, column2);
printf("Resultant Matrix: \n");
displayMatrix(c, row3, column3);
return 0;
}
Output:-
Enter row and column for matrix-1: 3 2
Enter Matrix-1 Elements:
1 2
3 4
5 6
Enter row and column for matrix-2: 2 4
Enter Matrix-2 Elements:
6 7 8 9
1 2 3 4
Matrix-1:
1 2
3 4
5 6
Matrix-2:
6 7 8 9
1 2 3 4
Resultant Matrix:
8 11 14 17
22 29 36 43
36 47 58 69
Enter row and column for matrix-1: 3 1
Enter Matrix-1 Elements:
4
5
6
Enter row and column for matrix-2: 2 2
Enter Matrix-2 Elements:
1 2
3 4
Matrix Multiplication is not possible.
Column size of first matrix and
row size of second matrix should be the same.
See More:- Strassen’s Matrix Multiplication Algorithm, Divide and Conquer Method of Matrix Multiplication
If you enjoyed this post, share it with your friends. Do you want to share more information about the topic discussed above or do you find anything incorrect? Let us know in the comments. Thank you!