永发信息网

C语言问题 高手来。。矩阵乘法中,关于动态分配二维数组,二维数组做形参问题。。实在搞不懂了。。

答案:3  悬赏:80  手机版
解决时间 2021-04-05 17:06
C语言问题 高手来。。矩阵乘法中,关于动态分配二维数组,二维数组做形参问题。。实在搞不懂了。。
最佳答案
我个人认为这段代码主要有三个地方有错误:
1.void matrix_mult(B (*p1)[n1],B (*p2)[n2],int m,int n,int p,B (*p3)[n2])
(*p1)[n1],(*p2)[n2]和(*p3)[n2]这样写代表行指针,但其中的n1,n2必须是一个确定的整型,字符型等常量的(记忆有点模糊,不敢肯定这种说法百分百正确,建议楼主找下资料),应改为B **P1等。
2.scanf("%d",&a[i][j]);因为定义了double **a;所以应写成scanf("%lf", &a[i][j]);
3.for(i=0;i for(j=0;j scanf("%d",&a[i][j]);
这里楼主的意思应该是赋值给矩阵b的,但却写成了a,且%d的问题种上面的一样。

下面的代码就上面3点修改了一下,可以编译运行:

#include
#include
#define B double
void matrix_mult(double **p1,double **p2,int m,int n,int p,double **p3)
{
int i,j,k;

// printf("1\n");
for(i=0;i {

for(j=0;j {

for(k=0;k {
//printf("2\n");
//(*(*(p3+i)+j))+=(*(*(p1+i)+k))*(*(*(p2+k)+j));
// printf("%d\n",*(*(p3+i)+j));
p3[i][j] += p1[i][k] * p2[k][j];
}

}
}

}

B **mallocA(int m,int n) //定义动态二维数组函数
{
B **a;
int i;
a=(B**)malloc(m*sizeof(B*));
for(i=0;i a[i]=(B*)malloc(n*sizeof(B));
return a;
}

void free_a2d(B**a,int m) //释放内存
{
int i;
for(i=0;i free(a[i]);
free(a);
}

void main()
{
int i,j,m1,m2,n1,n2;
B **a,**b,**c;
do
{

printf("输入矩阵a的行数和列数:");
scanf("%d %d",&m1,&n1);
printf("\n");
printf("输入矩阵b的行数和列数:");
scanf("%d %d",&m2,&n2);
printf("\n");
if(n1!=m2)
printf("输入错误! 矩阵a的列数不等于矩阵b的行数!请重新输入!\n");
}
while(n1!=m2);

a=mallocA(m1,n1);
printf("输入矩阵a的所有元素(空格隔开,回车结束):");
for(i=0;i for(j=0;j scanf("%lf",&a[i][j]);

b=mallocA(m2,n2);
printf("输入矩阵b的所有元素(空格隔开,回车结束):");
for(i=0;i for(j=0;j scanf("%lf",&b[i][j]);

c=mallocA(m1,n2);
for(i=0;i for(j=0;j c[i][j]=0;

matrix_mult(a,b,m1,n2,m2,c); //!!!!!!!!!!!!!!!!!

printf("矩阵a乘矩阵b结果为:\n");
for(i=0;i {
for(j=0;j printf("%g ",c[i][j]);
printf("\n");
}

free_a2d(a,m1);
free_a2d(b,m2);
}
全部回答
程序错了
无法编译吧?你是在什么平台上编译的?
上面的void matrix_mult(B (*p1)[n1],B (*p2)[n2],int m,int n,int p,B (*p3)[n2])
中的n1,n2没有声明出现编译错误
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
什么角抹油又尖又滑,"平底锅抹油"的意思?
fid格式播放器
用左旋滚刀滚切左旋齿轮,如何调整机床?
泉州惠安车站附近租房
等你等了那么久的诗词,有人可以帮我想一首关
同样是2.0T为什么大众途安和别克昂科威的动力
抗战以来国民政府取得重大胜利的战役是______
怎样查询武胜县贫困户名单??
人做事果然不能冲动啊,后果承受不起啊!
怎么辨别面膜有荧光剂,怎样辨别衣服中是否含
淘粉吧理财超市靠谱吗
头上总是有大块的头皮屑,头皮很油,是怎么回
我想问一下怎样写夫妻婚后财产协议?是找一律
形容事情要及时做完的名言
离开一个人的句子,写离开一个人赶到心情好的
推荐资讯
总觉得天天喊着"核平"日本的人很幼稚 难道
光荣退休藏头诗
正版SQL2008r2 提示评估期已过怎么办
乔麦粉用冷水调还是用热水调?
电子秤设置好的是300g去皮使用一段时间后去皮
高压电工证好不好考,高压电工证好考吗
可以用验钞机识别防辐射眼镜吗
玉夫人地址有知道的么?有点事想过去!
寶寶五個零月了,自己覺得奶水越來越少了,有
我总是想糊弄作业怎么办
怎样去除鼻子中间的一道白印子
很多江湖人都去一个黑店做生意的电影
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?