题目:求两个方阵A,B的乘积方阵product;
分析 product[i,j] 是A的第i行的元素与B的第j列的元素 逐个乘积作和。
即:
。
代码实现:
#include <stdio.h>
#include <math.h>
int *multiplyMatrixs(int *a, int *b, int *p, int n);
void printMatrixArray(int a[], int len);
int main(int argc, char *argv[]) {
int a[4] = {1, 1, 1, 1};
int b[4];
printMatrixArray(multiplyMatrixs(a, a, b, 2), 4);
printf("\n");
return 0;
}
void printMatrixArray(int a[], int len) {
int n = sqrt(len);
int row;
int col;
printf("[");
for(row = 0; row < n ; ++row) {
printf("\n ");
for(col = 0; col < n; ++col ) {
printf("%d, ", a[row * n + col]);
}
}
printf("\n]");
}
//n阶方阵 a, b的乘积 p
int *multiplyMatrixs(int *a, int *b, int *p, int n) {
int i;
int j;
int k;
for(i = 0; i < n; ++i) {
for(j = 0; j < n; ++j) {
p[i * n + j] = 0;
for(k = 0; k < n; ++k) {
p[i * n + j] += a[i * n + k] * b[k * n + j];
}
}
}
return p;
}
#include <stdio.h>
#include <math.h>
int *multiplyMatrixs(int *a, int *b, int *p, int n);
void printMatrixArray(int a[], int len);
int main(int argc, char *argv[]) {
int a[4] = {1, 1, 1, 1};
int b[4];
printMatrixArray(multiplyMatrixs(a, a, b, 2), 4);
printf("\n");
return 0;
}
void printMatrixArray(int a[], int len) {
int n = sqrt(len);
int row;
int col;
int base;
printf("[");
for(row = 0; row < n ; ++row) {
printf("\n ");
base = row * n;
for(col = 0; col < n; ++col ) {
printf("%d, ", a[base + col]);
}
}
printf("\n]");
}
//n阶方阵 a, b的乘积 p
int *multiplyMatrixs(int *a, int *b, int *p, int n) {
int i;
int j;
int k;
int base;
for(i = 0; i < n; ++i) {
for(j = 0; j < n; ++j) {
base = i * n;
p[base + j] = 0;
for(k = 0; k < n; ++k) {
p[base + j] += a[base + k] * b[k * n + j];
}
}
}
return p;
}