C语言题,求两个矩阵的乘积

要求把a和b矩阵的乘积放入矩阵c,并把矩阵c按矩阵形式输出……要求要严格按照输入输出格式写代码

简单题,按照矩阵的定义去做即可

源代码如下

//#pragma GCC diagnostic error"-std=c11"

#include<stdlib.h>  //有随机数库

#include<malloc.h>

#include<time.h>    //用于产生随机数种子

#include<math.h>

#include<string.h>

#include<stdio.h>

#define ELE int

typedef struct Metrix {

ELE *A;

int row, col;

}Metrix;

//初始化矩阵

void init(Metrix *M, int row, int col, int auto_read) {

M->A = (ELE*)calloc(row*col, sizeof(ELE));

M->row = row;

M->col = col;

if (auto_read) {

int i, size = row*col;

for (i = 0; i<size; i++)

scanf("%d", M->A + i);

}

}

#define IDX(M,r,c) (r*(M->col)+c)

ELE* get(Metrix *M, int r, int c) {

return M->A + IDX(M, r, c);

}

int main()

{

int m, l, n, i, j, k;

scanf("%d%d%d", &m, &l, &n);

Metrix L, R;

init(&L, m, l, 1);

init(&R, l, n, 1);

//   init(M,m,n,0);

//矩阵乘法走起

for (i = 0; i<m; i++) {

for (j = 0; j<n; j++) {

ELE *lp = get(&L, i, 0), *rp = get(&R, 0, j);

ELE out = 0;

for (k = 0; k<l; k++) {

out += *(rp)*lp[k];

rp += n;  //rp换下一行

}

printf("%d ", out);

}

printf("\b\n"); //删去空格再换行。

}

return 0;

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-05-07

#include "stdio.h"

#include <stdlib.h>

int main(int argc,char *argv[]){

int m,l,n,**a,**b,**c,*q,i,j,t;

printf("Please enter m, l & n(int 0<m,l,n<10 and must be m==n)...\n");

if(scanf("%d%d%d",&m,&l,&n)!=3 || m<1 || l<1 || n<1 || m>9 || l>9 || n>9 || m!=n){

printf("Input error, exit...\n");

return 0;

}

a=(int **)malloc(sizeof(int *)*m);//矩阵a的行指针

b=(int **)malloc(sizeof(int *)*l);//矩阵b的行指针

c=(int **)malloc(sizeof(int *)*m);//矩阵c的行指针

if(!a || !b || !c || (q=(int *)malloc(sizeof(int)*(m*l*2+m*m)))==NULL){//判断及总空间

printf("Application memory failure, exit...\n");

return 0;

}

for(t=i=0;i<m;a[i++]=q+t,t+=l);//把总空间组织成a,b,c三个矩阵

for(i=0;i<l;b[i++]=q+t,t+=n);

for(i=0;i<m;c[i++]=q+t,t+=n);

printf("Input matrix a...\n");

for(i=0;i<m;i++)//输入矩阵a

for(j=0;j<l;scanf("%d",a[i]+j++));

printf("Input matrix b...\n");

for(i=0;i<l;i++)//输入矩阵b

for(j=0;j<n;scanf("%d",b[i]+j++));

for(i=0;i<m;i++){//a,b相乘存于c并输出

for(j=0;j<n;j++){

for(c[i][j]=t=0;t<l;t++)

c[i][j] += a[i][t] * b[t][j];

printf("%d\t",c[i][j]);

}

printf("\n");

}

free(q);

free(a);

free(b);

free(c);

return 0;

}

运行样例:

相似回答