C和指针之数组编程练习5 (矩阵相乘)
来源:互联网 发布:大数据平台数据传输 编辑:程序博客网 时间:2024/05/22 11:56
1、问题
5.如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C。这个矩阵的每个元素是由下面的公式决定的:
例如:
例如:
结果矩阵中14这个值是通过2×-2加上-6×-3得到的,编写一个函数,用于执行两个矩阵的乘法。函数的原型如下:
void matrix_multiply(int *m1, int *m2, int *r, int x, int y, int z);m1是一个x行y列的矩阵,m2是一个y行z列的矩阵,这两个矩阵应该相乘,结果存储于r中,它是一个x行z列的矩阵。记住,你应该对公式做些修改,以适应C语言下标从0而不是从1开始这个事实!
2、代码实现
因为这里传递的参数是
int *m1, int *m2, int *r, int x, int y, into
我这里还用传递数组指针来实现这个函数
void matrix_multiply1(int (*m1)[2], int (*m2)[4], int (*r)[4], int x, int y, int z)
#include <stdio.h>void matrix_multiply(int *m1, int *m2, int *r, int x, int y, int z){ int i, j, k; for (i = 0; i < x; ++i) { for (j = 0; j < z; ++j) { //p1表示第一个矩阵的行 int *p1 = m1 + i * y; //p2表示第二个矩阵的列 int *p2 = m2 + j; for (k = 0; k < y; ++k) { *r += *p1 * *p2; if (k < y -1) { //行向右移动 ++p1; //列向下移动 p2 += z; } } ++r; } }}void matrix_multiply1(int (*m1)[2], int (*m2)[4], int (*r)[4], int x, int y, int z){ int i, j, k; int temp; for (i = 0; i < x; i++) { for (j = 0; j < z; j++) { temp = 0; for (k = 0; k < y; k++) { temp += *(*(m1 + i) + k) * *(*(m2 + k) + j); } *(*(r + i) + j) = temp; printf("%d\t", *(*(r + i) + j)); } printf("\n"); }}int main(){ int m1[3][2] = {{2, -6}, {3, 5}, {1, -1}}; int m2[2][4] = {{4, -2, -4, -5}, {-7, -3, 6, 7}}; int r[3][4] = {0}; matrix_multiply(m1,m2,r,3,2,4); for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) printf("%d\t", r[i][j]); printf("\n"); } printf("*****\n"); int r1[3][4] = {0}; matrix_multiply1(m1,m2,r1,3,2,4); return 0;}
3、运行结果
1111deMacBook-Pro:dabian a1111$ vim matrix_multiply.c1111deMacBook-Pro:dabian a1111$ gcc -g -w matrix_multiply.c -o matrix_multiply1111deMacBook-Pro:dabian a1111$ ./matrix_multiply5014-44-52-23-211820111-10-12*****5014-44-52-23-211820111-10-12
阅读全文
0 0
- C和指针之数组编程练习5 (矩阵相乘)
- C和指针之数组编程练习3(判断矩阵是否为单位矩阵)
- C和指针之数组之编程练习2
- C编程:矩阵相乘
- C和指针之数组编程练习8(8皇后问题)
- C语言编程(练习1:数组和指针)
- C语言编程(练习2:数组和指针)
- C和指针-编程练习
- C语言编程(练习5:数组与指针)
- C和指针之字符串编程练习1
- C和指针之字符串编程练习6
- C和指针之字符串编程练习3
- C与指针 五 矩阵相乘
- Java基本功练习九(多维数组强化一[五子棋、九个正面和背面、矩阵相乘])
- C专家编程学习之第四章 数组和指针
- C和指针第四章编程练习
- C和指针第二章编程练习
- C和指针第一章编程练习
- 裸机实验体验之usb启动配合dnw工具下载
- C++学习笔记
- 个人总结34
- 约瑟夫环(Josephuse)
- Git&&GitHub【速成】-(6)-Git之发现优秀开源项目
- C和指针之数组编程练习5 (矩阵相乘)
- 76. Minimum Window Substring
- 九九乘法表
- 31. Next Permutation
- iOS GIF合成有透明通道图片重叠问题
- phpcms二次开发流程
- 阿里云海外服务器80端口无法启动
- 如何像 NASA 顶级程序员一样编程 — 10 条重要原则(转载)
- filepath = XmlUtils.class.getClassLoader().getResource("users.xml").getPath();无法处理空格( )