匿名用户

1级

2015-01-15 回答

C语言实现矩阵相乘

问题描述:

编写程序,可以实现m*n矩阵和n*p矩阵相乘。m,n,p均小于10,矩阵元素为整数。

分析:

首先我们可以根据题意写出函数头。可以定为void MatrixMutiply(int m,int n,int p,long lMatrix1[MAX][MAX],long lMatrix2[MAX][MAX],long lMatrixResult[MAX][MAX]),其中lMatrix1和lMatrix2分别是输入的m*n矩阵和n*p矩阵,lMatrixResult是输出的m*p矩阵。

因为m,n和p都是未知量,要进行处理的矩阵大小是变量。但我们可以定义比较大的二维数组,只使用其中的部分数组元素。

矩阵相乘的算法比较简单,输入一个m*n矩阵和一个n*p矩阵,结果必然是m*p矩阵,有m*p个元素,每个元素都需要计算,可以使用m*p嵌套循环进行计算。

根据矩阵乘法公式:

可以用循环直接套用上面的公式计算每个元素。嵌套循环内部进行累加前,一定要注意对累加变量进行清零。

数据要求

问题中的常量:

#define MAX 10  /*矩阵最大行数和列数*/

问题的输入:

int m,n,p;   /*相乘的两个矩阵的行列数*/

long lMatrix1[MAX][MAX],lMatrix2[MAX][MAX]; /*相乘的两个矩阵*/

问题的输出:

long lMatrixResult[MAX][MAX];    /*矩阵相乘后得到的矩阵*/

初始算法

1.输入两个矩阵的的行列数m,n,p;

2.输入第一个矩阵的每个元素;

3.输入第二个矩阵的每个元素;

4.调用函数进行乘法运算,结果放在lMatrixResult 中;

5. 打印输出结果矩阵。

算法细化

算法的步骤4计算两个矩阵的乘法算法如下:

4.1 定义循环变量i,j,k;

4.2 嵌套循环计算结果矩阵(m*p)的每个元素。

程序代码如下:

#define MAX 10

void MatrixMutiply(int m,int n,int p,long lMatrix1[MAX][MAX],

long lMatrix2[MAX][MAX],long lMatrixResult[MAX][MAX])

{

int i,j,k;

long lSum;

/*嵌套循环计算结果矩阵(m*p)的每个元素*/

for(i=0;i

for(j=0;j

{

/*按照矩阵乘法的规则计算结果矩阵的i*j元素*/

lSum=0;

for(k=0;k

lSum+=lMatrix1[i][k]*lMatrix2[k][j];

lMatrixResult[i][j]=lSum;

}

}

main()

{

long lMatrix1[MAX][MAX],lMatrix2[MAX][MAX];

long lMatrixResult[MAX][MAX],lTemp;

int i,j,m,n,p;

/*输入两个矩阵的的行列数m,n,p*/

printf("\nPlease input m of Matrix1:\n");

scanf("%d",&m);

printf("Please input n of Matrix1:\n");

scanf("%d",&n);

printf("Please input p of Matrix2:\n");

scanf("%d",&p);

/*输入第一个矩阵的每个元素*/

printf("\nPlease elements of Matrix1(%d*%d):\n",m,n);

for(i=0;i

for(j=0;j

{

scanf("%ld",&lTemp);

lMatrix1[i][j]=lTemp;

}

/*输入第二个矩阵的每个元素*/

printf("\nPlease elements of Matrix2(%d*%d):\n",n,p);

for(i=0;i

for(j=0;j

{

scanf("%ld",&lTemp);

lMatrix2[i][j]=lTemp;

}

/*调用函数进行乘法运算,结果放在lMatrixResult 中*/

MatrixMutiply(m,n,p,lMatrix1,lMatrix2,lMatrixResult);

/*打印输出结果矩阵*/

printf("\nResult matrix: \n");

for(i=0;i

{

for(j=0;j

printf("%ld ",lMatrixResult[i][j]);

printf("\n");

}

}

程序运行结果如下:

Please input m of Matrix1:

3

Please input n of Matrix1:

2

Please input p of Matrix2:

3

Please elements of Matrix1(3*2):

1 2

0 1

3 0

Please elements of Matrix2(2*3):

1 2 0

3 1 1

Result matrix:

7 4 2

3 1 1

3 6 0

c语言两矩阵相乘算法,用c语言实现两个矩阵相乘怎么做?相关推荐

  1. 十字链表计算矩阵乘积 c语言,求用十字链表实现矩阵相加算法(C语言)急!!!...

    匿名用户 1级 2010-02-09 回答 我有一个可以用的.怎么给你?百度hi我吧. 算了,我贴上来吧,由电脑编程网整理: #include #include #define smax 45 typ ...

  2. c语言数据交换的算法流程图,C语言冒泡排序算法浅析

    C语言泡排冒序算浅析 法中刘旭 ( 江师范丽等专高学科校数与计算机学科学系 ) [ 摘]要泡冒排序算法 C语言常见是排序算法之,一该算法的优点 逻辑是清晰,代码简洁,点缺是时复杂度间高较本文介.绍了统 ...

  3. c语言程序设计的常用算法,《C语言程序设计的常用算法.doc

    <C语言程序设计的常用算法 C语言程序设计的常用算法 算法(Algorithm):计算机解题的基本思想方法和步骤.算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要 ...

  4. 四阶龙格库塔c语言,四阶龙格库塔算法的C语言实现

    解微分方程 2001年3月焦作大学学报 JOURNALOFJIAOZUOUNIVERSITY№ 1Mar.2001第1期 四阶龙格一库塔算法的C语言实现 毋玉芝 (焦作财会学校) 摘要本文叙述了四阶龙 ...

  5. r语言kmodes_聚类分析——k-means算法及R语言实现

    我们知道『物以类聚,人以群分』,这里并不是分类问题,而是聚类问题. 两者主要区别在于,分类是将一组数据根据不同的类区分,已经知道有哪些类,也就是数据已经有了类的标签.而聚类是一种事先不知道有多少类,通 ...

  6. c语言成绩存储的算法思想,C语言算法总结,非常精辟

    <C语言算法总结,非常精辟>由会员分享,可在线阅读,更多相关<C语言算法总结,非常精辟(9页珍藏版)>请在人人文库网上搜索. 1.c语言算法摘要2 .牛顿迭代a的平方根[思想摘 ...

  7. 基于c语言图像灰度拉伸算法实现,c语言实现图像灰度均衡化

    通过对灰度直方图进行修正的理论.建模.算法和程序的论述说明如何实现图象的灰度直方图均衡化,达到图象增强的目的. 廛围抖蕉 c语 言实现图像灰度均衡化 郭韶斌 (北京交通大学,北京市 100044) ' ...

  8. 归并排序c语言实验报告,归并排序算法及其C语言具体实现

    本节介绍一种不同于插入排序和归并排序,其排序的实现思想是先将所有的记录完全分开,然后两两合并,在合并的过程中将其排好序,最终能够得到一个完整的有序表. 例如对于含有 n 个记录的无序表,首先默认表中每 ...

  9. c语言微分方程离散化,PID算法的C语言实现二 PID算法的离散化

    上面一篇已经讲述了PID的流程!这里对上面做一些补充说明: 1.由上一篇原理图框架我们知道PID控制其实是对偏差的控制: 2.如果偏差为0,则比列控制就不起作用: 3.积分环节主要用来消除静差,就是系 ...

  10. 滑动平均滤波c语言_常用滤波算法及C语言程序实现

    1.限幅滤波法(又称程序判断滤波法) A.方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A) 每次检测到新值时判断: 如果本次值与上次值之差<=A,则本次值有效 如果本次值与上次值之差 ...

最新文章

  1. UVA1103 古代象形符号 Ancient Messages解题报告(DFS,字符串)难度⭐⭐⭐⭐
  2. 测试设备和Android机怎么传递消息,如何检测设备是Android手机还是Android平板电脑?...
  3. java爬取网页数据_如何使用爬虫工具采集数据
  4. codeforces gym-101736 Dessert First Strategy 最小割
  5. spark学习-53-Spark下Java版HBase下的根据权重获取最真实数据
  6. MODIS植被覆盖度
  7. java敏感词过滤算法
  8. Linux 中文文件名乱码解决 FTP文件名乱码
  9. PHP数字金额转换成中文大写金额
  10. 你对Redis的使用靠谱吗?Redis的性能高,吗?Redis可以保证原子性,吗?用Redis可以实现事务,吗?用Redis可以当队列,吗?Redis适合用来做什么?
  11. 云锁卸载 linux,ubuntu下云锁卸载出错后无法重新安装的解决办法checking installation environment:...
  12. java中倒出pdf增加高宽_java – 如何扩展PDF的页面大小以添加水印...
  13. DOSBOX——DEBUG的简单使用
  14. 小程序 canvas画图片
  15. 图表说话之解析excel商务饼图做法
  16. 对标金九银十:各大厂最新Java面试真题整理+简历模板
  17. 阅读Decoupled Spatial-Temporal Attention Network for Skeleton-Based Action Recognition
  18. leofs管理工具之s3 browser连接
  19. java 面试108
  20. 软件测试方法和测试策略

热门文章

  1. 用计算机求和公式,全国计算机一级等考excel之sum求和函数
  2. android lint
  3. php调查问卷数据库,关于一个问卷调查的程序,如何插入数据库
  4. 去年我国软件业收入4.3万亿元 同比增长16.6%
  5. 小程序毕业设计 基于微信鲜花花店商城小程序毕业设计开题报告功能参考
  6. 【Go】dep使用介绍
  7. FXTM富拓:美数据亮眼,美元这是要涨了?
  8. 人文视野中的生态学题库
  9. 【Oracle 管理员账号密码忘记的快速解决方法!十分细节!强烈建议收藏!!!】
  10. 英语不规则动词变化表