用rand() 抽取100个0-100之间的伪随机数整数,构成一个4*25的矩阵A,设置种子数为1,即用srand(1); 再抽取100个0-100之间的伪随机数整数,构成一个4*25的矩阵B,设置种子数为1000。 然后计算A乘B的转置,即A*B’。请用指针方法。
时间: 2024-03-03 15:47:48 浏览: 109
下面是一种可能的实现方式:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 4
#define COL 25
void init_matrix(int *matrix, int seed) {
srand(seed);
for (int i = 0; i < ROW * COL; i++) {
matrix[i] = rand() % 101;
}
}
void print_matrix(int *matrix) {
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
printf("%d ", *(matrix + i * COL + j));
}
printf("\n");
}
}
void matrix_transpose(int *matrix, int *result) {
for (int i = 0; i < COL; i++) {
for (int j = 0; j < ROW; j++) {
*(result + i * ROW + j) = *(matrix + j * COL + i);
}
}
}
void matrix_multiply(int *matrix1, int *matrix2, int *result) {
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < ROW; j++) {
int sum = 0;
for (int k = 0; k < COL; k++) {
sum += (*(matrix1 + i * COL + k)) * (*(matrix2 + j * COL + k));
}
*(result + i * ROW + j) = sum;
}
}
}
int main() {
int seed1 = 1, seed2 = 1000;
int matrix_a[ROW][COL], matrix_b[ROW][COL], result[ROW][ROW];
init_matrix(&matrix_a[0][0], seed1);
init_matrix(&matrix_b[0][0], seed2);
printf("Matrix A:\n");
print_matrix(&matrix_a[0][0]);
printf("\nMatrix B:\n");
print_matrix(&matrix_b[0][0]);
matrix_multiply(&matrix_a[0][0], &matrix_b[0][0], &result[0][0]);
printf("\nResult:\n");
matrix_transpose(&result[0][0], &result[0][0]);
print_matrix(&result[0][0]);
return 0;
}
```
在这个程序中,我们首先定义了常量 `ROW` 和 `COL`,分别表示矩阵的行数和列数。然后,我们使用 `init_matrix()` 函数初始化了两个矩阵 A 和 B,并使用 `print_matrix()` 函数打印了它们。
接下来,我们使用 `matrix_multiply()` 函数计算了矩阵 A 和 B 的乘积,结果保存在 `result` 数组中。注意,我们使用了三层循环来实现矩阵乘法。
最后,我们使用 `matrix_transpose()` 函数将 `result` 数组转置,并使用 `print_matrix()` 函数打印了最终结果。
需要注意的是,因为我们使用了指针来表示矩阵,所以在函数调用时需要传入指向数组首元素的指针。因此,调用函数时使用的数组名应该是 `&matrix[0][0]` 而不是 `matrix`。
阅读全文