/* gcc program1.c -o test -lm
*/
#include < stdio.h >
void enterData(int first[][10], int second[][10], int r1, int c1, int r2, int c2);
void multiplyMatrices(int first[][10], int second[][10], int multResult[][10], int r1, int c1, int r2, int c2);
void display(int mult[][10], int r1, int c2);
int main() {
int first[10][10], second[10][10], mult[10][10], r1, c1, r2, c2;
printf("Enter rows and column for the first matrix: ");
scanf("%d %d", &r1, &c1);
r2=c1;
c2=r1;
// Function to take matrices data
enterData(first, second, r1, c1, r2, c2);
// Function to multiply two matrices.
multiplyMatrices(first, second, mult, r1, c1, r2, c2);
// Function to display resultant matrix after multiplication.
display(mult, r1, c2);
return 0;
}
void enterData(int first[][10], int second[][10], int r1, int c1, int r2, int c2) {
int i,j;
printf("\nEnter elements of matrix 1:\n");
for ( i = 0; i < r1; ++i) {
for ( j = 0; j < c1; ++j) {
printf("Enter a%d%d: ", i + 1, j + 1);
scanf("%d", &first[i][j]);
}
}
printf("\nEnter elements of matrix 2:\n");
for ( i = 0; i < r2; ++i) {
for ( j = 0; j < c2; ++j) {
printf("Enter b%d%d: ", i + 1, j + 1);
scanf("%d", &second[i][j]);
}
}
}
void multiplyMatrices(int first[][10], int second[][10], int mult[][10], int r1, int c1, int r2, int c2) {
// Initializing elements of matrix mult to 0.
int i,j,k;
for ( i = 0; i < r1; ++i) {
for ( j = 0; j < c2; ++j) {
mult[i][j] = 0;
}
}
// Multiplying first and second matrices and storing in mult.
for ( i = 0; i < r1; ++i) {
for ( j = 0; j < c2; ++j) {
for ( k = 0; k < c1; ++k) {
mult[i][j] += first[i][k] * second[k][j];
}
}
}
}
void display(int mult[][10], int r1, int c2) {
int i,j;
printf("\nOutput Matrix:\n");
for ( i = 0; i < r1; ++i) {
for ( j = 0; j < c2; ++j) {
printf("%d ", mult[i][j]);
if (j == c2 - 1)
printf("\n");
}
}
}