第1个回答 2011-03-19
下面这个是我以前写过的,功能有点多了,我就不改了哈
矩阵A是m*n的,矩阵B是n*k的,矩阵C是结果矩阵m*k, C=x*A*B+y*C,可以带系数的。
下面是程序代码,如有不懂,再提问吧。
#include <stdio.h>
#include <memory.h>
#include <stdlib.h>
void bmpmatmul(double *a, int lda, double *b, int ldb,
double *c, int ldc, double x, double y, int m,
int k, int n)
{
int i, j, ij;
double temp;
int jldc,jldb,ijlda;
if(y!=1.0)
{
for(i=0; i<m; ++i)
{
for(j=0; j<n; ++j)
{
c[i+j*ldc]*=y;
}
}
}
for(j=0; j<n; ++j)
{
jldc=j*ldc;
jldb=j*ldb;
for(ij=0; ij<k; ++ij)
{
ijlda=ij*lda;
temp=b[ij+jldb]*x;
for(i=0; i<m; ++i)
{
c[i+jldc]+=a[i+ijlda]*temp;
}
}
}
return;
}
int main()
{
double *a,*b,*c;
int m,n,k;
int i,j;
while(scanf("%d%d%d",&m,&n,&k)!=EOF)
{
a=NULL;
b=NULL;
c=NULL;
a=(double*)malloc((m*n)*sizeof(double));
b=(double*)malloc((n*k)*sizeof(double));
c=(double*)malloc((m*k)*sizeof(double));
for(i=0; i<m; ++i)
{
for(j=0; j<n; ++j)
{
scanf("%lf",&a[j*m+i]);
}
}
for(i=0; i<n; ++i)
{
for(j=0; j<k; ++j)
{
scanf("%lf",&b[j*n+i]);
}
}
for(i=0; i<m; ++i)
{
for(j=0; j<k; ++j)
{
c[j*m+i]=0.0;
}
}
bmpmatmul(a,m,b,n,c,m,1,1,m,n,k);
free(a);
free(b);
free(c);
}
return 0;
}
第2个回答 2011-03-20
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
main()
{
int **a,**b,**c;
int am=0,an=0,bm=1,bn=1,i,j,k,cm,cn;
while(an!=bm)
{
printf("ÊäÈëa¾ØÕó³ß´ç\n");
scanf("%d%d",&am,&an);
printf("ÊäÈëb¾ØÕó³ß´ç\n");
scanf("%d%d",&bm,&bn);
if(an!=bm)printf("ÊäÈë²»ºÏ·¨!\n");
}
a=(int**)malloc(am*sizeof(int*));
for(i=0;i<am;i++)a[i]=(int*)malloc(an*sizeof(int));
b=(int**)malloc(bm*sizeof(int*));
for(i=0;i<bm;i++)b[i]=(int*)malloc(bn*sizeof(int));
printf("ÊäÈëaÔªËØ\n");
for(i=0;i<am;i++)
{
printf("µÚ%dÐÐ:",i+1);
for(j=0;j<an;j++)scanf("%d",*(a+i)+j);
}
printf("ÊäÈëbÔªËØ\n");
for(i=0;i<bm;i++)
{
printf("µÚ%dÐÐ:",i+1);
for(j=0;j<bn;j++)scanf("%d",*(b+i)+j);
}
cm=am;
cn=bn;
c=(int**)malloc(cm*sizeof(int*));
for(i=0;i<cm;i++)c[i]=(int*)malloc(cn*sizeof(int));
for(i=0;i<cm;i++)
for(j=0;j<cn;j++)
c[i][j]=0;
for(i=0;i<cm;i++)
{
for(j=0;j<cn;j++)printf(" %d ",c[i][j]);
printf("\n");
}
getch();
for(i=0;i<cm;i++)
for(j=0;j<cn;j++)
for(k=0;k<an;k++)
c[i][j]=c[i][j]+(a[i][k]*b[k][j]);
for(i=0;i<cm;i++)
{
for(j=0;j<cn;j++)printf(" %d ",c[i][j]);
printf("\n");
}
return 0;
}