We should have basic knowledge on the representation of two dimensional matrix in C. Here is three *two dimensional matrix* **a, b** and **c. a** for matrix A, **b** for matrix B, and **c** for matrix C. which holds the multiplication result. **i, j, k** are control variable and **sum** is needed to hold the summation of the consecutive two products.

#include <stdio.h> int main() { int a[2][2] = {3,4,2,7}; int b[2][2] = {6,8,5,9}; int c[2][2], i, j, k, sum; printf("Matrix A is : \n\t\t"); for(i=0;i<2;i++){ for(j=0;j<2;j++){ printf("%d \t",a[i][j]); } printf("\n\t\t"); } printf("\nMatrix B is : \n\t\t"); for(i=0;i<2;i++){ for(j=0;j<2;j++){ printf("%d \t",b[i][j]); } printf("\n\t\t"); } printf("\nMultiplication of matrix A and B\n\t\t"); for(i=0;i<2;i++){ for(j=0;j<2;j++){ sum = 0; for(k=0;k<2;k++){ sum = sum + a[i][k] * b[k][j]; } c[i][j]=sum; } } printf("\nMatrix A*B is : \n\t\t"); for(i=0;i<2;i++){ for(j=0;j<2;j++){ printf("%d \t",c[i][j]); } printf("\n\t\t"); } return 0; }

#### Traversing a matrix

Let us consider the traversing of matrix A, we use here two *for loop*. One is nested in another, now consider for the first time **printf("%d \t",a[i][j]);** at the first time **i** and **j** enter the loop with value **i=0** and **j=0**; so it represent the first element of matrix A with **a[0][0]**=3, After the first iteration **j** increase it's value by j =1 and the inner loop is also true in this case so it point **a[0][1]** = 4; At the next iteration **j**= 2 so the *for loop* is **false** as 2 is not greater than 2. so it execute the next line **printf("\n\t\t");** which prints a new line and two tab after printing **a[0][0]=3 and a[0][1] =4,**

Now lets talk about the outer loop, **for(i=0;i<2;i++)** by this time **i = 1** and then it enter the inner loop **for(j=0;j<2;j++)** again it runs two times and results ** a[1][0]=2** and ** a[1][1]=7. **

#### Graphical Representation of matrix multiplication

#### Matrix Multiplication

It uses three *for loops*, the control variables are **i, j, k,** at the first iteration all these control variables including **sum** are zero so, **
sum = sum + a[i][k] * b[k][j]
=> 0+a[i][k] * b[k][j]
=> 0+ a[0][0]=3 * b[0][0]= 6
=> 3*6=18** so sum =18, At the next iteration

**k=1**, and still

**i=0**also

**j=0**therefore

**sum = sum + a[i][k] * b[k][j]
=> 18+a[0][1]*b[1][0]
=>18+4*5
=>18+20 =38**

At the next iteration **k** gets 2 so it becomes false and go to the upper loop (control variable **j**) and brings **j=1**, and still **i=0**, and **sum** initialize with 0;

**sum = sum + a[i][k] * b[k][j]
=> 0 + a[i][k] * b[k][j]
=> 0 + a[0][0]=3 * b[0][1]= 8
=> 3*8=24,**

At the next iteration k=1, therefore

** sum = sum + a[i][k] * b[k][j]
=> 24+a[0][1]*b[1][1]
=> 24+4*9
=> 24+36=60.**

And thus 47, 97 comes correspondingly.

#### Exception

From the above program we can see that the column of matrix **A** and the row of matrix **B** are equal 2=2,This rule must be maintain in matrix multiplication

**Column number of first matrix must be equal to the row number of the second matrix**

Now lets try with another programm

#include <stdio.h> int main() { int a[12][12], b[12][12] ,c[12][12], rowa, cola, rowb,colb, i, j, k, sum; printf("Row of the first matrix\n"); scanf("%d",&rowa); printf("Column of the first matrix(a) \n"); scanf("%d",&cola); printf("Enter the elements of first matrix\n"); for ( i = 0 ; i < rowa ; i++ ){ for ( j = 0 ; j < cola ; j++ ){ scanf("%d", &a[i][j]); } } printf("Row of the second matrix\n"); scanf("%d",&rowb); printf("Column of the second matrix(b) \n"); scanf("%d",&colb); if(cola != rowb){ printf("The row number of the second matrix(b) should be %d\n",cola); printf("Column of first matrix must be equal to the number of row of the second matrix.\n"); printf("Run the program again.\n"); } else{ printf("Enter the elements of second matrix\n"); for ( i = 0 ; i < rowb ; i++ ){ for ( j = 0 ; j < colb ; j++ ){ scanf("%d", &b[i][j]); } } printf("\nMultiplication of matrix A and B\n\t\t"); for(i=0;i<rowa;i++){ // rowa ...? [1] for(j=0;j<colb;j++){ // colb...? [2] sum = 0; for(k=0;k<rowb;k++){// rowb...? [3] sum = sum + a[i][k] * b[k][j]; } c[i][j]=sum; } } printf("\nMatrix A*B is : \n\t\t"); for(i=0;i<rowa;i++){ for(j=0;j<colb;j++){ printf("%d \t",c[i][j]); } printf("\n\t\t"); } } return 0; }

- The number of row of the product matrix is equal to the row of the first(a) matrix
- The number of column of the product matrix is equal to the second(b) matrix
- The iteration number is equal to row of the second matrix (rowb) or the column of the first matrix (cola), since both are equal.