Matix multiplication program is one of the common program, we should use to master the C concepts, usually calculating matix multiplications requires large number of calculations but in C , we can do it easily and efficiently.

To do matrix multiplication in C, we have two possible ways, using pointer and without pointers, it can sub-divided into using functions and without using functions.

We will be creating two programs here, one will be without using functions/pointers and the other one passes matrices to functions and uses pointers.

Understanding Matrix multiplication

For matrix multiplication C program, it can only and only possible if the column of the first matrix should be equal to the row of the second, you can understand the matrix multiplication concept using the image below. Image Source

Let's take a complete example to understand it, suppose we have (3×3) × (3×3) and since the number of columns in A is the same as the number of rows in B (the middle two numbers are both 3 in this case), we can go ahead and multiply these matrices. Our result will be a (3×3) matrix. We multiply the individual elements along the first row of matrix A with the corresponding elements down the first column of matrix B, and add the results. This gives us the number we need to put in the first row, first column position in the answer matrix. we will repeat the above procedure for all the row of A to multiple with all of the columns of B, thus we will get the result as below Matrix multiplication program in C (Without using function/pointers)

Now, as we have understood the concepts of matrix multiplication, we can create the Code in C for this

#include<stdio.h>

int main()
{
int a,b,result,m,n,p,q,i,j,k;

//get the nuumber of rows/columns of first matrix
printf("Enter rows and columns of first matrix:");
scanf("%d%d",&m,&n);

//get the nuumber of rows/columns of second matrix
printf("Enter rows and columns of second matrix:");
scanf("%d%d",&p,&q);

//check if rows of A qual to columns of B
if(n==p)
{
printf("\nEnter first matrix:\n");

//fetch the first matrix data from user and save in array a declared above
for(i=0;i<m;++i)
{
for(j=0;j<n;++j)
{
scanf("%d",&a[i][j]);
}
}

printf("\nEnter second matrix:\n");

//fetch the second matrix data from user and save in array b
for(i=0;i<p;++i)
{
for(j=0;j<q;++j)
{
scanf("%d",&b[i][j]);

}
}

printf("\nThe multiplied matrix result is:\n");

//multiply the matrix and save it in result[][] array & print it
for(i=0;i<m;++i)
{
for(j=0;j<q;++j)
{
result[i][j]=0;
for(k=0;k<n;++k)
result[i][j]=result[i][j]+(a[i][k]*b[k][j]);
printf("%d ",result[i][j]);

}

printf("\n");
}
}
else
{
printf("\n Matrix multiplication can't be done for these rows/columns");
}

return 0;
}

I have explained most of the coding lines by using comment's, executing the above code on online compiler provides me output as below

Enter rows and columns of first matrix:3
3
Enter rows and columns of second matrix:3
3

Enter first matrix:
11
22
33
44
55
66
77
88
99

Enter second matrix:
11
22
33
44
55
66
77
88
99

The multiplied matrix result is:
3630 4356 5082
7986 9801 11616
12342 15246 18150

Matrix multiplication in C using pointer and functions

Now in this program, we will be doing matrix multiplication using Pointers and functions, concept and logic is same, we have just divided the code's into functions and used pointers, I have explained the important part of the code using comments.

#include<stdio.h>

#define ROW 3
#define COL 3

int main()
{
int First,Second,Result;

int m1,n1,m2,n2,i,j;

printf("Enter no of row and column for 1st matrix\n");
scanf("%d%d",&m1,&n1);

printf("Enter no of row and column for 2nd matrix\n");
scanf("%d%d",&m2,&n2);

//check if multiplication is possible, 1st matrix rows must be equal to
//Second matrix columns
if(n1==m2)
{
printf("Enter First matrix\n");
matrixInput(First);

printf("\nEnter Second matrix\n");
matrixInput(Second);

matrixMultiply(First,Second,Result);

printf("Product of entered matrices :-\n");

//print the resultant matrices
for(i=0;i<m1;i++)
{
for(j=0;j<n2;j++)
printf("%d\t",*(*(Result + i) + j));
printf("\n");
}

}
else
{
printf("Sorry ! Multiplication is not possible");
}
return 0;
}

//Get matrix data
void matrixInput(int mat[][COL])
{
int row, col;

for (row = 0; row < ROW; row++)
{
for (col = 0; col < COL; col++)
{
scanf("%d", (*(mat + row) + col));
}
}
}

//Function to multiply Matrices mat1 * mat2 = res
void matrixMultiply(int mat1[][COL], int mat2[][COL], int res[][COL])
{
int row, col, i;
int sum;

for (row = 0; row < ROW; row++)
{
for (col = 0; col < COL; col++)
{
sum = 0;
// find the sum of product of each elements of row for first matirx
// and columsn of second
for (i = 0; i < COL; i++)
{
sum += (*(*(mat1 + row) + i)) * (*(*(mat2 + i) + col));
}

//save sum in resultant matrix
*(*(res + row) + col) = sum;
}
}
}

Output of the above code after compiling here https://onlinegdb.com/BywHbCJlm

Enter no of row and column for 1st matrix
3 3
Enter no of row and column for 2nd matrix
3 3
Enter First matrix
10 20 30
40 50 60
70 80 90

Enter Second matrix
10 20 30
40 50 60
70 80 90
Product of entered matrices :
3000    3600    4200
6600    8100    9600
10200   12600   15000 You may also like:

Creating palindrome program in C (checking string & number)

Leap year program in C

Sorting array element in ascending order program in C

I hope the above program helped you today, if you have any questions feel free to ask it in comment's section.