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个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...
随机推荐
- [one day one question] Iscroll 5.0 在chrome上无法滑动
问题描述: Iscroll 5.0 在chrome上无法滑动,不仅仅在chromePC的开发的时候,在手机上的chrome也有同样的问题,这怎么破? 解决方案: // 关闭 PointerEvent ...
- CSS Ul(列表样式)
CSS Ul(列表样式) CSS列表属性作用如下: 设置不同的列表项标记为有序列表 设置不同的列表项标记为无序列表 设置列表项标记为图像 一.列表 在HTML中,有两种类型的列表: 无序列表 - 列表 ...
- 枚举转SelectList扩展方法
public enum Avbc { Red=1, Blue=2, Whilt=3, Black=4 } public st ...
- 《Java程序设计》 第2周学习总结
20145318 <Java程序设计>第2周学习总结 教材学习内容总结 short,2字节:int,4字节:long,8字节:byte,1字节:float,4字节:double,8字节:c ...
- Ubuntu12.04 安装adb
1.通过apt-get安装adb sudo add-apt-repository ppa:nilarimogard/webupd8 sudo apt-get update sudo apt-get i ...
- scrapy之Pymongo
用Pymongo保存数据 爬取豆瓣电影top250movie.douban.com/top250的电影数据,并保存在MongoDB中. items.py class DoubanspiderItem( ...
- sonar总结--
maven的setting.xml 配置 https://www.cnblogs.com/javawebsoa/p/3206504.html
- UTF-8文件的Unicode签名BOM(Byte Order Mark)问题记录(EF BB BF)
背景 楼主测试的批量发送信息功能上线之后,后台发现存在少量的ERROR日志,日志内容为手机号码格式不正确. 此前测试过程中没有出现过此类问题,从运营人员拿到的发送列表的TXT,号码是符合规则的,且格式 ...
- HTML子页面保存关闭并刷新父页面
1.思路是子页面保存后,后台传递成功的js到前台. 2.js的原理是——子页面调用父页面的刷新 子页面 function Refresh() { window.parent.Re ...
- C++实现矩阵压缩
C++实现矩阵压缩 转置运算时一种最简单的矩阵运算.对于一个m*n的矩阵M,他的转置矩阵T是一个n*m的矩阵,且T(i,j) = M(j,i). 一个稀疏矩阵的转置矩阵仍然是稀疏矩阵. 矩阵转置 方案 ...