关于一个二维数组的问题。
#include<iostream.h>
#include<string.h>
void by(int *p,int *q,int *r,int m,int n,int k)
{
int i,j;
for(j=0;j<m*k;j++)
{
for(i=0;i<n;i++)
*(r+j)+=*(p+i)*(*(q+i*k));
}
if((j+1)%m==0)
cout<<*(r+j)<<endl;
else cout<<*(r+j)<<" ";
}
void main()
{
int a[2][3],b[3][4],c[2][4];
int i,j;
cout<<" 请输入一个数组:"<<endl;
for(j=0;j<2;j++)
{
for(i=0;i<3;i++)
cin>>a[i][j];
cout<<endl;
}
cout<<"请输入另一个数组:"<<endl;
for(j=0;j<3;j++)
{
for(i=0;i<4;i++)
cin>>b[i][j];
cout<<endl;
}
cout<<"数组相乘后的结果为: ";
by(a[0],b[0],c[0],2,3,4);
}
请高手帮忙看一下有什么错。
问题点数:50、回复次数:9Top
1 楼bideyore()回复于 2004-04-04 00:28:21 得分 5
呵呵,这句:cin>>b[i][j];变成cin>>b[j][i];
两句都是;Top
2 楼happlyman(广瑞)回复于 2004-04-04 00:38:46 得分 10
void by(int *p,int *q,int *r,int m,int n,int k)
{
int i,j;
for(j=0;j < m*k;j++)
{
for(i=0;i< n * 4;i++)
*(r+j)+=*(p+i)*(*(q+i*k)); /////??????
}
if((j+1)%m==0)
cout<<*(r+j)<<endl;
else cout<<*(r+j)<<" ";
}
void main()
{
int a[2][3],b[3][4],c[2][4];
int i,j;
cout<<" 请输入一个数组:"<<endl;
for(j=0;j<2;j++)
{
for(i=0;i<3;i++)
cin>>a[j][i]; //这里有问题,你用的是a[i][j],哪到哪去了
cout<<endl;
}
cout<<"请输入另一个数组:"<<endl;
for(j=0;j<3;j++)
{
for(i=0;i<4;i++)
cin>>b[i][j];
cout<<endl;
}
cout<<"数组相乘后的结果为: ";
by(a[0],b[0],c[0],2,3,4);
}
不明白你是怎么加的,两个大小不等的数组相加又把结果放到另一个大小的数组里,这这这太乱了,从新设计一下吧Top
3 楼rorot(rorot)回复于 2004-04-04 00:43:44 得分 5
^_^
楼主修改一下吧
Top
4 楼rorot(rorot)回复于 2004-04-04 00:58:02 得分 20
楼主用这个程序干什么?帮你改了
-----------------------------
#include<iostream.h>
#include<string.h>
void by(int *p,int *q,int *r,int m,int n,int k)
{
int i,j;
for(j=0;j<m*k;j++)
{
for(i=0;i<n;i++)
*(r+j)+=*(p+i)*(*(q+i*k));
}
if((j+1)%m==0)
cout<<*(r+j)<<endl;
else cout<<*(r+j)<<" ";
}
void main()
{
int a[2][3],b[3][4],c[2][4];
int i,j;
cout<<"请输入一个数组:"<<endl;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
cout << "a[" << i << "][" << j << "]: ";
cin>>a[i][j];
}
cout<<endl;
}
cout<<"请输入另一个数组:"<<endl;
for(i=0; i<3; i++)
{
for(j=0; j<4; j++)
{
cout << "b[" << i << "][" << j << "]: ";
cin >> b[i][j];
}
cout << endl;
}
cout<<"数组相乘后的结果为: ";
by(a[0],b[0],c[0],2,3,4);
}
Top
5 楼jiyuanjh(天涯)回复于 2004-04-04 09:08:10 得分 0
我想求一个2*3和一个3*4的矩阵的积,并把结果输入到C中,原来没有说清楚,不好意思啊,请大家帮个忙,有急用。分不够再加。Top
6 楼newegg2002(同志们,同胞们,大学的四年,是扎实基础的四年!!)回复于 2004-04-04 10:39:22 得分 0
不知道不用你这种算法行不?我觉得这种不好。。。Top
7 楼jiyuanjh(天涯)回复于 2004-04-04 10:52:32 得分 0
我现在知道这样不对,能不能提供一种算法。Top
8 楼newegg2002(同志们,同胞们,大学的四年,是扎实基础的四年!!)回复于 2004-04-04 12:09:07 得分 10
其实我想的。也就是用矩阵的乘法法则来计算。我在楼主的程序基础上改了一下。改动的比较大,请见谅,
#include<iostream.h>
void main()
{
int a[2][3],b[3][4],c[2][4];
cout<<" 请输入一个数组:"<<endl;
for(int r=0;r<2;r++)
{
for(int j=0;j<3;j++)
cin>>a[r][j];
cout<<endl;
}
cout<<"请输入另一个数组:"<<endl;
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
cin>>b[i][j];
cout<<endl;
}
for(int s=0;s<2;s++) //这里实现矩阵的乘法
for(int k=0;k<4;k++)
{
c[s][k]=0; //因为要存储c中的值,所以每次必须初始化为0;
for(int j=0;j<3;j++)
{
c[s][k]=c[s][k]+a[s][j]*b[j][k];
}
}
}
cout<<"数组相乘后的结果为: "<<endl;
for(int t=0;t<2;t++)
{
for(int j=0;j<4;j++)
{
cout<<c[t][j]<<ends;
if(j==3)
cout<<endl; //用来设定输出格式
}
}
cout<<endl;
}
也是大家常用的一个算法了,,可能不太符合楼主的需要,另外急于一时,程序写得也极也简陋,凑合着看吧。。
Top
9 楼jiyuanjh(天涯)回复于 2004-04-04 13:18:28 得分 0
谢谢大家的支持,我自己写了,大家提点意见
#include<iostream.h>
#include<string.h>
void by(int *p,int *q,int *r,int m,int n,int 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+i+n*g)**(q+h+e*k);
i++;
}
if((j+1)%k==0)
cout<<*(r+j)<<endl;
else cout<<*(r+j)<<" ";
i=0;
j++;
}
}
}
void main()
{
int a[2][3],b[3][4],c[2][4];
int i,j;
cout<<"请输入一个2*3的数组:"<<endl;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
cout << "a[" << i+1 << "][" << j+1 << "]: ";
cin>>a[i][j];
}
cout<<endl;
}
cout<<"请输入一个3*4的数组:"<<endl;
for(i=0; i<3; i++)
{
for(j=0; j<4; j++)
{
cout << "b[" << i+1 << "][" << j+1 << "]: ";
cin >> b[i][j];
}
cout << endl;
}
cout<<"数组相乘后的结果为: "<<endl;
by(a[0],b[0],c[0],2,3,4);
}
Top




