今天做数组这一章的练习,题目要求做两个矩阵相乘,要求的函数原型是这样的:
matrix_multiply( int *m1, int *m2, register int *r,
int x, int y, int z )
但是我觉得传给函数的是个矩阵,是多维数组,用*m1 *m2这样的指针不行吧,需要用指向数组的指针吧,于是做了个最原始的实现,嘿嘿:
[root@bjxdurs235 20090719]# cat -n matrix_mutiply.c
1 #include
2 #define X 3
3 #define Y 2
4 #define Z 4
5
6 void matrix_multiply( int (*m1)[Y], int (*m2)[Z], int (*r)[Z], int x, int y, int z )
7 {
8 int i,j,k;
9 for ( i = 0; i < x; i++ )
10 {
11 for ( j = 0; j < z; j++ )
12 {
13 r[i][j] = 0;
14 for ( k = 0; k < y; k++ )
15 {
16 r[i][j] += m1[i][k] * m2[k][j];
17 }
18
19 }
20
21 }
22
23 }
24
25 int main(void)
26 {
27 int i,j;
28 int A[X][Y] = { 2,-16,3,5,1,-1 };
29 int B[Y][Z] = {
30 {4,-2,-4,-5},
31 {-7,-3,6,7}
32 };
33 int multiply_result[X][Z];
34 //matrix_multiply(A[X][Y],B[Y][Z],multiply_result[X][Z],X,Y,Z);
35 matrix_multiply(A,B,multiply_result,X,Y,Z);
36
37 for ( i = 0; i < X; i++ )
38 {
39 for ( j = 0; j < Z; j++ )
40 {
41 printf("%d\t",multiply_result[i][j]);
42 }
43 printf("\n");
44 }
45
46 }
[root@bjxdurs235 20090719]# ./a.out
120 44 -104 -122
-23 -21 18 20
11 1 -10 -12
总结一下:
今天看的是数组这一章,看了两遍,还是很有收获的,对于指向数组的指针,指针数组,都了解了,这个小程序虽然实现的简单,但是接触的是给函数传递多维数组的方法,按书上写的。
答案里用指针实现的,我也看了,但是就是不理解main里面怎么调啊,传的可是多维啊,晕。。。
阅读(581) | 评论(0) | 转发(0) |