C语言实现的矩阵乘法运算器
需求
编写程序模拟矩阵乘法,一个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矩阵不一定是方阵(即行数和列数相等),因此在申请动态数组时需要定义两个参数,分别控制行、列的长度,否则运行时会出现数组越界的报错。
-----------------------------------------华丽丽的分割线---------------------------------代码君要出场了-----------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h> void product_matrix(int m, int n);
void dynamic_arr(int*** arr, int m, int n);
void input_arr(int*** arr, int m, int n);
void free_arr(int*** arr, int x); int main()
{
int m, n; printf("请输入m,n:\n");
scanf("%d,%d", &m, &n);
product_matrix(m, n); return ;
} void product_matrix(int m, int n)
{
int i, x, y, sum;
int** arr_a;
int** arr_b;
int** arr_res; input_arr(&arr_a, m, n);
input_arr(&arr_b, n, m);
dynamic_arr(&arr_res, m, m); printf("矩阵相乘的结果为:\n");
for(x = ; x < m; x++)
{
for(y = ; y < m; y++)
{
sum = ;
for(i = ; i < n; i++)
{
sum = sum + arr_a[x][i] * arr_b[i][y];
}
arr_res[x][y] = sum;
printf("%5d", arr_res[x][y]);
}
printf("\n");
} free_arr(&arr_a, m);
free_arr(&arr_b, n);
free_arr(&arr_res, m);
} void dynamic_arr(int*** arr, int m, int n) //申请动态数组
{
int i;
*arr = (int **)malloc(sizeof(int *) * m); for(i = ; i < m; i++)
{
(*arr)[i] = (int *)malloc(sizeof(int) * n);
memset((*arr)[i], , sizeof(int) * n);
}
} void input_arr(int*** arr, int m, int n) //输入数组
{
int i, j; dynamic_arr(arr, m, n); printf("请输入%d个整数:\n", m * n);
for(i = ; i < m; i++)
{
for(j = ; j < n; j++)
scanf("%d", &(*arr)[i][j]);
} printf("输出数组:\n");
for(i = ; i < m; i++)
{
for(j = ; j < n; j++)
printf("%5d", (*arr)[i][j]);
printf("\n");
}
printf("\n");
} void free_arr(int*** arr, int x) //释放占用的内存
{
int i; for(i = ; i < x; i++)
{
free((*arr)[i]);
(*arr)[i] = ;
} free(*arr);
*arr = ;
}
欢迎转载,请备注原始连接http://www.cnblogs.com/liuliuliu/p/3757714.html,并注明转载。
作者bibibi_liuliu,联系方式395985239@qq.com
C语言实现的矩阵乘法运算器的更多相关文章
- 矩阵乘法C语言实现
/* 矩阵乘法C语言实现 Slyar 2009.3.20 */ #include <stdio.h> #include <stdlib.h> /* 给 int 类型定义 ...
- [转]OpenBLAS项目与矩阵乘法优化
课程内容 OpenBLAS项目介绍 矩阵乘法优化算法 一步步调优实现 以下为公开课完整视频,共64分钟: 以下为公开课内容的文字及 PPT 整理. 雷锋网的朋友们大家好,我是张先轶,今天主要介绍一下我 ...
- 【bzoj4870】[Shoi2017]组合数问题 dp+快速幂/矩阵乘法
题目描述 输入 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 输出 一行一个整数 ...
- WUSTOJ 1232: 矩阵乘法(C)
1232: 矩阵乘法 Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld Description 小明明正在学习线性代数,老师布置 ...
- Java实现 蓝桥杯 算法提高 矩阵乘法(暴力)
试题 算法提高 矩阵乘法 问题描述 小明最近刚刚学习了矩阵乘法,但是他计算的速度太慢,于是他希望你能帮他写一个矩阵乘法的运算器. 输入格式 输入的第一行包含三个正整数N,M,K,表示一个NM的矩阵乘以 ...
- CUDA 矩阵乘法终极优化指南
作者:马骏 | 旷视 MegEngine 架构师 前言 单精度矩阵乘法(SGEMM)几乎是每一位学习 CUDA 的同学绕不开的案例,这个经典的计算密集型案例可以很好地展示 GPU 编程中常用的优化技巧 ...
- *HDU2254 矩阵乘法
奥运 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...
- *HDU 1757 矩阵乘法
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- CH Round #30 摆花[矩阵乘法]
摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...
随机推荐
- iOS 性能监测
给些链接: http://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ%3D%3D&idx=1&mid=207890859&scene=23& ...
- 安装vmware虚拟机和linux(centos)
打开 WMware Workstation 8,然后选择新建虚拟机 2 新建虚拟机向导 选择 自定义(高级)(C)然后点击[下一步]按钮 3 选择虚拟机硬件兼容性 选择 workstation 8.0 ...
- hive + hadoop 环境搭建
机器规划: 主机 ip 进程 hadoop1 10.183.225.158 hive server hadoop2 10.183.225.166 hive client 前置条建: kerberos部 ...
- vs LNK2019 无法解析的外部符号 ***,该符号在函数 WinMain 中被引用
一般链接错误都是因为包含头文件与lib库不匹配(无导出函数.lib库的release debug版本混乱.库引用的优先级.编译器设置mt/mtd等等)造成的. 错误 LNK2019 无法解 ...
- linux及安全第二周总结——20135227黄晓妍
实验部分: 首先运行结果截图 代码分析: Mypcb.h /* * linux/mykernel/mypcb.h * * Kernel internal PCB types * * Copyri ...
- mybatis关联配置(一对多配置)
敲代码也有不少日子了,今天碰到个需求,就是定时器生成一张表,但是这个表的某些数据是从另外两张表中拿到的,定外两张表又是一对多的关系,想着咋在一个接口就能敲出来,大概结构如下 然后需要a表的数据(比如张 ...
- $(document).ready(function(){})和$(window).load(function(){})的区别
页面加载完成有两种状态: 1.Ready:表示文档结构已经加载完成,不包含图片等非文字媒体文件,在Dom节点创建完成后执行,如果有多个定义则依次执行 $(document).ready(functio ...
- JavaScript 数据类型小结
数据类型对于机器而言,其意义在于更加合理的分配内存空间,而对于编程者而言,数据类型提供了我们相对应的一系列方法,对数据进行分析与处理. 在本文中,将对JavaScript数据类型的基础知识进行总结,全 ...
- windows,交换机syslog收集
window2008 使用了 windows evtsys_x64 https://download.csdn.net/download/chen_yi_ping/10046676 配置 http ...
- Docker pull网络错误
[root@Oracle ~]# docker search centos Error response from daemon: Get https://index.docker.io/v1/sea ...