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个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...
随机推荐
- DNS原理浅析
DNS概念 DNS (Domain Name System 的缩写)的作用非常简单,就是根据域名查出IP地址.你可以把它想象成一本巨大的电话本. 查询过程 dig命令: 虽然DNS作用非常简单,但是查 ...
- Python面试题之Python中应该使用%还是format来格式化字符串?
Python中格式化字符串目前有两种阵营:%和format,我们应该选择哪种呢? 自从Python2.6引入了format这个格式化字符串的方法之后,我认为%还是format这根本就不算个问题.不信你 ...
- web worker 的传值方式以及耗时对比
背景 前一阵子开发的项目 pptx 导入, 由于自己的代码问题,引起了个性能问题,一个 40p 的 pptx 文件,转换成 json 数据,大概要耗时 60s+ ,虽然后面发现是某个使用频率非常高的函 ...
- servlet类与Spring Controller类的关系
以前的java web项目,需要在web.xml中定义servlet,对应不同的请求,而在spring项目中,我们用controller定义了各种各样的servlet(当然不包括DispatcherS ...
- sqlx基础语法与应用
基础: ``` 引用:_ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" ``` 初始化 ...
- 20145301《Java程序设计》第10周学习总结
20145301 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据 计算机网络 路由器和交换机组成了核心的计算机 ...
- 20145314郑凯杰 《Java程序设计》实验三 敏捷开发与XP实践实验报告
20145314郑凯杰 <Java程序设计>实验二 实验报告 实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用 ...
- 20145322何志威 《Java程序设计》第8周学习总结
教材学习内容总结 第十四章 NIO使用频道(channel)来衔接数据节点,对数据区的标记提供了clear(),rewind(),flip(),compact()等高级操作. 想要取得channel的 ...
- [CF911F]Tree Destruction
题意翻译 给你一棵树,每次挑选这棵树的两个叶子,加上他们之间的边数(距离),然后将其中一个点去掉,问你边数(距离)之和最大可以是多少. 首先我们知道,到一个点距离最远的点是直径的端点.考虑贪心,如果我 ...
- 混合开发的大趋势之一React Native之简单的登录界面
转载请注明出处:王亟亟的大牛之路 这些天都在学习RN这部分吧,然后写了个简单的登陆业务,从"实战"中讲解吧 还是继续安利:https://github.com/ddwhan0123 ...