难题征解!!仅用指针实现两个矩阵的乘法运算

runus 2001-06-04 08:08:00
两个矩阵A(4*2)==(1,2,3,4,5,6)、B(2*4)==(7,8,9,10,11,12),请高手指教仅用指针实现两个矩阵的乘法。感激不尽。
手工计算答案是(2*2)==(58,64,139,154)。
...全文
774 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mylovett 2001-06-06
  • 打赏
  • 举报
回复
runus 2001-06-05
  • 打赏
  • 举报
回复
哪个高手愿意回答我?救命啊!!!
A_KID 2001-06-05
  • 打赏
  • 举报
回复
大哥,不会吧!
4*2矩阵乘2*4的矩阵,得出2*2的矩阵?
虽然我线代课没去过几节,但这种常识性总是我还是懂的
应该是(4*2)*(2*4)=(4*4)才对
真让我怀疑你会不会矩阵乘法

我写了一个函数,用来计算乘出来后的矩阵特定位置的值
int compute_xy(int x,int y,int *a,int *b,int i,int j)
{
int n=0;
int buf=0;
int *p1,*p2;
p1=a; p2=b;
p1+=j*(x-1); p2+=(y-1);
for(n=0;n<j;n++) {
buf+=(*p1)*(*p2);
p1++;
p2+=i;
}
return buf;
}
X,Y是乘出来后X行Y列的值
i,j是乘式中左边矩阵的行和列
a,b是存矩阵的数组其中a为乘式中左边矩阵b为右边
矩阵保存按以下规则:
eg:
(3*2)就表示为:
a[]={1,1,1,2,2,2};
即:先写第一行,再写第二行,第三行……

在TC下测试通过
这种方法算法上是蠢了一点不过应该较易理解

有了这个函数要实现矩阵乘法就很简单了
没时间写说明了,自己慢慢看吧,应该很好懂的

看在我这么用心份上,也该给点分吧
花了我半个多小时,本来想背英语的
过几天就考试了,我可是一个学期没学英语了
我可以说是冒着生命危险帮你写这个东东的哦
A_KID 2001-06-05
  • 打赏
  • 举报
回复
再送你个测试程序
int compute_xy(int x,int y,int *a,int *b,int i,int j);


main()
{
int i=3,j=2;
int result;
int a[6]={1,2,3,4,5,6};
int b[6]={1,2,3,4,5,6};
result=compute_xy(3,3,a,b,i,j);
printf("%d\n",result);
}
runus 2001-06-05
  • 打赏
  • 举报
回复
用数组写还叫难题么?写完以后再改成指针有什么意义?
我希望会有个能把指针玩得很溜的人解出来。
Muf 2001-06-05
  • 打赏
  • 举报
回复
你直接用数组来写,然后再按我上面的贴子改成指针。
runus 2001-06-05
  • 打赏
  • 举报
回复
大侠我错了,那大家就算2*3各3*2的矩阵乘法吧。
风中老长 2001-06-05
  • 打赏
  • 举报
回复
9494,我还没看懂你的题,2*4应该是8个数吧?
ed9er 2001-06-05
  • 打赏
  • 举报
回复
怎么2 X 4和4 X 2的矩阵都只有六个元素?
runus 2001-06-04
  • 打赏
  • 举报
回复
我的意思是不用数组的下标来操作,而是通过指针的运算来解答。就像仅仅使用指针实现矩阵的转置一样。
ksxy 2001-06-04
  • 打赏
  • 举报
回复
我猜他的意思是用指针操作数组……
Muf 2001-06-04
  • 打赏
  • 举报
回复
数组就是指针,指针就是数组.

A[0][1] 相当于 *(a[0]+1) 相当于*(a+1)
A[2][3] 相当于 *(a[2]+3) 相当于 *(a+4*2+3)
ksxy 2001-06-04
  • 打赏
  • 举报
回复
根据数组在内存的储存方法进行指针操作。一个指针横向移动,一步一步增值,另一个竖向移动,然后再到下一列。
duz 2001-06-04
  • 打赏
  • 举报
回复
开玩笑!
只许用指针?连加减乘除也不能用?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧