#include <stdio.h>
int main() {
// declare input and output arrays
int a[10][10], b[10][10], c[10][10];
// declare loop variables and variables to use
// to store the number of rows and columns
int a_rows, a_cols, b_rows, b_cols, i, j, k;
// ask for the input matrix sizes
printf("Enter the number of rows in 1st matrix:\n");
scanf("%d", &a_rows);
printf("Enter the number of columns in 1st matrix:\n");
scanf("%d", &a_cols);
// check if the number of rows/columns requested
// in the 1st matrix is too big or too small
if (a_rows < 1 || a_cols < 1 || a_rows > 10 || a_cols > 10) {
printf("Invalid number of rows or columns\n");
// exit the program
return 0;
}
printf("Enter the number of rows in 2nd matrix:\n");
scanf("%d", &b_rows);
printf("Enter the number of columns in 2nd matrix:\n");
scanf("%d", &b_cols);
// check if the number of rows/columns requested
// in the 2nd matrix is too big or too small
if (b_rows < 1 || b_cols < 1 || b_rows > 10 || b_cols > 10) {
printf("Invalid number of rows or columns\n");
// exit the program
return 0;
}
// check if matrix is compatible for multiplication
if (a_cols != b_rows) {
printf("Matrices are not compatible for multiplication\n");
return 0;
}
// ask for the numbers
printf("Enter the numbers of the first matrix\n");
for (i = 0; i < a_rows; i++) {
for (j = 0; j < a_cols; j++) {
// array index starts from 0, but row or
// column number starts from 1.
printf("Enter row %i, column %i:\n", i + 1, j + 1);
scanf("%d", &a[i][j]);
}
}
printf("Enter the numbers of the second matrix\n");
for (i = 0; i < b_rows; i++) {
for (j = 0; j < b_cols; j++) {
// array index starts from 0, but row or
// column number starts from 1.
printf("Enter row %i, column %i:\n", i + 1, j + 1);
scanf("%d", &b[i][j]);
}
}
// calculate the product of the matrices
for (i = 0; i < a_rows; i++) {
for (j = 0; j < b_cols; j++) {
c[i][j] = 0;
for (k = 0; k < a_cols; k++) {
c[i][j] += a[i][k] * b[k][j];
}
}
}
printf("The first matrix is:\n");
// print the first matrix
for (i = 0; i < a_rows; i++) {
for (j = 0; j < a_cols; j++) {
printf("%d ", a[i][j]);
}
// to seperate the rows
printf("\n");
}
printf("The second matrix is:\n");
// print the second matrix
for (i = 0; i < b_rows; i++) {
for (j = 0; j < b_cols; j++) {
printf("%d ", b[i][j]);
}
// to seperate the rows
printf("\n");
}
printf("Product of the matrix is:\n");
// print the product
for (i = 0; i < a_rows; i++) {
for (j = 0; j < b_cols; j++) {
printf("%d ", c[i][j]);
}
// to seperate the rows
printf("\n");
}
return 0;
}