矩阵的运算
目标:实现一个能进行稀疏矩阵基本运算(包括加、减、乘)的运算器。
(1)以三元组顺序表表示稀疏矩阵,实现两个矩阵相加、相减、相乘的运算
(2)稀疏矩阵的输入形式为三元组表示,运算结果则以通常的阵列形式列出。
(3)首先提示用户输入矩阵的行数和列数,并判别给出的两个矩阵行、列数对于所要求作的运算是否相匹配。可设矩阵的行数和列数均不超过20。
(4)程序需给出菜单项,用户按照菜单提示进行相应的操作。
#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
void menu()
{printf("****************************************************************\n");printf("****************************************************************\n");printf("**********************欢迎使用矩阵计算器************************\n");printf("*******1、转置 2、加法 ******\n");printf("*******3、减法 4、数乘 ******\n");printf("*******5、乘法 0、退出 *******\n");printf("****************************************************************\n");printf("****************************************************************\n");
}void Matrix_output(int(*s)[100], int m, int n)//输出
{int i, j;for (i = 0; i < m; i++){for (j = 0; j < n; j++){printf("%2d ", s[i][j]);}printf("\n");}
}void Matrix_transpose(int(*s)[100], int(*t)[100], int m, int n)//转置
{int i, j;for (i = 0; i < m; i++){for (j = 0; j < n; j++){t[j][i] = s[i][j];}}
}
void Matrix_addition(int(*s)[100], int(*t)[100], int(*p)[100], int m, int n)//相加
{int i, j;for (i = 0; i < m; i++){for (j = 0; j < n; j++){p[i][j] = s[i][j] + t[i][j];}}
}void Matrix_subtraction(int(*s)[100], int(*t)[100], int(*p)[100], int m, int n)//相减
{int i, j;for (i = 0; i < m; i++){for (j = 0; j < n; j++){p[i][j] = s[i][j] - t[i][j];}}
}void Matrix_shucheng(int(*s)[100], int(*t)[100], int m, int n, int k)//数乘
{int i, j;for (i = 0; i < m; i++){for (j = 0; j < n; j++){t[i][j] = k * s[i][j];}}
}void Matrix_multiplication(int(*s)[100], int(*t)[100], int(*p)[100], int m, int n, int x, int y)//相乘
{int i, j, k, sum;for (i = 0; i < m; i++){for (j = 0; j < y; j++){sum = 0;for (k = 0; k < n; k++){sum += s[i][k] * t[k][j];}p[i][j] = sum;}}
}int main()
{int m, n, i, j, k, input;int x, y;int A[100][100], B[100][100], C[100][100];do{menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1://转置printf("请输入矩阵的行数:> ");scanf("%d", &m);printf("\n");printf("请输入矩阵的列数:> ");scanf("%d", &n);printf("\n");printf("请输入矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &A[i][j]);}}printf("原矩阵:\n");Matrix_output(A, m, n);Matrix_transpose(A, B, m, n);printf("转置后的矩阵:\n");Matrix_output(B, n, m);break;case 2://相加printf("请输入第一个矩阵的行数:> ");scanf("%d", &m);printf("\n");printf("请输入第一个矩阵的列数:> ");scanf("%d", &n);printf("\n");printf("请输入矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &A[i][j]);}}printf("请输入第二个矩阵的行数:> ");scanf("%d", &x);printf("\n");printf("请输入第二个矩阵的列数:> ");scanf("%d", &y);printf("\n");if (m == x && n == y){printf("请输入矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &B[i][j]);}}printf("第一个矩阵:\n");Matrix_output(A, m, n);printf("第二个矩阵:\n");Matrix_output(B, m, n);Matrix_addition(A, B, C, m, n);printf("和矩阵:\n");Matrix_output(C, m, n);}else{printf("这两个矩阵不是同型矩阵,不能相加\n");}break;case 3:printf("请输入第一个矩阵的行数:> ");scanf("%d", &m);printf("\n");printf("请输入第一个矩阵的列数:> ");scanf("%d", &n);printf("\n");printf("请输入第一个矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &A[i][j]);}}printf("请输入第二个矩阵的行数:> ");scanf("%d", &x);printf("\n");printf("请输入第二个矩阵的列数:> ");scanf("%d", &y);printf("\n");if (m == x && n == y){printf("请输入第二个矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &B[i][j]);}}printf("第一个矩阵:\n");Matrix_output(A, m, n);printf("第二个矩阵:\n");Matrix_output(B, m, n);Matrix_subtraction(A, B, C, m, n);printf("差矩阵:\n");Matrix_output(C, m, n);}else{printf("这两个矩阵不是同型矩阵,不能相减\n");}break;case 4:printf("请输入矩阵的行数:> ");scanf("%d", &m);printf("\n");printf("请输入矩阵的列数:> ");scanf("%d", &n);printf("\n");printf("请输入这个数:>");scanf("%d", &k);printf("\n");printf("请输入矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &A[i][j]);}}printf("原矩阵:\n");Matrix_output(A, m, n);Matrix_shucheng(A, B, m, n, k);printf("数乘矩阵:\n");Matrix_output(B, m, n);break;case 5:printf("请输入第一个矩阵的行数:> ");scanf("%d", &m);printf("\n");printf("请输入第一个矩阵的列数:> ");scanf("%d", &n);printf("\n");printf("请输入第一个矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &A[i][j]);}}printf("请输入第二个矩阵的行数:> ");scanf("%d", &x);printf("\n");printf("请输入第二个矩阵的列数:> ");scanf("%d", &y);printf("\n");if (n == x){printf("请输入第二个矩阵:\n");for (i = 0; i < x; i++){for (j = 0; j < y; j++){scanf("%d", &B[i][j]);}}printf("第一个矩阵:\n");Matrix_output(A, m, n);printf("第二个矩阵:\n");Matrix_output(B, x, y);Matrix_multiplication(A, B, C, m, n, x, y);printf("相乘矩阵:\n");Matrix_output(C, m, y);}else{printf("这两个矩阵不能相乘\n");}break;case 0:printf("退出计算,欢迎再次使用\n");break;default:printf("输入错误,请从新输入\n");break;}} while (input);return 0;
}
出菜单项,用户按照菜单提示进行相应的操作。
相关文章:
矩阵的运算
目标:实现一个能进行稀疏矩阵基本运算(包括加、减、乘)的运算器。 (1)以三元组顺序表表示稀疏矩阵,实现两个矩阵相加、相减、相乘的运算 (2)稀疏矩阵的输入形式为三元组表示,运算结果则以通常…...
Android 获取SIM卡号码权限申请
1.添加权限 在AndroidManifest.xml中添加如下权限 <uses-permission android:name"android.permission.READ_PHONE_STATE"/> 2.获取权限 如果你只在清单文件中添加权限却没有在代码中获取权限,代码还是会报错的。 报错原因: android…...
Linux CentOS 本地yum配置
本地开发用虚拟机,因为有光盘镜像在手,并不需要联网安装组件,只需要设置一下就可以让yum从本地获取源。 将安装盘挂载在合适位置 mount /dev/cdrom /mnt 进入目录 cd /etc/yum.repos.d/ 修改CentOS-Media.repo里面的挂载路径 …...

【c++速通】入门级攻略:什么是内联函数?函数重载又是什么?
🎥 屿小夏 : 个人主页 🔥个人专栏 : C入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言🌤️函数重载☁️函数重载的概念☁️函数重载的作用☁️C支持函数重载的原理…...

ubuntu 安装串口工具和添加虚拟串口
目录 一、串口工具安装 二、使用Windows本身虚拟的串口 (一)添加串口 1、保证虚拟机是关闭状态,打开“虚拟机设置”,点击“添加”。 2、选中“串行端口”,点击“完成”。 3、选中刚添加的串口,下拉选…...

【数据结构】数组和字符串(四):特殊矩阵的压缩存储:稀疏矩阵——三元组表
文章目录 4.2.1 矩阵的数组表示4.2.2 特殊矩阵的压缩存储a. 对角矩阵的压缩存储b~c. 三角、对称矩阵的压缩存储d. 稀疏矩阵的压缩存储——三元组表结构体初始化元素设置打印矩阵主函数输出结果代码整合 4.2.1 矩阵的数组表示 【数据结构】数组和字符串(一ÿ…...

为什么POST请求经常发送两次?
大多数初级前端程序员,在通过浏览器F12的调试工具调试网络请求时,可能都会有一个发现,在进行POST请求时,明明代码里只请求了一次,为什么network里发送了两次呢,难道我代码出bug了?带着疑问点开第…...

打破总分行数据协作壁垒,DataOps在头部股份制银行的实践|案例研究
从银行开始建设数据仓库至今已近20年,当前各银行机构在数据能力建设中面临诸多困扰:如何保证数据使用时的准确性?如何让数据敏捷响应业务变化?如何让更多的业务人员使用数据? 这些问题极大影响了经营指标的达成与业务…...

测试用例的设计方法(全):边界值分析方法
一.方法简介 1.定义:边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。 2.与等价划分的区别 1)边界值分析不是从某等价类中随便挑…...

酷开科技 | 酷开系统沉浸式大屏游戏更解压!
随着家庭娱乐需求日益旺盛,越来越多的家庭消费者和游戏玩家开始追求大屏游戏带来的沉浸感。玩家在玩游戏的时候用大屏能获得更广阔的视野和更出色的视觉包围感,因此用大屏玩游戏已经成为了一种潮流。用酷开系统玩大屏游戏,过瘾又刺激…...

读高性能MySQL(第4版)笔记20_Performance Schema和其他
1. 线程 1.1. MySQL服务端是多线程软件。它的每个组件都使用线程 1.2. 每个线程至少有两个唯一标识符 1.2.1. 操作系统线程ID 1.2.2. MySQL内部线程ID 2. 对象类型 2.1. OBJECT_TYPE列 2.2. EVENT 2.3. FUNCTION 2.4. PROCEDURE 2.5. TABLE 2.6. TRIGGER 3. Perfor…...
spring cloud Eureka集群模式搭建(IDEA中运行)《二》
上一篇集群配置文件完善 上一篇博客,想必大家都学会了Eureka集群模式的搭建和运行,针对上一篇的配置文件进行了优化,在这里分享给大家。上一篇主要有3个配置文件,分别对应3个不同的服务,这种形式配置文件分别写在了不…...

大模型(LLM)在电商推荐系统的探索与实践
本文对LLM推荐的结合范式进行了梳理和讨论,并尝试将LLM涌现的能力迁移应用在推荐系统之中,利用LLM的通用知识来辅助推荐,改善推荐效果和用户体验。 背景 电商推荐系统(Recommend System,RecSys)是一种基于…...

C语言之指针详解
目录 地址 指针的定义和使用 数组与指针的区别与联系 字符串与指针的用法 C 中的 NULL 指针 指针的算术运算 指向指针的指针 传递指针给函数 从函数返回指针 在学习指针之前,我们先弄清楚一个概念: 地址 地址在计算机内存中是一个唯一的标识符…...

【Java笔记+踩坑】设计模式——原型模式
导航: 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/黑马旅游/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码-CSDN博客 目录 零、经典的克隆羊问题(复制10只属性相同的羊) 一、传统方案࿱…...
Flutter GetX使用详解
介绍 GetX是一款功能强大且轻量级的Flutter状态管理和路由管理库。它提供了一种简单而强大的方式来构建Flutter应用程序,无需大量的模板代码。GetX不仅提供了状态管理和路由管理,还包括其他实用工具,如国际化和依赖注入。 在本文中…...

【ARM Coresight 系列文章 3.3 - ARM Coresight SWD 协议详细介绍】
文章目录 1.1 SWD 协议框图1.2 读/写时序及命令1.2.1 SWD 时序1.2.2 SWD 命令详情1.3 芯片探测1.3.1 获取芯片 ID1.4 读/写操作1.1 SWD 协议框图 SWD协议可以配置SoC内部几乎所有的寄存器。时钟信号由SWCLK 管脚输入,数据信号从SWDIO管脚输入输出。首先 HOST 对SW-DP 进行操作…...
作为开发者,可视化开发工具了解一下
你是否为编程世界的各种挑战感到头痛?想要以更高效、简单的方式开发出专业级的项目? JNPF低代码工具正是你苦心寻找的产品!它是一款专为稍微懂一点点编程思想的入门级人员设计的神奇工具,集成了丰富的功能和组件,让你轻…...

Python:实现日历功能
背景 日常生活中,每天都要用到日历,日历成为我们生活中的必需品,那么如何制作日历呢,其实方法有很多,可以直接在excel中制作,也可以手画等等。 学习过编程的朋友,能否想到用Python编写一…...

2.9.C++项目:网络版五子棋对战之业务处理模块的设计
文章目录 一、意义二、功能三、管理(一)客户端请求(二)websocket 四、框架五、完整代码 一、意义 将所有的模块整合在一起,通过网络通信获取到客户端的请求,提供不同的业务处理。 服务器模块,是…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...