该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
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" );
}