3阶矩阵的乘法
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
c-source:
1 #include<stdio.h> 2 #define M 3 3 #define N 3 4 void main() 5 { 6 int t[M][N],b[M][N]; 7 int n; 8 9 printf("The number of n: "); 10 scanf("%d",&n); 11 12 13 int **answer=new int *[n]; 14 for(int i=0;i<n;i++) 15 answer[i] = new int[9]; 16 17 for(int q1=0;q1<n;q1++) 18 for(int q2=0;q2<9;q2++) 19 answer[q1][q2]=0; 20 21 for(int k=0;k<n;k++) 22 { 23 for(int i1=0;i1<M;i1++) 24 for(int j5=0;j5<N;j5++) 25 scanf("%d",&t[i1][j5]); 26 27 28 for(int i2=0;i2<M;i2++) 29 for(int j2=0;j2<N;j2++) 30 scanf("%d",&b[i2][j2]); 31 32 printf(" "); 33 34 for(int i3=0;i3<M;i3++) 35 for(int j3=0;j3<N;j3++) 36 { 37 for(int q=0;q<M;q++) 38 { 39 answer[k][i3*M+j3]+=t[i3][q]*b[q][j3]; 40 } 41 } 42 } 43 44 for(int p=0;p<n;p++) 45 { 46 for(int j4=0;j4<9;j4++) 47 { 48 if(j4%3==0) 49 printf(" "); 50 printf("%d ",answer[p][j4]); 51 } 52 printf(" "); 53 } 54 55 for(i=0;i<n;++i) 56 delete[] answer[i]; 57 delete[] answer; 58 }
知识点:
⒈new二维数组M*N;
1 int **a=new int *[M]; 2 for(int i=0;i<M;i++) 3 a[i]=new int[N];
⒉动态分配必须由程序自行释放空间:
for(int j=0;j<M;j++) delete[] a[j]; delete [] a;
M*P与P*N维矩阵相乘的问题:
1 for(int i=0;i<M;i++) 2 for(int j=0;j<N;j++) 3 { 4 for(int k=0;k<p;k++) 5 answer[i][j]+=a[i][k]*a[k][j]; 6 } 7