Я читаю «Иллюстрированный C», и первый вопрос упражнения задает:
Программа MATMUL умножает матрицы фиксированного размера. Заставьте программу работать с любыми указанными размерами.
Итак, ниже приведен код, который я придумал до сих пор. Однако я прочитал, что все атрибуты должны быть объявлены перед основной функцией. Так как же получить массивы нестандартного размера, не объявляя их в основной функции?
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
int n, m, i, j, k;
int main(void)
{
printf("\nEnter:rows for A, columns for A and rows for B, columns for B\n");
scanf("%i %i %i", &i, &j, &k);
float A[i][j], B[j][k], C[i][k]; //Not legal, right?
/*Read in A array*/
for(n=0; n<i; ++n)
for(m=0; m<j; ++m)
scanf("%f", &A[n][m]);
/*Read in B array*/
for(n=0; n<j; ++n)
for(m=0; m<k; ++m)
scanf("%f", &B[n][m]);
/*Calculate C array*/
for(j=0; j<i; ++j)
for(i=0; i<k; ++i)
{
C[i][j] = 0;
for (k=0; k<j; ++k)
C[i][j] += A[i][k] * B[k][j];
}
for(n=0; n<i; ++n)
for(m=0; m<k; ++m)
printf("\n%.2f\t", C[n][m]);
return 0;
}