C#数组复习

一、一维数组 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ShuZu : MonoBehaviour
{#region  知识点一 基本概念//数组是存储一组相同类型数据的集合//数组分为 一维、二维、交错数组//一般情况  一维数组 就简称为数组#endregion#region 知识点二 数组的申明//变量类型[] 数组名;//只是申明了一个数组,但是并没有开放//变量类型 可以是我们学过的 或者 没学过的所有变量类型int[] arr1;//变量类型[] 数组名=new  变量类型[数组的长度];int[] arr2 = new int[5];//这种方式 相当于开了5个房间  但是房间里面的int值 默认为0//变量类型[] 数组名 =new 变量类型[数组的长度]{内容1,内容2,内容3,....};int[] arr3 = new int[5] { 1, 2, 3, 4, 5 };//变量类型[] 数组名 =new 变量类型[] {内容1,内容2,内容3,....};int[] arr4 = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };//后面的内容就决定了 数组的长度 "房间数"//变量类型[] 数组名={内容1,内容2,内容3,....};int[] arr5 = { 1, 3, 4, 5, 6 };//后面的内容就决定了 数组的长度 "房间数"#endregion// Start is called before the first frame updatevoid Start(){#region 知识点三 数组的使用int[] array = { 1, 2, 3, 4, 5 };//1.数组的长度Debug.Log(array.Length);//2.获取数组中的元素//数组中的下标和索引 他们是从0开始的//通过 索引下标去  获得数组中某一个元素的值时//一定注意!!!!!//不能越界Debug.Log(array[0]);//3.修改数组中的元素array[0] = 99;Debug.Log(array[0]);//4.遍历数组 通过循环 快速获取数组中的每一个元素for (int i = 0; i < array.Length; i++){Debug.Log(array[i]);}//5.增加数组的元素//组数初始化以后 是不能够 直接添加新的元素的int[] array2 = new int[6];for(int i = 0; i < array.Length; i++){array2[i] = array[i];}array = array2;for (int i = 0; i < array.Length; i++){Debug.Log(array[i]);}array[5] = 999;//6.删除数组的元素//数组初始化以后 是不能够  直接删除元素的//搬家的原理int[] array3 = new int[5];//搬家for (int i = 0; i < array3.Length; i++){array3[i] = array[i];}array = array3;Debug.Log(array.Length);//7.查找数组中的元素//99 2 3 4 5//要查找 3这个元素在哪个位置//只有通过遍历才能确定 数组中 是否存储了一个目标元素int a = 3;for (int i = 0; i < array.Length; i++){if (a == array[i]){Debug.Log("和a相等的元素在{0}" + i);}}#endregion}//总结//1.概念:同一变量类型的数据集合//2.一定要掌握知识:申明,遍历, 增删查改//3.所有的变量类型都可以申明为 数组//4.它是用来批量存储游戏中的同一类型对象的  容器}

一维数组练习:

 #region  练习题一//请创建一个一维数组并赋值,让其值与下标一样,长度为100int[] arr1 = new int[100];for (int i = 0; i < arr1.Length; i++){arr1[i] = i;Console.WriteLine(arr1[i]);}#endregion
 #region 练习题二//创建另一个数组B,让数组A中的每个元素的值乘以2存入到数组B中int[] arrayA = new int[10];int[] arrayB = new int[10];for (int i = 0; i < arrayB.Length; i++){arrayB[i] = arrayA[i]*2;Console.WriteLine(arrayB[i]);}#endregion
 #region 练习题三//随机(0--100)生成1个长度为10的整数数组int[] array=new int[10];Random r= new Random();for(int i = 0; i < array.Length; i++){array[i] =r.Next(0,101);//左包含右不包含Console.WriteLine(array[i]);}#endregion
 #region 练习题四//从一个整数数组中找出最大值 最小值 总和  平均值//(可以使用随机数1--100)int[] arrayInt= new int[10];Random c=new Random();for(int i = 0; i < arrayInt.Length; i++){arrayInt[i] = c.Next(0, 101);Console.WriteLine(arrayInt[i]);}//第一次进入时 不存在  最大最小的概念//可以认为  第一次 最大值最小值 都是第一个数int min = 0;int max = 0;int sum = 0;int avg = 0;for (int i = 0; i < arrayInt.Length; i++){//如果当前的值 比min还要小 那么当前的值就是最小的值if (min > arrayInt[i]){min = arrayInt[i];}//如果当前的值 比max还要大 那么当前的值就是最大的值if (max < arrayInt[i]){max = arrayInt[i];}//每一次的值加上去 就是总和sum += arrayInt[i];}avg=sum/arrayInt.Length;#endregion
 #region 练习题五//交换数组中的第一个和最后一个、第二个和倒数第二个、依次类推,把数组进行反转并打印int[] array5= new int[10];Random ra= new Random();for (int i = 0; i < array5.Length; i++){array5[i] = ra.Next(0, 101);Console.WriteLine(array5[i]);}Console.WriteLine("****************");//交换 那就中间商不赚差价//int temp = array5[0];//array5[0] = array5[array5.Length-1];//array5[array5.Length-1]= temp;//temp = array5[1];//array5[1]= array5[array5.Length-1-1];//array5[array5.Length - 1 - 1] = temp;//temp = array5[2];//array5[2] = array5[array5.Length - 1 - 1-1];//array5[array5.Length - 1 - 1-1] = temp;for (int i = 0;i < array5.Length/2; i++){int temp = array5[i];array5[i] = array5[array5.Length - i - 1];array5[array5.Length - i - 1] = temp;}
for (int i = 0;i<array5.Length ; i++){Console.WriteLine(array5[i]);}#endregion
 #region 练习题六//将一个整数数组的每一个元素进行如下的处理://如果元素时正数则将这个位置的元素值加1;//如果元素是负数则将这个位置的元素值减1;//如果元素是0,则不变int[] array6= new int[10];Random ran= new Random();for (int i = 0; i < array6.Length; i++){array6[i] = ran.Next(-10, 11);Console.WriteLine(array6[i]);}Console.WriteLine("$$$$$$$$$$$$$$$$$$$$$$$$");for (int i = 0; i < array6.Length; i++){//得到每一个元素 进行判断即可if (array6[i] > 0){array6[i] +=1;}else if (array6[i] < 0){array6[i] -=1;}else if (array6[i]==0){array6[i] = array6[i];}Console.WriteLine(array6[i]);}#endregion
 #region 练习题七//定义一个有10个元素的数组,使用for循环,输入10名同学的数学成绩//将成绩依次存入数组,然后分别求出最高分和最低分//并且求出10名同学的数学平均成绩int[] array7= new int[10];try{int min2 = 0;int max2 = 0;int sum2 = 0;int avg2 = 0;for (int i = 0; i < array7.Length; i++){Console.WriteLine("请输入第{0}位同学的成绩", i+1);array7[i] = int.Parse(Console.ReadLine());//第一次进来 min max 没有任何意义 所以第一次可以就认为该成绩即使 最高分也是最低分if (i == 0){min2 = array7[i];max2 = array7[i];}else{//只有除了第一次以外 才来进行 大小值的判断if (min2 > array7[i]){min2 = array7[i];}else if (max2 < array7[i]){max2 = array7[i];}}sum2 += array7[i];}avg2 = sum2 / array7.Length;Console.WriteLine("最低分{0}最高分{1}总成绩{2}平均值{3}", min2, max2, sum2, avg2);}catch (Exception){Console.WriteLine("请输入数字");}#endregion

   #region 练习题八//请声明一个string类型的数组(长度为25)(该数组中存储着符号)//通过遍历数组的方式取出其中存储的符号打印出以下效果string[] array8= new string[25];for (int i = 0; i < array8.Length; i++){array8[i] = i % 2 == 0 ?  "■" :"□";//if (i % 2 == 0)//{//    array8[i] = "■";//}//else//{//    array8[i] = "□";//}}for (int i = 0; i < array8.Length; i++){if (i%5==0&&i!=0){Console.WriteLine();}Console.Write(array8[i]);}#endregion

二、二维数组

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 二维数组
{internal class Program{static void Main(string[] args){#region 知识点一 基本概念//二维数组 是使用两个下标(索引)来确定元素的数组//两个下标可以理解成 行标 和 列标//比如矩阵//1 2 3//4 5 6//可以用二维数组   int[2,3]表示//好比 两行 三列的数据集合#endregion#region 知识点二 二维数组的申明//变量类型[,] 二维数组变量名;int[,] arr;//申明过后  会在后面进行初始化//变量类型[,] 二维数组变量名 =new 变量类型[行,列];int[,] arr2 = new int[3, 3];//变量类型[,] 二维数组变量名 =new 变量类型[行,列]{{0行内容1,0行内容2,0行内容3.....},{1行内容1,1行内容2,1行内容3.....}....};int[,] arr3=new int[3, 3] { { 1,2,3},{ 4,5,6},{ 7,8,9}};//变量类型[,] 二维数组变量名=new 变量类型[,]{{0行内容1,0行内容2,0行内容3.....},{1行内容1,1行内容2,1行内容3.....}....};int[,] arr4 = new int[3, 3] { { 1,2,3},{ 4,5,6},{ 7,8,9}};//变量类型[,] 二维数组变量名={{0行内容1,0行内容2,0行内容3.....},{1行内容1,1行内容2,1行内容3.....}....};int[,] arr5 ={ { 1,2,3},{ 4,5,6},{ 7,8,9}};#endregion#region  知识点三  二维数组的使用int[,] array1 = new int[,] { { 1, 2, 3 },{ 4, 5, 6 } };//1.二维数组的长度//我们要获取  行和列分别是多长//得到多少行Console.WriteLine(array1.GetLength(0));//得到多少列Console.WriteLine(array1.GetLength(1));//2.获取二维数组中的元素//注意:第一个元素的索引是0  最后一个元素的索引  肯定是长度-1Console.WriteLine(array1[0, 1]);Console.WriteLine(array1[1, 2]);//3.修改二维数组中的元素array1[0, 0] = 99;Console.WriteLine(array1[0, 0]);Console.WriteLine("#######################");//4.遍历二维数组for (int i = 0; i <array1.GetLength(0); i++){for (int j = 0; j < array1.GetLength(1); j++){//i行  0 1//j列  0 1 2Console.WriteLine(array1[i, j]);//0,0  0,1  0,2//1,0  1,1  1,2}}//5.增加数组的元素//数组申明初始化过后  就不能在原有的基础上进行  添加 或者删除了int[,] array2 = new int[3, 3];for (int i = 0; i < array1.GetLength(0); i++){for(int j = 0;j < array1.GetLength(1); j++){array2[i, j] = array1[i,j];}}array1 = array2;array1[2, 0] = 7;array1[2, 1] = 8;array1[2, 2]=9;//6.删除数组的元素//7.查找数组中的元素//如果要在数组中查找一个元素是否等于某个值//通过遍历的形式去查找#endregion//总结://1.概念:同一变量类型的  行列数据集合//2.一定要掌握内容:申明,遍历,增删查改//3.所有的变量类型都可以神明为  二维数组//4.游戏中一般用来储存  矩阵,再控制台小游戏中可以用二维数组  来表示地图格子}}
}

二维数组练习:

 #region 练习题一//将1到10000赋值给一个二维数组  (100行100列)int[,] array1 = new int[100, 100];int index = 1;for (int i = 0; i < array1.GetLength(0); i++){for (int j = 0; j < array1.GetLength(1); j++){array1[i, j] = index;++index;Console.WriteLine(array1[i, j] + " ");}}#endregion

 

 #region 练习题二//将二维数组(4行4列)的右上半部分置零(元素随机1--100)int[,] array2 = new int[4, 4];Random r = new Random();for (int i = 0; i < array2.GetLength(0); i++){for (int j = 0; j < array2.GetLength(1); j++){if (i<=1 && j > 1){array2[i, j] = 0;}else{array2[i, j] = r.Next(1, 101);}Console.Write(array2[i, j] + " ");}Console.WriteLine();}#endregion

 #region 练习题三//求二维数组(3行3列)的对角线元素的和(元素随机1--10)int[,] array3 = new int[3, 3];Random ra = new Random();int sum3 = 0;for (int i = 0; i < array3.GetLength(0); i++){for (int j = 0; j < array3.GetLength(1); j++){array3[i, j] = ra.Next(1, 11);//对角线元素满足的条件if (i == j || i + j == 2){sum3 += array3[i, j];}Console.Write(array3[i, j] + " ");}Console.WriteLine();}Console.WriteLine(sum3);#endregion
 #region 练习题四//求二维数组 (5行5列) 中最大元素值及其行列号(元素随机1--500)int[,] array4=new int[5, 5];Random r5= new Random();//就是记录 最大值的 行列号int maxI = 0;int maxJ = 0;for (int i = 0;i < array4.GetLength(0); i++){for (int j = 0; j < array4.GetLength(1); j++){array4[i, j] = r5.Next(1, 501);//找最大值if (array4[maxI, maxJ] < array4[i,j]){maxI = i;maxJ=j;}Console.Write(array4[i, j] + " ");}Console.WriteLine();}Console.WriteLine("最大值为{0},行{1}列{2}",array4[maxI,maxJ],maxI,maxJ);#endregion

 #region 练习题五//给一个M*N的二维数组,数组元素的值为0或者1,//要求转换数组,将含有1的行和列全部置1int M = 5;int N=5;int[,] array5=new int[M, N];Random ra5=new Random();bool[] hang=new bool[5];bool[] lie=new bool[5];for (int i = 0; i < array5.GetLength(0); i++){for(int j = 0;j < array5.GetLength(1); j++){array5[i, j] = ra5.Next(0, 2);if (array5[i,j]==1){//记录了 当前 行列 是否要变1的标识//要变一 就置truehang[i] = true;lie[i] = true;}Console.WriteLine(array5[i, j] + " ");}Console.WriteLine();}for (int i = 0; i < array5.GetLength(0); i++){for (int j = 0; j < array5.GetLength(1); j++){//满足行和列的标识 是true 就变一if (hang[i] || lie[j]){array5[i, j] = 1;}Console.Write(array5[i, j]+" ");}Console.WriteLine() ;}#endregion

三、交错数组

using System;namespace 交错数组
{internal class Program{static void Main(string[] args){Console.WriteLine("非重点知识:交错数组");#region 知识点一 基本概念//交错数组  是 数组的数组,每个维度的数量可以不同//注意:二维数组的每行的列数相同,交错数组每行的列数可能不同#endregion#region 知识点二 数组的申明//变量类型[][] 交错数组名int[][] arr1;//变量类型[][] 交错数组名 =new 变量类型[行数][];int[][] arr2 = new int[3][];//变量类型[][] 交错数组名 =new 变量类型[行数][]{一维数组1,一维数组2,.......};int[][] arr3 = new int[3][] { new int[] { 1, 2, 3 },new int[] {1,2,3},new int[] { 1}  };//变量类型[][] 交错数组名 =new 变量类型[][]{一维数组1,一维数组2,.......};int[][] arr4 = new int[][] { new int[] { 1, 2, 3 },new int[] {1,2,3},new int[] { 1}  };//变量类型[][] 交错数组名 ={一维数组1,一维数组2,.......};int[][] arr5 ={ new int[] { 1, 2, 3 },new int[] {1,2,3},new int[] { 1}  };#endregion#region 知识点三 数组的使用int[][] array = {new int[] { 1, 2,3 },new int[] { 4, 5,}};//1.数组的长度//行Console.WriteLine(array.GetLength(0));//得到某一行的列数Console.WriteLine(array[0].Length);//2.获取交错数组中的元素//注意:不要越界Console.WriteLine(array[0][1]);//3.修改交错数组中的元素array[0][1] = 99;Console.WriteLine(array[0][1]);//4.遍历交错数组for (int i = 0; i < array.GetLength(0); i++){for (int j = 0; j < array[i].Length; j++){Console.WriteLine(array[i][j] +" ");}Console.WriteLine();}#endregion//总结//1.概念:交错数组 可以存储同一类型的m行不确定列的数据//2.一定要掌握的内容:申明  遍历  增删查改//3. 所有的变量类型都可以申明为  交错数组//4. 一般交错数组很少使用 了解即可}}
}

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

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

相关文章

OpenAI从GPT-4V到GPT-4O,再到GPT-4OMini简介

OpenAI从GPT-4V到GPT-4O&#xff0c;再到GPT-4OMini简介 一、引言 在人工智能领域&#xff0c;OpenAI的GPT系列模型一直是自然语言处理的标杆。随着技术的不断进步&#xff0c;OpenAI推出了多个版本的GPT模型&#xff0c;包括视觉增强的GPT-4V&#xff08;GPT-4 with Vision&…

PeRF: Preemption-enabled RDMA Framework——论文泛读

ATC 2024 Paper 论文阅读笔记整理 问题 远程直接内存访问&#xff08;RDMA&#xff09;为数据密集型应用程序提供了高吞吐量、低延迟和最小的CPU使用率。各种数据密集型应用程序&#xff0c;如大数据分析[4,5]、机器学习[2,11,15,33]、分布式存储[21,27,28,41]和键值存储[20,…

[用AI日进斗金系列]用码上飞在企微接单开发一个项目管理系统!

今天是【日进斗金】系列的第二期文章。 先给不了解这个系列的朋友们介绍一下&#xff0c;在这个系列的文章中&#xff0c;我们将会在企微的工作台的“需求发布页面”中寻找有软件开发需求的用户 并通过自研的L4级自动化智能软件开发平台「码上飞CodeFlying」让AI生成应用以解…

基于面向对象重构模型训练器

引言 深度学习领域我们常用jupyter来演练代码&#xff0c;但实际生产环境中不可能像jupyter一样&#xff0c;所有代码逻辑都在面向过程编程&#xff0c;这会导致代码可复用性差&#xff0c;维护难度高。 前面这篇文章 基于pytorch可视化重学线性回归模型 已经封装了数据加载器…

leetcode 116. 填充每个节点的下一个右侧节点指针

leetcode 116. 填充每个节点的下一个右侧节点指针 题目 给定一个 完美二叉树 &#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树定义如下&#xff1a; struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next …

STM32 智能家居自动化控制系统教程

目录 引言环境准备智能家居自动化控制系统基础代码实现&#xff1a;实现智能家居自动化控制系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;家居控制与优化问题解决方案与优化收尾与总结 1. 引言 智能家…

【第一天】计算机网络 TCP/IP模型和OSI模型,从输入URL到页面显示发生了什么

TCP/IP模型和OSI模型 这两个模型属于计算机网络的体系结构。 OSI模型是七层模型&#xff0c;从上到下包括&#xff1a; 应用层&#xff0c;表示层&#xff0c;会话层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层&#xff0c;物理层 TCP/IP模型是四层模型&…

谷粒商城实战笔记-52~53-商品服务-API-三级分类-新增-修改

文章目录 一&#xff0c;52-商品服务-API-三级分类-新增-新增效果完成1&#xff0c;点击Append按钮&#xff0c;显示弹窗2&#xff0c;测试完整代码 二&#xff0c;53-商品服务-API-三级分类-修改-修改效果完成1&#xff0c;添加Edit按钮并绑定事件2&#xff0c;修改弹窗确定按…

C++学习笔记01-语法基础(问题-解答自查版)

前言 以下问题以Q&A形式记录&#xff0c;基本上都是笔者在初学一轮后&#xff0c;掌握不牢或者频繁忘记的点 Q&A的形式有助于学习过程中时刻关注自己的输入与输出关系&#xff0c;也适合做查漏补缺和复盘。 本文对读者可以用作自查&#xff0c;答案在后面&#xff0…

STM32--HAL库--定时器篇

一&#xff1a;如何配置定时器 打开对应工程串口配置好的工程&#xff08;上一篇博客&#xff09;做如下配置&#xff1a; 定时器的中断溢出时间计算公式是&#xff1a; 由图得T100*1000/100MHz 注&#xff1a;100MHz100000000 所以溢出时间等于1ms 关于上图4的自动重装…

ARM功耗管理之Suspend-to-RAM实验

安全之安全(security)博客目录导读 ARM功耗管理精讲与实战汇总参见&#xff1a;Arm功耗管理精讲与实战 思考&#xff1a;睡眠唤醒实验&#xff1f;压力测试&#xff1f;Suspend-to-Idle/RAM/Disk演示&#xff1f; 1、实验环境准备 2、软件代码准备 3、唤醒源 4、Suspen…

计算机技术基础 (bat 批处理)Note4

计算机技术基础 &#xff08;bat 批处理&#xff09;Note4 本节主要讲解一些 bat 批处理文件中的一些特殊符号&#xff0c;包括 , %, > 和 >>, |, ^, & 和 && 和 ||, " ", ,, ;, ()。 回显屏蔽符 回显屏蔽符 : 这个字符在批处理中的意思是关…

linux 部署flask项目

linux python环境安装: https://blog.csdn.net/weixin_41934979/article/details/140528410 1.创建虚拟环境 python3.12 -m venv .venv 2.激活环境 . .venv/bin/activate 3.安装依赖包(pip3.12 install -r requirements.txt) pip3.12 install -r requirements.txt 4.测试启…

微服务安全——OAuth2详解、授权码模式、SpringAuthorizationServer实战、SSO单点登录、Gateway整合OAuth2

文章目录 Spring Authorization Server介绍OAuth2.0协议介绍角色OAuth2.0协议的运行流程应用场景授权模式详解客户端模式密码模式授权码模式简化模式token刷新模式 OAuth 2.1 协议介绍授权码模式PKCE扩展设备授权码模式拓展授权模式 OpenID Connect 1.0协议Spring Authorizatio…

EXO-chatgpt_api 解释

目录 chatgpt_api 解释 resolve_tinygrad_tokenizer 函数 resolve_tokenizer 函数 调试和日志记录 参数 返回值 初始化方法 __init__ 异步方法 注意事项 chatgpt_api 解释 展示了如何在一个项目中组织和导入各种库、模块和类,以及如何进行一些基本的Web服务设置和配置…

机器学习 | 回归算法原理——最小二乘法

Hi&#xff0c;大家好&#xff0c;我是半亩花海。很早便想学习并总结一本很喜欢的机器学习图书——立石贤吾的《白话机器学习的数学》&#xff0c;可谓通俗易懂&#xff0c;清晰形象。那就在此分享并作为学习笔记来记录我的学习过程吧&#xff01;本章的回归算法原理基于《基于…

智能化数据安全分类分级实践

在当今数字化浪潮的迅猛推进下&#xff0c;企业和组织正遭遇前所未有的数据安全治理挑战。随着海量数据的不断产生、传输、存储和应用&#xff0c;它们面临着来自黑客攻击、内部人员恶意泄露以及数据误操作等多重安全威胁的侵袭。因此&#xff0c;构建一个健全的数据安全治理体…

【快速逆向四/无过程/有源码】浙江工商职业技术学院 统一身份认证

逆向日期&#xff1a;2024.07.23 使用工具&#xff1a;Node.js 加密方法&#xff1a;RSAUtils 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法&#xf…

Unity ShaderLab基础

[原文1] [参考2] 一 基础知识 1. 1 着色器语言分类: 语言说明HLSL基于 OpenGL 的 OpenGL Shading LanguageGLSL基于 DirectX 的 High Level Shading LanguageCGNVIDIA 公司的 C for GraphicShader LabUnity封装了CG,HLSL,GLSL的Unity专用着色器语言,具有跨平台,图形化编程,便…

Modbus转BACnet/IP网关BA100-配硬件说明

在现代自动化系统中&#xff0c;不同设备和系统之间的通信至关重要&#xff0c;Modbus和BACnet/IP协议虽然各有优势&#xff0c;但它们之间的直接通信存在障碍。钡铼Modbus转BACnet/IP网关作为连接这两种协议的桥梁&#xff0c;允许不同系统之间的无缝数据交换。 一、Modbus转…