user-0 提问: 求人教任意数目的矩阵乘法，甚至是文件都可以。

回复:
user: user-0
content: int MatrixProduct(double** pResult, double** pA, int iAr, int iAc , double** pB, int iBr, int iBc) {      if( pResult == NULL) return 10000;      if( pA == NULL) return 20000;      if( pB == NULL) return 20000;      if(iAc != iBr) return 30000;     /*可以开始写矩阵乘法中每个元素的计算了*/     /*注意要使用指针访问二维数组，特别是double要占几个字节，需要用sizeof函数实际计算每个元素的偏移量，还有行列序号的对应关系*/     return 0; /*计算正确时返回零*/ }   这是老师给我的提示

user: user-1
content: #include<stdio.h> int main() { 	int q,w,e,r; 	printf("请输入A矩阵行数:");scanf("%d",&q);printf("请输入A矩阵列数:");scanf("%d",&w);printf("\n"); 	printf("请输入B矩阵行数:");scanf("%d",&e);printf("请输入B矩阵列数:");scanf("%d",&r);printf("\n"); //	scanf("%d,%d,%d,%d",&q,&w,&e,&r); 	if(w==e){ 	q++;w++;e++;r++; 	int a[q][w],b[e][r],c[q][r]; 	printf("\n"); 	int i,j,m,n,x=0; 	for(i=1;i<=q-1;i++){ 		for(j=1;j<=r-1;j++){ 			c[i][j]=0; 		} 	}printf("请输入A矩阵:\n"); 	for(i=1;i<=q-1;i++){ 		for(j=1;j<=w-1;j++){ 			scanf("%d",&a[i][j]); //		a[i][j]=1; 		} 	}printf("\n请输入B矩阵:\n"); 	for(m=1;m<=e-1;m++){ 		for(n=1;n<=r-1;n++){ 			scanf("%d",&b[m][n]); //			b[m][n]=1; 		} 	} 	for(i=1;i<=q-1;i++){ 		for(n=1;n<=r-1;n++){ 			for(j=1,m=1;j<=w-1;j++,m++){ 				c[i][n]=c[i][n]+a[i][j]*b[m][n]; 			} 		} 	} 	printf("\n矩阵相乘结果为：\n"); 	for(i=1;i<=q-1;i++){ 		for(n=1;n<=r-1;n++){ 			printf("%d\t",c[i][n]); 			x=x+1; 			if(x%(r-1)==0){ 				printf("\n"); 			} 			 			} 		} 	} 	else printf("矩阵相乘无意义"); 			return 0; 	}

user: user-2
content: #include <stdio.h> #define NUM 2000  int a[NUM][NUM], b[NUM][NUM]; int c[NUM][NUM] = {0};  void init_matrix(void) { 	int i, j;  	for(i = 0; i < NUM; i++) 		for(j = 0; j < NUM; j++) 			a[i][j] = b[i][j] = 1;  }  void matrix_low() { 	int i, j, k; 	for (i = 0; i < NUM; i++) { 		for (j = 0; j < NUM; j++) { 			for (k = 0; k < NUM; k++) { 				c[i][j] = c[i][j] + a[i][k] * b[k][j]; 			} 		} 	} }  void matrix_high() { 	int i, j, k; 	for (i = 0; i < NUM; i++) { 		for (k = 0; k < NUM; k++) { 			for (j = 0; j < NUM; j++) { 				c[i][j] = c[i][j] + a[i][k] * b[k][j]; 			} 		} 	} }   推荐使用void matrix_high()，矩阵大的时候它运行更快！这里只是最基本的乘法实现，不是lz要求的实现，供参考

user: user-0
content: 我试过了  不行的啊

user: user-0
content: - -  好难懂啊

user: user-3
content: 仅供参考#include <stdio.h> #include <stdlib.h> #include <malloc.h> int **newarr2d(int rows,int cols) {     int **p,i;      p=(int **)malloc(rows*sizeof(int *));     if (NULL==p) exit(1);     for (i=0;i<rows;i++) {         p[i]=(int *)malloc(cols*sizeof(int));         if (NULL==p[i]) exit(1);     }     return p; } void deletearr2d(int **p,int rows) {     int i;      for (i=0;i<rows;i++) {         free(p[i]);     }     free(p); } int main() {     int **arr2d,i,j,r,c;      r=4;     c=5;     //在堆中开辟一个4×5的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      r=6;     c=3;     //在堆中开辟一个6×3的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      return 0; } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19 //  0  1  2 //  3  4  5 //  6  7  8 //  9 10 11 // 12 13 14 // 15 16 17 //