#include <stdio.h> #include <stdlib.h> int ** matrixMult(int **a, int **b, int r, int c) { int i, j, k, sum = 0; int **result = malloc(r * sizeof (int *)); for (i = 0; i < r; i++) { result[i] = malloc(r * sizeof (int)); } for (i = 0; i < r; i++) { for (j = 0; j < r; j++) { for (k = 0; k < c; k++) { sum += a[i][k] * b[k][j]; } result[i][j] = sum; sum = 0; } } return result; } int main() { int i, j, rows, cols, **a, **b, **result; printf("Multiplication of two Matrix"); printf("\nEnter number of rows :"); scanf("%d", &rows); printf("\nEnter number of columns :"); scanf("%d", &cols); // allocate rows, each row is a pointer to int a = malloc(rows * sizeof (int *)); // allocate cols(rows), each row is a pointer to int b = malloc(cols * sizeof (int *)); // for each row allocate cols int for (i = 0; i < rows; i++) { a[i] = malloc(cols * sizeof (int)); } for (i = 0; i < cols; i++) { b[i] = malloc(rows * sizeof (int)); } printf("\nEnter Matrix A\n"); for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { printf("Enter Element %d %d : ", i, j); scanf("%d", &a[i][j]); } } printf("\nEnter Matrix B\n"); for (i = 0; i < cols; i++) { for (j = 0; j < rows; j++) { printf("Enter Element %d %d : ", i, j); scanf("%d", &b[i][j]); } } result = matrixMult(a, b, rows, cols); printf("\nMultiplication results of Matrix A & B\n"); for (i = 0; i < rows; i++) { for (j = 0; j < rows; j++) { printf("%d ", result[i][j]); } printf("\n"); } return 0; }
Output:
Multiplication of two Matrix Enter number of rows :3 Enter number of columns :4 Enter Matrix A Enter Element 0 0 : 9 Enter Element 0 1 : 1 Enter Element 0 2 : 0 Enter Element 0 3 : -5 Enter Element 1 0 : 6 Enter Element 1 1 : 2 Enter Element 1 2 : 10 Enter Element 1 3 : 0 Enter Element 2 0 : 9 Enter Element 2 1 : -15 Enter Element 2 2 : 5 Enter Element 2 3 : 9 Enter Matrix B Enter Element 0 0 : 1 Enter Element 0 1 : 2 Enter Element 0 2 : 3 Enter Element 1 0 : 4 Enter Element 1 1 : 5 Enter Element 1 2 : 6 Enter Element 2 0 : 7 Enter Element 2 1 : 8 Enter Element 2 2 : 9 Enter Element 3 0 : 10 Enter Element 3 1 : 11 Enter Element 3 2 : 12 Multiplication results of Matrix A & B -37 -32 -27 84 102 120 74 82 90