Перемножение двух матриц на языке Си с динамическим выделением памяти. Проверено для матриц порядка 500x500 и менее. Элементы для проверки задавались по формуле, матрицы заполнялись компьютером. По умолчанию матрицы нужно заполнять вручную. Код компилировать чистым проектом под Си.
#include "stdio.h"
#include "malloc.h"
#include "locale.h"
int main (int argc, char* argv[])
{
int** matrixA, **matrixB, **matrixAB;
int rowA, colA,rowB,colB, i,j,k;
setlocale(LC_ALL, "russian_russia.1251");
printf("Введите количество строк матрицы A: ");
scanf_s("%d",&rowA);
printf("Введите количество столбцов матрицы A: ");
scanf_s("%d",&colA);
printf("\nВведите количество строк матрицы B: ");
scanf_s("%d",&rowB);
printf("Введите количество столбцов матрицы B: ");
scanf_s("%d",&colB);
if(colA!=rowB)
{
printf("\nНевозможно перемножить матрицы\n");
return 0;
}
matrixA = (int**) malloc(rowA * sizeof(int*));
for (i = 0; i<rowA;i++)
{
matrixA[i] = (int*)malloc(colA*sizeof(int));
}
matrixB = (int**) malloc(rowB * sizeof(int*));
for (i = 0; i<rowB;i++)
{
matrixB[i] = (int*)malloc(colB*sizeof(int));
}
matrixAB = (int**) malloc(rowA * sizeof(int*));
for (i = 0; i<rowA;i++)
{
matrixAB[i] = (int*)malloc(colB*sizeof(int));
}
for (i = 0; i < rowA; ++i)
{
for (j = 0; j < colB; ++j)
{
for (k = 0; k < colA; ++k)
{
matrixA[i][k] = 0;
matrixB[k][j] = 0;
matrixAB[i][j] = 0;
}
}
}
printf("\nВведите матрицу A\n");
for (i = 0; i<rowA;i++)
{
for (j = 0; j<colA; j++)
{
printf("matrixA[%d][%d] = ",i,j);
scanf_s("%d",&matrixA[i][j]);
}
}
printf("\nВведите матрицу B\n");
for (i = 0; i<rowB;i++)
{
for (j = 0; j<colB; j++)
{
printf("matrixB[%d][%d] = ",i,j);
scanf_s("%d",&matrixB[i][j]);
}
}
for (i = 0; i < rowA; ++i)
for (j = 0; j < colB; ++j)
for (k = 0; k < colA; ++k)
matrixAB[i][j] += matrixA[i][k] * matrixB[k][j];
printf("\n");
for (i = 0; i<rowA;i++)
{
for (j = 0; j<colB; j++)
{
printf("%d ",matrixAB[i][j]);
}
printf("\n");
}
getchar();
return 0;
}