需求  

  编写程序模拟矩阵乘法,一个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语言实现的矩阵乘法运算器的更多相关文章

  1. 矩阵乘法C语言实现

    /* 矩阵乘法C语言实现 Slyar 2009.3.20 */   #include <stdio.h> #include <stdlib.h>   /* 给 int 类型定义 ...

  2. [转]OpenBLAS项目与矩阵乘法优化

    课程内容 OpenBLAS项目介绍 矩阵乘法优化算法 一步步调优实现 以下为公开课完整视频,共64分钟: 以下为公开课内容的文字及 PPT 整理. 雷锋网的朋友们大家好,我是张先轶,今天主要介绍一下我 ...

  3. 【bzoj4870】[Shoi2017]组合数问题 dp+快速幂/矩阵乘法

    题目描述 输入 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 输出 一行一个整数 ...

  4. WUSTOJ 1232: 矩阵乘法(C)

    1232: 矩阵乘法 Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld Description 小明明正在学习线性代数,老师布置 ...

  5. Java实现 蓝桥杯 算法提高 矩阵乘法(暴力)

    试题 算法提高 矩阵乘法 问题描述 小明最近刚刚学习了矩阵乘法,但是他计算的速度太慢,于是他希望你能帮他写一个矩阵乘法的运算器. 输入格式 输入的第一行包含三个正整数N,M,K,表示一个NM的矩阵乘以 ...

  6. CUDA 矩阵乘法终极优化指南

    作者:马骏 | 旷视 MegEngine 架构师 前言 单精度矩阵乘法(SGEMM)几乎是每一位学习 CUDA 的同学绕不开的案例,这个经典的计算密集型案例可以很好地展示 GPU 编程中常用的优化技巧 ...

  7. *HDU2254 矩阵乘法

    奥运 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

  8. *HDU 1757 矩阵乘法

    A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  9. CH Round #30 摆花[矩阵乘法]

    摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...

随机推荐

  1. [one day one question] Iscroll 5.0 在chrome上无法滑动

    问题描述: Iscroll 5.0 在chrome上无法滑动,不仅仅在chromePC的开发的时候,在手机上的chrome也有同样的问题,这怎么破? 解决方案: // 关闭 PointerEvent ...

  2. CSS Ul(列表样式)

    CSS Ul(列表样式) CSS列表属性作用如下: 设置不同的列表项标记为有序列表 设置不同的列表项标记为无序列表 设置列表项标记为图像 一.列表 在HTML中,有两种类型的列表: 无序列表 - 列表 ...

  3. 枚举转SelectList扩展方法

        public enum Avbc    {        Red=1,        Blue=2,        Whilt=3,        Black=4    } public st ...

  4. 《Java程序设计》 第2周学习总结

    20145318 <Java程序设计>第2周学习总结 教材学习内容总结 short,2字节:int,4字节:long,8字节:byte,1字节:float,4字节:double,8字节:c ...

  5. Ubuntu12.04 安装adb

    1.通过apt-get安装adb sudo add-apt-repository ppa:nilarimogard/webupd8 sudo apt-get update sudo apt-get i ...

  6. scrapy之Pymongo

    用Pymongo保存数据 爬取豆瓣电影top250movie.douban.com/top250的电影数据,并保存在MongoDB中. items.py class DoubanspiderItem( ...

  7. sonar总结--

    maven的setting.xml 配置  https://www.cnblogs.com/javawebsoa/p/3206504.html

  8. UTF-8文件的Unicode签名BOM(Byte Order Mark)问题记录(EF BB BF)

    背景 楼主测试的批量发送信息功能上线之后,后台发现存在少量的ERROR日志,日志内容为手机号码格式不正确. 此前测试过程中没有出现过此类问题,从运营人员拿到的发送列表的TXT,号码是符合规则的,且格式 ...

  9. HTML子页面保存关闭并刷新父页面

    1.思路是子页面保存后,后台传递成功的js到前台. 2.js的原理是——子页面调用父页面的刷新 子页面 function Refresh() {            window.parent.Re ...

  10. C++实现矩阵压缩

    C++实现矩阵压缩 转置运算时一种最简单的矩阵运算.对于一个m*n的矩阵M,他的转置矩阵T是一个n*m的矩阵,且T(i,j) = M(j,i). 一个稀疏矩阵的转置矩阵仍然是稀疏矩阵. 矩阵转置 方案 ...