【C语言】二维数组的乘积
今天做到明解C语言-练习5-4,要求求两矩阵的乘积
二维数组求乘积举例
例1:2x3与3x2数组求乘积
例2:4x3与3x4数组求乘积
乘积过程:
a[i][k] *b[k][j] = c[i][j]
1.定义for循环三层
2.最外层和次外层的i,j取值范围取决于乘积后的数组大小
3.最内层的k取决于,两数组之间相同的部分
4.乘积的结果要进行求和
例1:2x3与3x2数组求乘积
#include <stdio.h> int main() { int i, j, k; int ma[2][3] = { {1, 2, 3}, {4, 5, 6} }; int mb[3][2] = { {1, 5}, {5, 3}, {8, 1} }; int mc[2][2] = { 0 }; /* 1 2 3 1 5 5 3 1+10+24(35) 5+6+3(14) 35 14 8 1 4+25+48(77) 20+15+6(41) 77 41 4 5 6 */ for (i = 0; i < 2; i++) { for (j = 0; j < 2; j++) { for (k = 0; k < 3; k++) { mc[i][j] += ma[i][k] * mb[k][j]; } } } for (i = 0; i < 2; i++) { for (j = 0; j < 2; j++) { printf("%3d", mc[i][j]); } putchar('\n'); } return 0; }
例2:4x3与3x4数组求乘积
#include <stdio.h> int main() { int i, j, k, x, y; int a[4][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}}; int b[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; int c[4][4]; for (i = 0; i < 4; i++) { //计算矩阵c的值 for (j = 0; j < 4; j++) { c[i][j] = 0; for (k = 0; k < 3; k++) { c[i][j] += a[i][k] * b[k][j]; } } } for (x = 0; x < 4; x++) { for (y = 0; y < 4; y++) printf("%d\t", c[x][y]); printf("\n"); } return 0; }