我在C中遇到了一些麻烦的乘法因素(以两个一维数组的形式)。没有变量可以创建也不能删除。
正确的结果应该是:http://s32.postimg.org/nrkigh2l1/IMG_20160516_183316.jpg
打印周期应该是正确的。
#include <stdio.h>
void main(){
unsigned int m = 3; // first matrix number of rows
unsigned int n = 2; // first matrix number of columns
unsigned int k = 4; // second matrix number of columns
short int mat1[] = { -1,-2, 4, 5, 4, -2 }; // first matrix (3x2)
short int mat2[] = { 2, 0, 0, 0, 0, 2, 0, 0 }; // second matrix 2x4)
int mat3[1024]; // final matrix (3x4)
// printing final matrix
unsigned int i, j, h;
printf("Final matrix:\n");
for (i = h = 0; i < m; i++){
for (j = 0; j < k; j++, h++)
printf("%6d ", mat3[h]);
printf("\n");
}
}
答案 0 :(得分:-1)
其他人已经展示了如何将不同维度的矩阵相乘。您需要做的就是转换代码以将1D向量作为2D矩阵进行访问。
所以,给定[假设]矩阵:
AC_DEFUN([AX_TEST_COMPILE_FLAG],
[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
AS_VAR_PUSHDEF([CACHEVAR] [ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
AC_CACHE_CHECK([whether _AC_LANG compiler can build and run with $1], CACHEVAR, [
ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
_AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
AC_RUN_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
[AS_VAR_SET(CACHEVAR,[yes])],
[AS_VAR_SET(CACHEVAR,[no])])
_AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
AS_VAR_IF(CACHEVAR,yes,
[m4_default([$2], :)],
[m4_default([$3], :)])
AS_VAR_POPDEF([CACHEVAR])dnl
])dnl AX_CHECK_COMPILE_FLAGS
将其转换为矢量:
#define XDIM 10
#define YDIM 5
int mtx[YDIM][XDIM];
要访问元素,而不是:
int vec[YDIM * XDIM];
使用:
mtx[ypos][xpos]
您可以使用不同矩阵的不同值重复此技术。