矩阵相乘的问题。
#include<iostream.h>
void by(int*,int*,int,int,int);
void main()
{
int a,b,c,*p,*q;
cout<<"请输入前一个矩阵的行数:"<<endl;
cin>>a;
cout<<"请输入前一个矩阵的列数:"<<endl;
cin>>b;
cout<<"请输入后一个矩阵的列数:"<<endl;
cin>>c;
p=new int[a*b];
q=new int[b*c];
int i,j;
cout<<"请输入第一个矩阵的值:"<<endl;
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{
cout<<"p["<<i+1<<"]["<<j+1<<"]=";
cin>>p[i*a+j];
}
cout<<"请输入第二个矩阵的值:"<<endl;
for(i=0;i<b;i++)
for(j=0;j<c;j++)
{
cout<<"q["<<i+1<<"]["<<j+1<<"]=";
cin>>q[i*b+j];
}
by(p,q,a,b,c);
}
void by(int *p,int *q,int m,int n,int k)
{
int *r=new int[m*k];
int i=0,j=0,h,g,e;
for(g=0;g<m;g++)
{
for(h=0;h<k;h++)
{
*(r+j)=0;
for(e=0;e<n;e++)
{
*(r+j)+=*(p+e+n*g)**(q+h+e*k);
}
if((j+1)%k==0)
cout<<*(r+j)<<endl;
else cout<<*(r+j)<<" ";
i=0;
j++;
}
}
}
不明白程序有错在哪里?
问题点数:0、回复次数:4Top
1 楼sdhls(凌凌叁)回复于 2004-05-04 16:17:49 得分 0
没错呀
不过忘了delete []p;
delete []q;Top
2 楼newegg2002(同志们,同胞们,大学的四年,是扎实基础的四年!!)回复于 2004-05-04 17:18:40 得分 0
在网吧小待会儿..没有编译器,,不过我作过一个利用三重循环实现的例子..大概算法是这样的:
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
Array_c[i][k]=0;
for(k=0;k<c;k++)
{
Array_c[i][k]=Array_c[i][k]+Array_a[i][j]*Array_b[j][k];
}
}
}
大概是这个样子了.Top
3 楼cngdzhang()回复于 2004-05-04 17:26:50 得分 0
cin>>p[i*a+j];
应该是
cin>>p[i*b+j];
cin>>q[i*b+j];
应该是
cin>>q[i*c+j];
这是由你的循环决定的
for(i=0;i<a;i++)
for(j=0;j<b;j++) //内循环是b次
{
cout<<"p["<<i+1<<"]["<<j+1<<"]=";
cin>>p[i*a+j]; //所以这里有问题,应该是cin>>p[i*b+j];
}
Top
4 楼cngdzhang()回复于 2004-05-04 17:28:03 得分 0
你可以打印一下你输入的矩阵就知道了:)
输入时有问题
Top




