Matrix Multiplication
Matrix is 2D array in computer science. Take user input for row and colum for matrix A and matrix B.
Column count of matrix A should match to row count of matrix B else we should return.
Allocate two 2D dynamic array A and B, first allocate pointes for row elemnets and then allocate columns elements and assign each column pointers to row list.
Now populate elements for matrix A with user input. Then do the same for matrix B.
Now take element[0,0] from A and B and multiply row elements of A to column elements of B and sum up. This sum is the resultant element for position [0,0].
Repeat the same for rest of all positions individually. Thus the resultant matrix is formed.
Source Code
#include <stdio.h>
#include <malloc.h>
int main(int argc, char* argv[])
{
int rows_a = 0, rows_b = 0;
int cols_a = 0, cols_b = 0;
int **matrix_a;
int **matrix_b;
int r, c, k, sum;
printf ("== Matrix Multiplication Demo ==\n");
printf ("Matrix A has rows : ");
scanf ("%d", &rows_a);
printf ("Matrix A has columns : ");
scanf ("%d", &cols_a);
printf ("Matrix B has rows : ");
scanf ("%d", &rows_b);
printf ("Matrix B has columns : ");
scanf ("%d", &cols_b);
if (cols_a != rows_b) {
printf ("Cannot multiply these two matrixes!");
return -1;
}
matrix_a = (int **) malloc (sizeof(int **)*rows_a);
for (r = 0; r < rows_a; r++) {
matrix_a[r] = (int *) malloc(sizeof(int)*cols_a);
}
matrix_b = (int **) malloc (sizeof(int **)*rows_b);
for (r = 0; r < rows_b; r++) {
matrix_b[r] = (int *) malloc(sizeof(int)*cols_b);
}
printf ("\nMatrix A\n");
for (r = 0; r < rows_a; r++) {
for (c = 0; c < cols_a; c++) {
printf ("Element [%d][%d] : ", r, c);
scanf ("%d", &matrix_a[r][c]);
}
}
printf ("\nMatrix B\n");
for (r = 0; r < rows_b; r++) {
for (c = 0; c < cols_b; c++) {
printf ("Element [%d][%d] : ", r, c);
scanf ("%d", &matrix_b[r][c]);
}
}
printf ("\nMatrix A\n");
for (r = 0; r < rows_a; r++) {
printf ("| ");
for (c = 0; c < cols_a; c++) {
printf ("%.2d ", matrix_a[r][c]);
}
printf (" |");
printf ("\n");
}
printf ("\nMatrix B\n");
for (r = 0; r < rows_b; r++) {
printf ("| ");
for (c = 0; c < cols_b; c++) {
printf ("%.2d ", matrix_b[r][c]);
}
printf (" |");
printf ("\n");
}
printf ("\nMatrix A x B\n");
for (r = 0; r < rows_a; r++) {
printf ("| ");
for (c = 0; c < cols_b; c++) {
sum = 0;
for(k = 0; k < cols_a; k++) {
sum = sum + matrix_a[r][k] * matrix_b[k][c];
}
printf ("%.2d ", sum);
}
printf (" |");
printf ("\n");
}
return 0;
}
Output
== Matrix Multiplication Demo ==
Matrix A has rows : 2
Matrix A has columns : 2
Matrix B has rows : 2
Matrix B has columns : 3
Matrix A
Element [0][0] : 1
Element [0][1] : 2
Element [1][0] : 3
Element [1][1] : 4
Matrix B
Element [0][0] : 5
Element [0][1] : 6
Element [0][2] : 7
Element [1][0] : 8
Element [1][1] : 9
Element [1][2] : 10
Matrix A
| 01 02 |
| 03 04 |
Matrix B
| 05 06 07 |
| 08 09 10 |
Matrix A x B
| 21 24 27 |
| 47 54 61 |
About our authors: Team EQA
You have viewed 1 page out of 252. Your C learning is 0.00% complete. Login to check your learning progress.
‹
#
›