作者steve1012 (steve)
看板NTUBIME103HW
标题[C++ ] 上机考 矩阵相乘
时间Sat Dec 11 23:02:32 2010
我看了题目大部分都蛮简单的
比较难的应该是矩阵相乘 水仙花 sort吧
最後一个矩阵相乘有两种方法
一种是你就宣告11*11的矩阵
我就不多说了
我想说的是动态宣告的二维阵列
首先动态宣告的语法如下:
若我想要宣告一个M*L的阵列
则我这样做
int **arr1=new int[M];
for(int i=0;i<M;i++)
arr1[i]=new int [L];
然後再来是矩阵相乘的方法
设第一个矩阵是 M*L
二 L*N
三 M*N
(第三个矩阵拿来储存前两个矩阵相乘的结果)
以下是语法
for(int i=0;i<M;i++)
for(int j=0;j<N;j++)
for(int k=0;k<L;k++)
arr3[i][j]+=arr1[i][k]*arr2[k][j];
-------以下是部分程式码---------------------------
void multiply(int**,int**,int**,int,int,int)
void main()
{
//先宣告矩阵的宽度 前面有讲过第一个矩阵是M*L
//第二个 L*N 第三个 M*N
int M;
int N;
int L;
cin>>M>>N>>L;
//////////////////////////////
//以下动态宣告二维阵列//
int **arr1=new int *[M];
for(int i=0;i<M;i++)
arr1[i]=new int[L];
int **arr2=new int *[L];
for(int i=0;i<L;i++)
arr2[i]=new int[N];
int **arr3=new int *[M];
for(int i=0;i<M;i++)
arr3[i]=new int [N];
for(int i=0;i<M;i++)
////记得第三个阵列一定要归零 第三个阵列是存东西用的 要是没归零
//就要赌运气会部会出错了 有些compiler部会给初始直
for(int j=0;j<N;j++)
arr3[i][j]=0;
for(int i=0;i<M;i++)
for(int j=0;j<L;j++)
{
cout<<"请输入第一个阵列的第"<<i+1<<" "<<j+1<<"个元素"<<endl;
cin>>arr1[i][j];
}
for(int i=0;i<L;i++)
for(int j=0;j<N;j++)
{
cout<<"请输入第二个阵列的第"<<i+1<<" "<<j+1<<"个元素"<<endl;
cin>>arr2[i][j];
}
multiply(arr1,arr2,arr3,M,L,N);
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
cout<<arr3[i][j]<<" ";
cout<<endl;
}
return 0;
}
以上矩阵相乘
有问题可以找我debug
要是我心情不错的话
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.34.202.142
1F:→ steve1012:对了用完要记得delete才是乖宝宝喔 12/11 23:08
2F:推 wowsampo: 维峻神快拜!!!!! 看来要好好熟悉pointer了QQ 12/11 23:13