#include<stdio.h>
int main()
{int i,j,k,M,N,a[10][10],b[10][10],c[10][10];  //定义两个输入矩阵,一个输出矩阵 printf("请输入第一个矩阵的行数M="); scanf("%d",&M);printf("请输入第一个矩阵的列数N=");scanf("%d",&N); printf("请输入一个%d*%d矩阵a=\n",M,N);     //输入a矩阵 for (i=0;i<M;i++)               {for (j=0;j<N;j++)scanf("%d",&a[i][j]);}printf("请输入一个%d*%d矩阵b=\n",N,M);      //输入b矩阵   for (i=0;i<N;i++) {for (j=0;j<M;j++)scanf("%d",&b[i][j]);}printf("a矩阵\n");             //输出a矩阵 for (i=0;i<M;i++){for (j=0;j<N;j++)printf("%d ",a[i][j]);printf("\n");  }       printf("b矩阵\n");             //输出b矩阵 for (i=0;i<N;i++){for (j=0;j<M;j++)printf("%d ",b[i][j]);printf("\n");   }     for (i=0;i<M;i++)                   //矩阵c=a*b {                                   //c矩阵中储存数据时用a矩阵的行*b矩阵的列 for(j=0;j<M;j++){  c[i][j]={0};                  //每一次计算c前都要置零 for(k=0;k<N;k++){c[i][j]+=a[i][k]*b[k][j];}}}printf("*****************************************\n") ;for (i=0;i<M;i++)                   //c矩阵中 行等于a的行 列等于b的列 {for(j=0;j<M;j++)printf("%d  ",c[i][j]);printf("\n");}  return 0;
}

输入输出矩阵都需要用到两次循环,因为矩阵与行和列有关,运用到二维数组。

本题重点在于设计两矩阵相乘后数据的储存。

首先,了解c矩阵(线代相关知识):

由于a的行数是b的列数,a的列数是b的行数,则两个矩阵相乘得到的矩阵c一定是一个方阵(行数与列数相等)。在a、b矩阵相乘时,a的第1行中每一个数与b的第1列中每一个数相乘相加,得到c中第1个数c[0][0];a的第1行中每一个数与b的第2列中每一个数相乘相加,得到c中第2个数c[0][1]......因此:c的列数是b的列数(M)即a的行数(M)。

其次,设计c矩阵:

观察c其中一个例子c[0][1]发现,a、b相乘得c[0][1]时,a的行不变,列递增;b的列不变,行递增。则可以在行、列循环里再加入递增的循环,递增次数取决于a的列数(或b的行数)。

由上述分析得到c的代码段

 for (i=0;i<M;i++)                   {                                  for(j=0;j<M;j++){    c[i][j]={0};                  for(k=0;k<N;k++){c[i][j]+=a[i][k]*b[k][j];}}}

最后,还要注意:

①C语言中“数组长度”,即[  ]下标运算符中必须是整型常量,不可以将M、N直接写入,所以在一开始定义了a、b、c三个二维数组的一、 二维数组长度均为10(也可以是其他整型常量,只要保证scanf在你设定的范围内),M与N的值也需要用户先输入。

②c[i][j]在每一使用时都要置零,用0初始化,否则会得到错误结果。

测试结果:

【C语言】设计实现M*N矩阵和N*M矩阵相乘相关推荐

  1. R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE)、计算矩阵数据的特征值(eigenvalue)

    R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE).计算矩阵数据的特征值(eigenvalue) 目录 R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE). ...

  2. R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE)

    R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE) 目录 R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE) R语言是解决什么问题的? R语言将向量数据按照 ...

  3. R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE)、对矩阵进行转置操作

    R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE).对矩阵进行转置操作 目录 R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE).对矩阵进行转置操作 R语言 ...

  4. 单片机c语言时钟设计,基于单片机的数字时钟C语言设计.pdf

    第 2O卷第 6期 北华航天工业学 院学报 Vo1.2O No.6 2010年 l2月 JournalofNorthChinaInstituteofAerospaceEngineering Dec.2 ...

  5. R语言使用caret包的confusionMatrix函数计算混淆矩阵、使用编写的自定义函数可视化混淆矩阵(confusion matrix)

    R语言使用caret包的confusionMatrix函数计算混淆矩阵.使用编写的自定义函数可视化混淆矩阵(confusion matrix) 目录

  6. c语言实现椭圆曲线算法,椭圆曲线加密算法的C语言设计和实现

    椭圆曲线加密系统是迄今为止每比特具有最高安全强度的加密系统,它被认为最有希望成为下一代通用的公钥加密系统.文章将采用标准的C语言设计与实现椭圆曲线加密算法. 椭圆曲线加密算法的C语言设计和实现 椭圆曲 ...

  7. c语言编程能控制热风炉,利用C语言设计热风炉悬链线拱顶研究.pdf

    j|il ll_ ll梅 诋 融 技 j 萎 |.每薯tj n叠宣鞲s瓿 利用C语言设计热风炉悬链线拱顶 鄢 明 吴建霖 冯 飞 (柳钢设计院) 摘 要 :介绍 了利用 C语言求解两段 圆弧拟合悬链线 ...

  8. 华理c语言设计网上作业,华东理工大学第一学年第二学期网上作业参考答案C语言设计1...

    华东理工大学第一学年第二学期网上作业参考答案 考生答题情况 作业名称:2012年春季C语言设计(专)课程网上作业1 出 卷 人:SA 题号:1 题型:单选题(请在以下几个选项中选择唯一正确答案) 本题 ...

  9. [C++程序语言设计笔记一]面向对象编程抽象,继承,重写基本介绍

    今天是个不错的日子,不仅有人收了我做徒弟从此传授我有关C++的一些知识,由于前一段时间喜欢上了外挂的研究也用到了一些MFC的知识及一些Windows APIs编程,但是对C++还是没有从根本上认识.我 ...

最新文章

  1. ESP32-S模块转接板设计与实现
  2. 【转】PBOC3.0和PBOC2.0标准规范异同分析
  3. 7.1 数据库的性质
  4. WireShark抓包之提示Alert Level: Fatal, Description: HandShake Failure
  5. [渝粤题库]陕西师范大学《幼儿园社会教育》作业
  6. leetcode 1579. 保证图可完全遍历(并查集)
  7. 用mtrace定位内存泄漏
  8. TreeCtrl 查找功能的最简单实现
  9. LeetCode 542. 01 Matrix
  10. leetcode 423 从英文中重建数字
  11. esayexcel导出动态表头数据
  12. OpenGL ES之GLSurfaceView学习一:介绍
  13. GridView中使用DropDownList的OnSelectedIndexChanged事件
  14. su必备插件_21款SU常用插件集合
  15. Redis基础--Redis 4.0 常用配置
  16. java高级(java高级工程师证书)
  17. 高通wlan驱动之tgt_mgmt_txrx_rx_frame_handler函数
  18. mysql基础学习--day7
  19. 《大话设计模式 下》
  20. 计算机基础知识(免费、全面)

热门文章

  1. js复制文本(带文本格式or不带文本格式)
  2. otg usb 定位_教你简单认识OTG与OTG线
  3. jboss下ejb简介
  4. JPA @PersistenceContext和@Transactional Annotation
  5. 用C 绘制实时曲线图
  6. loghouse介绍
  7. 刚柔相济 端庄大方——张銅彦行楷书摭谈
  8. 北宋政坛翘楚,文坛领袖大串联
  9. iis日志分析 seo必备技能
  10. matlab怎么写卷积过程,离散卷积过程举例图示详解