番外篇之矩阵运算

矩阵的运算代码(加减乘除)(内有注释)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define ROW 10  //定义行
#define COL 10	//定义列
//设置全局变量A矩阵的m代表实际矩阵的行数,n代表实际矩阵的列数
//设置全局变量B矩阵的p代表实际矩阵的行数,q代表实际矩阵的列数
int m, n;
int p, q;
void menu()
{printf("**********************请选择你要进行的运算\n");printf("**********************0:退出矩阵运算     \n");printf("**********************1:加法运算		  \n");printf("**********************2:减法运算	      \n");printf("**********************3:转置运算	      \n");printf("**********************4:乘法运算		  \n");
}
void Input_MAT(int A[][COL], int B[][COL])
{int i = 0;int j = 0;printf("输入A数组的行数,列数:");scanf("%d%d", &m, &n);printf("输入A数组:\n");for (; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &A[i][j]);}}printf("输入B数组的行数,列数:");scanf("%d%d", &p, &q);printf("输入B数组:\n");//输入B数组for (i = 0; i < p; i++){for (j = 0; j < q; j++){scanf("%d", &B[i][j]);}}
}
void Output_MAT(int A[][COL], int B[][COL])
{int i = 0;int j = 0;//输出A数组printf("输出A数组:\n");for (; i < m; i++){for (j = 0; j < n; j++){printf("%2d ", A[i][j]);}printf("\n");}printf("输出B数组:\n");//输出B数组for (i = 0; i < p; i++){for (j = 0; j < q; j++){printf("%2d ", B[i][j]);}printf("\n");}
}
//矩阵相加
void Add(int A[][COL],int B[][COL],int sum[][COL])
{if (m == p && n == q){int i = 0;int j = 0;for (; i < m; i++){for (j = 0; j < n; j++)sum[i][j] = A[i][j] + B[i][j];//得到和矩阵}//打印和矩阵printf("开始打印和矩阵\n");for (i=0; i < m; i++){for (j = 0; j < n; j++)printf("%2d ", sum[i][j]);printf("\n");}}elseprintf("你的矩阵相加形式不合法,请重新输入\n");
}
void Sub(int A[][COL], int B[][COL], int sum[][COL])
{if (m == p && n == q){int i = 0;int j = 0;for (; i < m; i++){for (j = 0; j < n; j++)sum[i][j] = A[i][j] - B[i][j];//得到差矩阵}//打印和矩阵printf("开始打印减矩阵\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++)printf("%2d ", sum[i][j]);printf("\n");}}elseprintf("你的矩阵相减形式不合法,请重新输入\n");
}
void Tra(int A[][COL],int B[][COL])
{printf("下面开始A矩阵的转置\n");int i = 0;int j = 0;//转置运算for (; i < m; i++){for (j = i; j < n; j++){int tmp = 0;tmp = A[i][j];A[i][j] = A[j][i];A[j][i] = tmp;}}printf("下面开始B矩阵的转置\n");for (i = 0; i < p; i++){for (j = i; j < q; j++){int tmp = 0;tmp = B[i][j];B[i][j] = B[j][i];B[j][i] = tmp;}}//输入转置后的A,B矩阵Output_MAT(A, B);
}
void Mul1(int A[][COL], int B[][COL], int sum[][COL])
{int i = 0;int j = 0;int k = 0;if (n == p){for (; i < m; i++){for (j = 0; j < q; j++){for (k = 0; k < n; k++)sum[i][j] += A[i][k] * B[k][j];}}printf("开始打印积矩阵\n");for (i = 0; i < m; i++){for (j = 0; j < q; j++)printf("%2d ", sum[i][j]);printf("\n");}}elseprintf("矩阵相乘形式不合法\n");
}
void Mul2(int A[][COL], int B[][COL], int sum[][COL])
{int i = 0;int j = 0;int k = 0;if (q == m){for (; i < p; i++){for (j = 0; j < n; j++){for (k = 0; k < q; k++)sum[i][j] += B[i][k] * A[k][j];}}printf("开始打印积矩阵\n");for (i = 0; i < p; i++){for (j = 0; j < n; j++)printf("%2d ", sum[i][j]);printf("\n");}}elseprintf("矩阵相乘形式不合法\n");
}int main()
{int A[ROW][COL] = { 0 };//初始化A数组int B[ROW][COL] = { 0 };//初始化B数组//矩阵输入函数//Input_MAT(A,B);//矩阵输出函数//Output_MAT(A, B);int input = 0;//初始化要进行的运算密码do{menu();//菜单,你要进行的矩阵运算printf("请输入密码进行矩阵运算:");scanf("%d", &input);//矩阵输入函数Input_MAT(A, B);//矩阵输出函数Output_MAT(A, B);int flag = 0;//矩阵乘法,若flag = 0,进行A乘以B,若flag=1,进行B乘以Aint sum[ROW][COL] = { 0 };switch (input){case 0:printf("退出矩阵运算");break;case 1://定义矩阵之和的和矩阵Add(A, B, sum);//加法运算break;case 2://矩阵减法运算Sub(A, B, sum);break;case 3://A,B矩阵的转置Tra(A,B);break;case 4://A,B矩阵的乘法printf("请输入你要进行的矩阵乘法\n");printf("输入 0 进行A矩阵乘以B矩阵的运算\n");printf("输入 1 进行B矩阵乘以A矩阵的运算\n");printf("请输入数字:");scanf("%d", &flag);if(flag==0)Mul1(A, B, sum);if(flag==1)Mul2(A, B, sum);break;default:printf("输入数字不合法,请重新输入\n");break;}} while (input);return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/215453.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】最小生成树(Kruskal算法)

一.基本思想 设无向连通网为G&#xff08;V&#xff0c;E&#xff09;&#xff0c;令G的最小生成树为T&#xff08;U&#xff0c;TE&#xff09;&#xff0c;其初态为UV&#xff0c;TE{},然后&#xff0c;按照边的权值由小到大的顺序&#xff0c;考察G的边集E中的各条边。若被考…

大数据Doris(二十八):Routine Load查看和修改作业

文章目录 Routine Load查看和修改作业 一、​​​​​​​查看导入作业状态

2023年【熔化焊接与热切割】免费试题及熔化焊接与热切割模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 熔化焊接与热切割免费试题是安全生产模拟考试一点通生成的&#xff0c;熔化焊接与热切割证模拟考试题库是根据熔化焊接与热切割最新版教材汇编出熔化焊接与热切割仿真模拟考试。2023年【熔化焊接与热切割】免费试题及…

用栈实现队列的功能,用队列实现栈的功能?

我们知道队列的特点是先入先出&#xff0c;栈的特点是后入先出&#xff0c;那么如何用栈实现队列的功能&#xff0c;又如何用队列实现栈的功能呢&#xff0c;且听我一一道来 我们首先来看用栈实现队列的功能&#xff0c;首先大伙儿要知道队列和栈的特点其实是“相反”&#xf…

OSG粒子系统与阴影-雾效模拟(1)

虚拟现实中有很多效果&#xff0c;如雨效、雪效、雾效等&#xff0c;这些都可以通过粒子系统来实现。一个真实的粒子系统的模式能使三维场景达到更好的效果。 本章对OSG粒子系统的使用以及生成自定义粒子系统的方法进行了详细介绍最后还附带说明了阴影的使用方法。在实时的场景…

电源控制系统架构(PCSA)之系统分区电源域

目录 4.2 电源域 4.2.1 电源模式 4.2.2 电源域的选择 4.2.3 系统逻辑 4.2.4 Always-On域 4.2.5 处理器Clusters 4.2.6 CoreSight逻辑 4.2.7 图像处理器 4.2.8 显示处理器 4.2.9 其他功能 4.2.10 电源域层次结构要求 4.2.11 SOC域示例 4.2 电源域 电源域在这里被定…

流程图是什么,用什么软件做?

在工作流程中&#xff0c;经常会遇到需要图形化呈现整个流程的情况。流程图就是一种一目了然的图形化表现方式&#xff0c;便于人们理解、沟通和管理整个流程。 1.Visio Visio是一款微软公司的图表软件&#xff0c;可以用于创建各种类型的流程图、组织结构图、网络图、平面图…

笔记:内网渗透流程之信息收集

信息收集 首先&#xff0c;收集目标内网的信息&#xff0c;包括子网结构、域名信息、IP地址范围、开放的端口和服务等。这包括通过主动扫描和渗透测试工具收集信息&#xff0c;以及利用公开的信息源进行信息搜集。 本机信息收集 查看系统配置信息 查看系统详细信息&#xf…

第一百七十八回 介绍一个三方包组件:SlideSwitch

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"如何创建垂直方向的Switch"相关的内容&#xff0c;本章回中将 介绍SlideSwitch组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们…

linux -系统通用命令查询

有时候内网环境下&#xff0c;系统有些命令没有安装因此掌握一些通用的linux 命令也可以帮助我们解决一些问题查看 1.查看系统内核版本 uname -r2.查看系统版本 cat /etc/os-release3. 查看cpu 配置 lscpu4.查看内存信息 free [参数] 中各个数值的解释如下表 数值解释t…

基于51单片机电子钟万年历LCD1602显示

51单片机的电子钟万年历LCD1602显示 &#x1f534; &#x1f535;51单片机的电子钟万年历LCD1602显示&#x1f534; &#x1f535;主要功能&#xff1a;&#x1f534; &#x1f535;讲解视频&#x1f534; &#x1f535;仿真图&#xff1a;&#x1f534; &#x1f535;程序&…

python之pyqt专栏2-项目文件解析

项目结构 在上一篇文章python之pyqt专栏1-环境搭建&#xff0c;创建新的pyqt项目&#xff0c;下面我们来看一下这个项目下的文件。 从下面的文件结构图可以看到&#xff0c;该项目下有3个文件&#xff0c;untitled.ui,untitled.py 以及main.py。 QtDesigner可以UI界面的方式&am…