c语言代码找错,用函数计算矩阵内积
求救大神
#include<stdio.h>
#include<math.h>
//声明三个矩阵 matri
double **matrix_multiplication(const double **b_matrix,const double **c_matrix,int x,int y,int z)
//a-matrix=b_matrix*c_matrix
//x,b_matrix的列数,c_matrixde的行数
//y,b_matrix的行数
//z,c_matrix的列数
{ double **a_matrix;
int k1,k2,k3;
double stem;
double **a;
//k1,b_matrix第k1列,c_matrix第k1行
//k2,b_matrix第k2行
//k3,c_matrix第k3列
for(k2=0;k2<y;k2++)
{
for(k3=0;k3<z;k3++)
{
for(k1=0;k1<x;k1++)
{
stem+=b_matrix[k2][k1]*c_matrix[k1][k3];
}
a_matrix[k2][k3]=stem;
}
}
a=a_matrix;
return a;
}
int main()
{
double **answer;
double **b;
double **c;
int m1,m2,n,l;
int k1,k2,k3;
printf("请输入第一个矩阵的行数和列数\n");
scanf("%d%d",&n,&m1);
printf("请输入第二个矩阵的行数和列数\n");
scanf("%d%d",&m2,&l);
if(m1=!m2)
{
printf("两矩阵无法相乘");
}
else
{for(k2=0;k2<n;k2++)
{
printf("请输入第一个矩阵第%d行的数据:",k2);
for(k1=0;k1<m1;k1++)
{
scanf("5.2%f",&b[k2][k1]);
}
}
for(k1=0;k1<m2;k1++)
{
printf("请输入第一个矩阵第%d行的数据:",k1);
for(k3=0;k3<l;k3++)
{
scanf("5.2%f",&b[k1][k3]);
}
}
answer=matrix_multiplication(b,c,m1,n,l);
printf("所得矩阵的内积为:\n");
for(k2=0;k2<n;k2++)
{
for(k3=0;k3<l;k3++)
{
printf("%5.2f",answer[k2][k3]);
}
}
}
return 0;
}
1 没有分配内存空间
2 在计算矩阵的时候没有将
stem=0.0;还原以及初始化
test.c文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
//声明三个矩阵 matri
double **matrix_multiplication(double **b_matrix, double **c_matrix,int x,int y,int z)
//a-matrix=b_matrix*c_matrix
//x,b_matrix的列数,c_matrixde的行数
//y,b_matrix的行数
//z,c_matrix的列数
{
double **a_matrix;
int k1,k2,k3;
double stem=0.0;
//k1,b_matrix第k1列,c_matrix第k1行
//k2,b_matrix第k2行
//k3,c_matrix第k3列
a_matrix=(double**)malloc(y*sizeof(double*));
if(a_matrix==NULL)
{
return NULL;
}
for(k2=0;k2<y;k2++)
{
a_matrix[k2]=(double*)malloc(x*sizeof(double));
if(a_matrix[k2]==NULL)
{
return NULL;
}
for(k3=0;k3<z;k3++)
{
for(k1=0;k1<x;k1++)
{
stem+=b_matrix[k2][k1]*c_matrix[k1][k3];
}
a_matrix[k2][k3]=stem;
stem=0.0;
}
}
return a_matrix;
}
int main()
{
double **answer;
double **b;
double **c;
int m1,m2,n,l;
int k1=0,k2=0,k3=0;
//printf("请输入第一个矩阵的行数和列数\n");
scanf("%d %d",&n,&m1);
//printf("请输入第二个矩阵的行数和列数\n");
scanf("%d %d",&m2,&l);
if(m1!=m2)
{
printf("两矩阵无法相乘\n");
//goto err_0;
return 0;
}
else
{
printf("n %d m1 %d \n", n, m1);
printf("m2 %d l %d \n", m2, l);
b=(double**)malloc(n*sizeof(double*));
if(b==NULL)
{
goto err_1;
}
for(k2=0;k2<n;k2++)
{
b[k2]=(double*)malloc(m1*sizeof(double));
if(b[k2]==NULL)
{
goto err_1;
}
//printf("请输入第一个矩阵第%d行的数据:",k2);
for(k1=0;k1<m1;k1++)
{
scanf("%lf",&b[k2][k1]);
}
//printf("\n");
}
c=(double**)malloc(m2*sizeof(double*));
if(c==NULL)
{
goto err_2;
}
for(k1=0;k1<m2;k1++)
{
c[k1]=(double*)malloc(l*sizeof(double));
//printf("请输入第二个矩阵第%d行的数据:",k1);
if(c[k1]==NULL)
{
goto err_2;
}
for(k3=0;k3<l;k3++)
{
scanf("%lf",&c[k1][k3]);
}
//printf("\n");
}
for(k2=0;k2<n;k2++)
{
for(k1=0;k1<m1;k1++)
{
printf("%5.2lf ",b[k2][k1]);
}
printf("\n");
}
for(k1=0;k1<m2;k1++)
{
for(k3=0;k3<l;k3++)
{
printf("%5.2lf ",c[k1][k3]);
}
printf("\n");
}
answer=matrix_multiplication(b,c,m1,n,l);
if(answer==NULL)
{
goto err_3;
}
printf("所得矩阵的内积为:\n");
for(k2=0;k2<n;k2++)
{
for(k3=0;k3<l;k3++)
{
printf("%5.2lf ",answer[k2][k3]);
}
printf("\n");
}
}
err_3:
for(k3=0;k3<k2;k3++)
{
if(answer[k3]!=NULL)
{
free(answer[k3]);
answer[k3]=NULL;
}
}
if(answer!=NULL)
{
free(answer);
answer=NULL;
}
err_2:
for(k3=0;k3<k1;k3++)
{
if(c[k3]!=NULL)
{
free(c[k3]);
c[k3]=NULL;
}
}
if(c!=NULL)
{
free(c);
c=NULL;
}
err_1:
for(k3=0;k3<k2;k3++)
{
if(b[k3]!=NULL)
{
free(b[k3]);
b[k3]=NULL;
}
}
if(b!=NULL)
{
free(b);
b=NULL;
}
err_0:
return 0;
}
in.txt文件
3 2
2 3
8
2
1
2
9
1
8
1
3
3
2
1