C语言矩阵乘法 用malloc函数 实现任意阶矩阵的乘法

malloc、free... malloc、free 展开
 我来答
mayadong7349
推荐于2017-09-19 · TA获得超过2356个赞
知道大有可为答主
回答量:362
采纳率:0%
帮助的人:693万
展开全部
#include<stdio.h>
#include<stdlib.h>/*malloc函数的函数头,如果这个函数头不行,可以试试malloc.h*/
int main(void)
{
int m,g,n;
int i,j,k;
printf("请输入第一个矩阵的行数和列数:\n");
scanf("%d%d",&m,&g);
printf("请输入第二个矩阵的列数(该矩阵行数等于第一个矩阵的列数):\n");
scanf("%d",&n);
double **a=NULL;/*二级指针用来代表一个二维数组,在声明指针的时候将其赋值为NULL;释放后再赋值为NULL在一些进行有效性判断的地方用a==NULL来判断指针是否为空指针*/
a=(double**)malloc(m*sizeof(double*));/*这句是动态定义二维数组的行数。新的标准ANSI C规定malloc函数的返回值类型为void型,所以需要强制转化为double型的指针后才能赋给a。*/
for(i=0;i<m;i++)
a[i]=(double*)malloc(g*sizeof(double));/*这句是动态定义二维数组的列数。*/
printf("请输入第一个矩阵中的元素:\n");
for(i=0;i<m;i++)
for(j=0;j<g;j++)
scanf("%lf",&a[i][j]);
double **b=NULL;
b=(double**)malloc(g*sizeof(double *));
for(i=0;i<g;i++)
b[i]=(double*)malloc(n*sizeof(double));
printf("请输入第二个矩阵中的元素:\n");
for(i=0;i<g;i++)
for(j=0;j<n;j++)
scanf("%lf",&b[i][j]);
double **result=NULL;/*存放计算结果的二维数组*/
result=(double**)malloc(m*sizeof(double*));
for(i=0;i<m;i++)
result[i]=(double*)malloc(n*sizeof(double));
for(i=0;i<m;i++)
for(j=0;j<n;j++)
result[i][j]=0;/*初始化为0*/
for(i=0;i<m;i++)/*完成矩阵的乘法运算*/
for(j=0;j<n;j++)
for(k=0;k<g;k++)
result[i][j]+=a[i][k]*b[k][j];
printf("结果:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%5g",result[i][j]);
printf("\n");
}
for(i=0;i<m;i++)/*释放之前分配的空间是一个好习惯*/
{
free(a[i]);
a[i]=NULL;
free(result[i]);
result[i]=NULL;/*将之前分配的内存空间释放后,把指针置0是一个好的习惯*/
}
free(a);
a=NULL;
free(result);
result=NULL;
for(i=0;i<g;i++)
{free(b[i]);
b[i]=NULL;
}
free(b);
b=NULL;
return 0;
}
创作者87ySqAasD2
2019-05-15 · TA获得超过3767个赞
知道大有可为答主
回答量:3157
采纳率:30%
帮助的人:239万
展开全部
#include<stdio.h>
#include<stdlib.h>/*malloc函数的函数头,如果这个函数头不行,可以试试malloc.h*/
int
main(void)
{
int
m,g,n;
int
i,j,k;
printf("请输入第一个矩阵的行数和列数:\n");
scanf("%d%d",&m,&g);
printf("请输入第二个矩阵的列数(该矩阵行数等于第一个矩阵的列数):\n");
scanf("%d",&n);
double
**a=NULL;/*二级指针用来代表一个二维数组,在声明指针的时候将其赋值为NULL;释放后再赋值为NULL在一些进行有效性判断的地方用a==NULL来判断指针是否为空指针*/
a=(double**)malloc(m*sizeof(double*));/*这句是动态定义二维数组的行数。新的标准ANSI
C规定malloc函数的返回值类型为void型,所以需要强制转化为double型的指针后才能赋给a。*/
for(i=0;i<m;i++)
a[i]=(double*)malloc(g*sizeof(double));/*这句是动态定义二维数组的列数。*/
printf("请输入第一个矩阵中的元素:\n");
for(i=0;i<m;i++)
for(j=0;j<g;j++)
scanf("%lf",&a[i][j]);
double
**b=NULL;
b=(double**)malloc(g*sizeof(double
*));
for(i=0;i<g;i++)
b[i]=(double*)malloc(n*sizeof(double));
printf("请输入第二个矩阵中的元素:\n");
for(i=0;i<g;i++)
for(j=0;j<n;j++)
scanf("%lf",&b[i][j]);
double
**result=NULL;/*存放计算结果的二维数组*/
result=(double**)malloc(m*sizeof(double*));
for(i=0;i<m;i++)
result[i]=(double*)malloc(n*sizeof(double));
for(i=0;i<m;i++)
for(j=0;j<n;j++)
result[i][j]=0;/*初始化为0*/
for(i=0;i<m;i++)/*完成矩阵的乘法运算*/
for(j=0;j<n;j++)
for(k=0;k<g;k++)
result[i][j]+=a[i][k]*b[k][j];
printf("结果:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%5g",result[i][j]);
printf("\n");
}
for(i=0;i<m;i++)/*释放之前分配的空间是一个好习惯*/
{
free(a[i]);
a[i]=NULL;
free(result[i]);
result[i]=NULL;/*将之前分配的内存空间释放后,把指针置0是一个好的习惯*/
}
free(a);
a=NULL;
free(result);
result=NULL;
for(i=0;i<g;i++)
{free(b[i]);
b[i]=NULL;
}
free(b);
b=NULL;
return
0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
创作者RXJJPdVRo3
2019-06-24 · TA获得超过3969个赞
知道大有可为答主
回答量:3140
采纳率:30%
帮助的人:264万
展开全部
#include<stdio.h>
#include<stdlib.h>/*malloc函数的函数头,如果这个函数头不行,可以试试malloc.h*/
int
main(void)
{
int
m,g,n;
int
i,j,k;
printf("请输入第一个矩阵的行数和列数:\n");
scanf("%d%d",&m,&g);
printf("请输入第二个矩阵的列数(该矩阵行数等于第一个矩阵的列数):\n");
scanf("%d",&n);
double
**a=NULL;/*二级指针用来代表一个二维数组,在声明指针的时候将其赋值为NULL;释放后再赋值为NULL在一些进行有效性判断的地方用a==NULL来判断指针是否为空指针*/
a=(double**)malloc(m*sizeof(double*));/*这句是动态定义二维数组的行数。新的标准ANSI
C规定malloc函数的返回值类型为void型,所以需要强制转化为double型的指针后才能赋给a。*/
for(i=0;i<m;i++)
a[i]=(double*)malloc(g*sizeof(double));/*这句是动态定义二维数组的列数。*/
printf("请输入第一个矩阵中的元素:\n");
for(i=0;i<m;i++)
for(j=0;j<g;j++)
scanf("%lf",&a[i][j]);
double
**b=NULL;
b=(double**)malloc(g*sizeof(double
*));
for(i=0;i<g;i++)
b[i]=(double*)malloc(n*sizeof(double));
printf("请输入第二个矩阵中的元素:\n");
for(i=0;i<g;i++)
for(j=0;j<n;j++)
scanf("%lf",&b[i][j]);
double
**result=NULL;/*存放计算结果的二维数组*/
result=(double**)malloc(m*sizeof(double*));
for(i=0;i<m;i++)
result[i]=(double*)malloc(n*sizeof(double));
for(i=0;i<m;i++)
for(j=0;j<n;j++)
result[i][j]=0;/*初始化为0*/
for(i=0;i<m;i++)/*完成矩阵的乘法运算*/
for(j=0;j<n;j++)
for(k=0;k<g;k++)
result[i][j]+=a[i][k]*b[k][j];
printf("结果:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%5g",result[i][j]);
printf("\n");
}
for(i=0;i<m;i++)/*释放之前分配的空间是一个好习惯*/
{
free(a[i]);
a[i]=NULL;
free(result[i]);
result[i]=NULL;/*将之前分配的内存空间释放后,把指针置0是一个好的习惯*/
}
free(a);
a=NULL;
free(result);
result=NULL;
for(i=0;i<g;i++)
{free(b[i]);
b[i]=NULL;
}
free(b);
b=NULL;
return
0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式