1、矩阵的四则运算
1.1 矩阵的乘法运算
void Matrix_Mul(char *Matrix_1, int Matrix_1_h, int Matrix_1_l, char *Matrix_2, int Matrix_2_h, int Matrix_2_l)
{
if (Matrix_1_h != Matrix_2_l || Matrix_1_l != Matrix_2_l){
printf("矩阵1的行列必须等于矩阵2的列行");
return;
}
char *Matrix = (char *)calloc(1, Matrix_1_h * Matrix_2_l);
char i, j, k;
for (i = 0; i < Matrix_1_h; i++){
for (j = 0; j < Matrix_2_l; j++){
for (k = 0; k < Matrix_1_l; k++){
*(Matrix + i * Matrix_2_l + j) += *(Matrix_1 + i * Matrix_1_l + k) * (*(Matrix_2 + k * Matrix_2_l + j));
}
printf("%2d ", *(Matrix + i * Matrix_2_l + j));
}
putchar('\n');
}
free(Matrix);
}
1.2矩阵的加法运算
void Matrix_Add(char *Matrix_1, int Matrix_1_h, int Matrix_1_l, char *Matrix_2, int Matrix_2_h, int Matrix_2_l)
{
if (Matrix_1_h != Matrix_2_h || Matrix_1_l != Matrix_2_l){
printf("矩阵2的行列必须等于矩阵2的行列");
return;
}
char *Matrix = (char *)calloc(1, Matrix_1_h * Matrix_1_l);
for (int i = 0; i < Matrix_1_h; i++){
for (int j = 0; j < Matrix_1_l; j++){
*(Matrix + i * Matrix_1_h + j) = *(Matrix_1 + i * Matrix_1_l + j) + *(Matrix_2 + i * Matrix_2_l + j);
printf("%2d ", *(Matrix + i * Matrix_1_l + j));
}
putchar('\n');
}
free(Matrix);
}
1.3矩阵的减法运算
void Matrix_Sub(char *Matrix_1, int Matrix_1_h, int Matrix_1_l, char *Matrix_2, int Matrix_2_h, int Matrix_2_l)
{
if (Matrix_1_h != Matrix_2_h || Matrix_1_l != Matrix_2_l){
printf("矩阵2的行列必须等于矩阵2的行列");
return;
}
char *Matrix = (char *)calloc(1, Matrix_1_h * Matrix_1_l);
for (int i = 0; i < Matrix_1_h; i++){
for (int j = 0; j < Matrix_1_l; j++){
*(Matrix + i * Matrix_1_l + j) = *(Matrix_1 + i * Matrix_1_l + j) - *(Matrix_2 + i * Matrix_2_l + j);
printf("%2d ", *(Matrix + i * Matrix_1_l + j));
}
putchar('\n');
}
free(Matrix);
}
2、接口测试
#define MATRIX_1_H 3
#define MATRIX_1_L 3
#define MATRIX_2_H 3
#define MATRIX_2_L 3
int main(){
int i, j;
char *Matrix_1 = (char *)calloc(1, MATRIX_1_H * MATRIX_1_L);
for (i = 0; i < MATRIX_1_H; i++)
{
for (j = 0; j < MATRIX_1_L; j++){
*(Matrix_1 + i * MATRIX_1_L + j) = i * MATRIX_1_L + j;
printf("%2d ", *(Matrix_1 + i * MATRIX_1_L + j));
}
putchar('\n');
}
char *Matrix_2 = (char *)calloc(1, MATRIX_2_H * MATRIX_2_L);
for (i = 0; i < MATRIX_2_H; i++)
{
for (j = 0; j < MATRIX_2_L; j++){
*(Matrix_2 + i * MATRIX_2_L + j) = i * MATRIX_2_L + j;
printf("%2d ", *(Matrix_1 + i * MATRIX_2_L + j));
}
putchar('\n');
}
Matrix_Mul(Matrix_1, MATRIX_2_H, MATRIX_2_L, Matrix_2, MATRIX_2_H, MATRIX_2_L);
Matrix_Sub(Matrix_1, MATRIX_1_H, MATRIX_1_L, Matrix_2, MATRIX_2_H, MATRIX_2_L);
Matrix_Add(Matrix_1, MATRIX_1_H, MATRIX_1_L, Matrix_2, MATRIX_2_H, MATRIX_2_L);
free(Matrix_1);
free(Matrix_2);
getchar();
return 0;
}
输出结果
Matrix_1
0 1 2
3 4 5
6 7 8
Matrix_1
0 1 2
3 4 5
6 7 8
乘法结果
15 18 21
42 54 66
69 90 111
减法结果
0 0 0
0 0 0
0 0 0
加法结果
0 2 4
6 8 10
12 14 16