我正在阅读“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;
}
浮点数 A[i][j], B[j][k], C[i][k]; //不合法,对吧?
您的问题已被标记C
and VLAs http://en.wikipedia.org/wiki/Variable-length_array是 C99 的一部分,所以float A[i][j], B[j][k], C[i][k];
是合法的。
EDIT
如果您的编译器不支持 C99 那么您除了dynamic memory allocation
.
Example:
float **A;
int l;
A= (float**)malloc(i*sizeof(float*));
for(l=0;l<i;++l)
A[l]= (float*)malloc(j*sizeof(float));
Note: 不要忘记free
当你完成时的记忆.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)