c语言 算矩阵乘法代码,C语言实现的矩阵乘法运算器

本文介绍了如何使用C语言编写程序来模拟矩阵乘法,通过动态数组处理不同大小的矩阵输入,详细步骤包括矩阵乘法规则、动态数组申请与释放、手动输入矩阵和输出结果。重点讲解了如何处理非方阵矩阵的乘法和内存管理技巧。
摘要由CSDN通过智能技术生成

需求

编写程序模拟矩阵乘法,一个m*n的矩阵,乘以一个 n*m 的矩阵,

并且输出结果。

STEP 1  矩阵乘法的计算

一个m行n列的矩阵与一个n行p列的矩阵可以相乘,得到的结果是一个m行p列的矩阵。

其中乘积矩阵的第i行第j列位置上的数,为第一个矩阵第i行上的n个数与第二个矩阵第j列上的n个数对应相乘后所得的n个乘积之和。

STEP 2  编程思路

(1)需申请动态二维数组存储两个参与运算的矩阵以及一个结果矩阵;

(2)手动输入两个参与运算的矩阵;

(3)调用函数实习矩阵乘法的计算 并输出结果;

(4)释放动态数组占用的内存。

STEP 3  要点整理

(1)参与运算的矩阵为手动输入数据,无法预先知道二维数组的大小,所以需申请动态数组;

(2)因为m*n矩阵和n*m矩阵不一定是方阵(即行数和列数相等),因此在申请动态数组时需要定义两个参数,分别控制行、列的长度,否则运行时会出现数组越界的报错。

-----------------------------------------华丽丽的分割线---------------------------------代码君要出场了-----------------------------------

d890c7d16e7fc8d8419a7a312e03d732.gif1 #include

2 #include

3 #include

4

5 void product_matrix(int m, int n);

6 void dynamic_arr(int*** arr, int m, int n);

7 void input_arr(int*** arr, int m, int n);

8 void free_arr(int*** arr, int x);

9

10 int main()

11 {

12 int m, n;

13

14 printf("请输入m,n:\n");

15 scanf("%d,%d", &m, &n);

16 product_matrix(m, n);

17

18 return 0;

19 }

20

21 void product_matrix(int m, int n)

22 {

23 int i, x, y, sum;

24 int** arr_a;

25 int** arr_b;

26 int** arr_res;

27

28 input_arr(&arr_a, m, n);

29 input_arr(&arr_b, n, m);

30 dynamic_arr(&arr_res, m, m);

31

32 printf("矩阵相乘的结果为:\n");

33 for(x = 0; x < m; x++)

34 {

35 for(y = 0; y < m; y++)

36 {

37 sum = 0;

38 for(i = 0; i < n; i++)

39 {

40 sum = sum + arr_a[x][i] * arr_b[i][y];

41 }

42 arr_res[x][y] = sum;

43 printf("%5d", arr_res[x][y]);

44 }

45 printf("\n");

46 }

47

48 free_arr(&arr_a, m);

49 free_arr(&arr_b, n);

50 free_arr(&arr_res, m);

51 }

52

53 void dynamic_arr(int*** arr, int m, int n) //申请动态数组

54 {

55 int i;

56 *arr = (int **)malloc(sizeof(int *) * m);

57

58 for(i = 0; i < m; i++)

59 {

60 (*arr)[i] = (int *)malloc(sizeof(int) * n);

61 memset((*arr)[i], 0, sizeof(int) * n);

62 }

63 }

64

65 void input_arr(int*** arr, int m, int n) //输入数组

66 {

67 int i, j;

68

69 dynamic_arr(arr, m, n);

70

71 printf("请输入%d个整数:\n", m * n);

72 for(i = 0; i < m; i++)

73 {

74 for(j = 0; j < n; j++)

75 scanf("%d", &(*arr)[i][j]);

76 }

77

78 printf("输出数组:\n");

79 for(i = 0; i < m; i++)

80 {

81 for(j = 0; j < n; j++)

82 printf("%5d", (*arr)[i][j]);

83 printf("\n");

84 }

85 printf("\n");

86 }

87

88 void free_arr(int*** arr, int x) //释放占用的内存

89 {

90 int i;

91

92 for(i = 0; i < x; i++)

93 {

94 free((*arr)[i]);

95 (*arr)[i] = 0;

96 }

97

98 free(*arr);

99 *arr = 0;

100 }

d890c7d16e7fc8d8419a7a312e03d732.gif

C语言实现的矩阵乘法运算器

时间: 05-27

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值