当前位置: 代码迷 >> C语言 >> 查找源程序的错误
  详细解决方案

查找源程序的错误

热度:155   发布时间:2006-07-30 16:27:02.0
查找源程序的错误

大家给看个源程序,不知错哪里了,是关于矩阵乘法的
因为第一个矩阵的列等于第二个矩阵的行才可相乘,故输入中只有a,b,c其中b既是第一矩阵的列也是第二矩阵的行


#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"

main()
{ int a,b,c,i,j,m,r;
float sn=0;
float *p,*p1,*e,*n;
float t=0;
printf("input hang a:");
scanf("%d",&a);
printf("input lie b:");
scanf("%d",&b);
printf("input another lie c:");
scanf("%d",&c);
p=(float*)malloc(a*b*sizeof(float));
p1=(float*)malloc(b*c*sizeof(float));
e=p;n=p1;
printf("input 1 array:");
for(i=0;i<a*b;i++)
{ scanf("%f",&t);
*(p+i)=t;

}
printf("input 2 array:");
for(i=0;i<b*c;i++)
{ scanf("%f",&t);
*(p1+i)=t;

}
for(i=0;i<a*b;i+=b)
{
for(m=0;m<c;m++)
{ for(j=0,r=0;j<b*c||r<b;j+=c,r++)
{p=p+i+r;
p1=p1+m+j;
sn=sn+(*p)*(*p1);
}printf("%f ",sn);
sn=0;p1=n;p=e;
} printf("\n");

}

}


----------------解决方案--------------------------------------------------------
顶一下啊自己
----------------解决方案--------------------------------------------------------

没发现`~编译了也没错啊 。。楼主说的是什么?


----------------解决方案--------------------------------------------------------

编译没有错误,但是运行结果有问题呀。
不知道是不是逻辑出错了~~


----------------解决方案--------------------------------------------------------
for(j=0,r=0;j<b*c||r<b;j+=c,r++)
||-->&&
另外,指针在偏移的时候也出现了问题
p=p+i+r;
p1=p1+m+j;
sn=sn+(*p)*(*p1);
}printf("%f ",sn);
sn=0;p1=n;p=e;

具体什么原因我没仔细看了。您的变量都是随机的字符,看起来很难被识别
数组的乘法用一维指针去做,是吃力不讨好的事情,楼主如果是为了练习指针,改为二维指针会轻松许多。
最后,申请的空间要记得free.
----------------解决方案--------------------------------------------------------

不加注释不要管他.

PS:你家买电脑了没?..不会在外面吧


----------------解决方案--------------------------------------------------------

咱都是工大的吧,您还是我学长呢!我福建的,在寝室上的.在外面还得了。


----------------解决方案--------------------------------------------------------

此程序要做任意两矩阵的乘法,二维数组分配空间是确定的,所以用一维了


----------------解决方案--------------------------------------------------------
有,现在不长上网
----------------解决方案--------------------------------------------------------
  相关解决方案