实现随机矩阵相乘的c语言编程,【修改】随机矩阵相乘C=A*B*α+β*C\

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

1,用malloc,而不用calloc,malloc是C语言。另外一个malloc必对应一个free.

2、不要用指针的指针**,只用指针就可以表示二维数组.

3.不要增加矩阵d,这样会多占一块内存,就把C既做输入,由做输出.

#include "stdio.h"

#include "stdlib.h"

#include "time.h"

void pr(int **a,int m,int n)

{

int i,j;

for(i=0;i

{

for(j=0;j

printf("%10d",a[i][j]);

printf("\n");

}

printf("\n");

}

void multiplication(int **a,int m1,int n1,int **b,int m2,int n2,int **c,int **d,int m3,int n3,int x,int y)

{

int i,j,k;

for(i=0;i

for(j=0;j

for(k=0;k

c[i][j]+=a[i][k]*b[k][j]*x;

for(i=0;i

for(j=0;j

c[i][j]=c[i][j]+d[i][j]*y;

}

void main()

{

int **a,**b,**c,**d,m1,n1,m2,n2,m3,n3,x,y;

int i,j;

printf("输入矩阵A的行数、列数:");

scanf("%d%d",&m1,&n1);

printf("输入矩阵B的行数、列数:");

scanf("%d%d",&m2,&n2);

printf("输入矩阵C的行数、列数:");

scanf("%d%d",&m3,&n3);

if(n1!=m2)

{

printf("第一个矩阵的列必须等于第二个矩阵的行数!");

return;

}

if(m1!=m3)

{

printf("第一个矩阵的行数必须等于第三个矩阵的行数!");

return;

}

if(n2!=n3)

{

printf("第二个矩阵的列数必须等于第三个矩阵的列数!");

return;

}

srand((unsigned)time(NULL));

printf("请输入α和β:\n");

scanf("%d%d",&x,&y);

a=(int **)calloc(m1,sizeof(int));

for(i=0;i

a[i]=(int *)calloc(n1,sizeof(int));

for(i=0;i

for(j=0;j

a[i][j]=rand()%100;

b=(int **)calloc(m2,sizeof(int));

for(i=0;i

b[i]=(int *)calloc(n2,sizeof(int));

for(i=0;i

for(j=0;j

b[i][j]=rand()%100;

d=(int **)calloc(m1,sizeof(int));

for(i=0;i

d[i]=(int *)calloc(n2,sizeof(int));

for(i=0;i

for(j=0;j

d[i][j]=rand()%100;

c=(int **)calloc(m1,sizeof(int));

for(i=0;i

c[i]=(int *)calloc(n2,sizeof(int));

clock_t start,finish;

double time;

start=clock();

multiplication(a,m1,n1,b,m2,n2,c,d,m3,n3,x,y);

finish=clock();

time=(double)(finish-start)/CLOCKS_PER_SEC;

printf("矩阵A:\n");

pr(a,m1,n1);

printf("矩阵B:\n");

pr(b,m2,n2);

printf("矩阵C:\n");

pr(d,m3,n3);

printf("矩阵C=A*B*α+β*C\n");

pr(c,m1,n2);

printf("\n%此程序的运行时间为");

printf("%f",time );

printf("秒\n" );

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值