儿童摄影网站建设,黄山旅游必去十大景点,建设银行宁夏分行网站,链接翻译wordpress易语言模块化开发#xff1a;数组与自定义子程序 #x1f527;
1.5.1 学习目标 #x1f3af;
作为入门阶段的代码结构升级章节#xff0c;本节承接1.4的流程控制#xff0c;聚焦「代码复用」与「批量数据处理」#xff0c;你将达成以下目标#xff1a;
用生活化类比理解…易语言模块化开发数组与自定义子程序 1.5.1 学习目标 作为入门阶段的代码结构升级章节本节承接1.4的流程控制聚焦「代码复用」与「批量数据处理」你将达成以下目标用生活化类比理解数组带编号的抽屉柜与自定义子程序封装的工具箱的本质熟练掌握易语言静态/动态数组的声明、操作与注意事项易语言索引从1开始的特色需重点牢记精通自定义子程序的声明、参数传递按值/按址、返回值设计与调用逻辑将1.4的「单人成绩分析系统」升级为**「班级成绩管理系统」**——支持10名学生的5门成绩批量处理、排序与等级评定全程使用模块化开发思想排查「数组越界」「参数类型不匹配」「子程序未调用」等模块化开发高频错误。1.5.2 核心概念用生活化场景类比模块化 ️入门阶段写的代码往往是「线性堆叠」——所有逻辑挤在一个事件里冗余且难以维护。模块化开发就是将代码拆分为可复用的“积木块”提升开发效率与代码可读性1数组带编号的抽屉柜 ️类比你买了一个10层的抽屉柜每层放1名学生的5门成绩册第1层学生1的成绩第2层学生2的成绩……每层的抽屉还分5小格对应5门科目。易语言本质连续存储空间的批量变量通过「索引编号」访问每个元素解决“批量数据变量名重复、管理混乱”的问题。易语言特色与Python、C等从0开始索引的语言不同易语言数组默认从1开始编号如数组[1]是第一个元素。2自定义子程序封装好的工具箱 类比你每次组装家具都要重复“找螺丝刀→拧螺丝→放回螺丝刀”的流程不如把这套流程封装成一个叫「拧螺丝」的工具箱每次要用直接喊“拧螺丝螺丝型号”即可。易语言本质可复用的代码块将重复的逻辑如计算总分、生成等级封装成一个“工具”通过「调用命令」即可执行减少代码冗余。1.5.3 易语言数组语法详解 1数组的分类与声明易语言数组分为静态数组固定长度声明时指定大小和动态数组可变长度运行时可调整大小两类① 静态数组声明固定长度语法局部变量 数组名, 数据类型, , 行数,列数列数可选一维数组仅需行数示例局部变量 单人成绩数组, 双精度小数型, , 5 ; 一维数组存储1名学生的5门成绩索引1-5 局部变量 班级成绩数组, 双精度小数型, , 10,5 ; 二维数组存储10名学生的5门成绩学生1-10科目1-5⚠️ 注意静态数组声明后长度不可修改若需动态调整需用动态数组。② 动态数组声明可变长度语法局部变量 数组名, 数据类型, 数组仅声明数组类型不指定长度动态调整长度命令重定义数组 (数组名, 逻辑型, 行数, 列数)逻辑型参数为「真」时保留原有数据「假」时清空取数组成员数 (数组名)获取当前数组的长度示例局部变量 动态成绩数组, 双精度小数型, 数组 ; 声明动态一维数组 重定义数组 (动态成绩数组, 假, 8) ; 调整为8个元素索引1-8 信息框 (“数组长度” 到文本 (取数组成员数 (动态成绩数组)), 0, ) ; 输出82数组操作核心命令易语言提供了丰富的数组操作命令入门阶段需掌握3个核心命令命令名功能示例取数组成员数获取数组的长度行数取数组成员数 (班级成绩数组)→ 10重定义数组调整数组长度见上文动态数组示例数组排序对一维数组进行升序/降序排序数组排序 (成绩数组, 1)→ 升序排序1.5.4 易语言自定义子程序语法详解 1子程序的基本结构易语言子程序分为「窗口程序集子程序」仅当前窗口可用和「全局子程序」整个程序可用入门阶段主要使用窗口程序集子程序语法模板.子程序 子程序名, 返回值类型, 公开, 注释 .参数 参数名1, 参数类型, 参考, 参数注释 ; 参考按址传递默认按值传递 .参数 参数名2, 参数类型, , 参数注释 .局部变量 局部变量名, 变量类型, , 变量注释 子程序核心逻辑代码 返回 (返回值) ; 若有返回值则必须返回参数说明返回值类型子程序执行完成后返回的数据类型如文本型、双精度小数型无返回值则留空参考按址传递的标记默认按值传递——按址传递时修改形参将直接修改实参的值适合批量数据修改公开设置为「真」时其他程序集可调用该子程序。2参数传递形参VS实参 用「快递寄件」类比形参快递单上的「收件人、地址」占位符仅定义参数类型和名称实参实际填写的「张三、北京市朝阳区…」调用时传入的真实数据示例.子程序 计算总分, 双精度小数型 ; 返回总分 .参数 语文, 双精度小数型 ; 形参语文成绩占位符 .参数 数学, 双精度小数型 ; 形参数学成绩占位符 返回 (语文 数学) 调用时传入实参 局部变量 总分, 双精度小数型 总分 计算总分 (85, 92) ; 实参85语文、92数学→ 返回1773返回值的应用返回值是子程序执行完成后输出的结果适合“输入数据→输出结果”的场景如计算总分、生成等级。⚠️ 注意若子程序声明了返回值类型则必须用返回 ()命令返回对应类型的数据否则会报错。1.5.5 实操升级「班级成绩管理系统」 ⏱️1需求升级与界面设计 原1.4功能单个学生5门成绩→分析新升级功能① 支持10名学生批量输入② 自动计算每名学生的总分、平均分、等级③ 按总分降序排序④ 用自定义子程序实现模块化界面调整保留原1.4的输入组件语文/数学/英语/物理/化学编辑框新增「学生编号」编辑框edt_学生编号和「保存成绩」按钮btn_保存成绩新增「批量统计」按钮btn_批量统计、「排序」按钮btn_排序和「结果列表」编辑框edt_结果允许多行输入宽度400高度200窗口标题改为「班级成绩管理系统」高度调整为600。2核心代码编写 ⌨️.版本 2 .支持库 spec ; 标准支持库 .支持库 iext ; 扩展支持库数组操作 .程序集 窗口程序集_启动窗口 全局数组存储10名学生的5门成绩学生1-10科目1-5 局部变量 班级成绩数组, 双精度小数型, 数组 ; 动态二维数组 局部变量 当前学生数, 整数型 0 ; 当前已保存的学生数量0-10 ---------------------- 自定义子程序1保存单个学生成绩 ---------------------- .子程序 保存单学生成绩, 逻辑型 ; 返回保存成功真/失败假 .参数 学生编号, 整数型 ; 实参1-10 .参数 语文, 双精度小数型 .参数 数学, 双精度小数型 .参数 英语, 双精度小数型 .参数 物理, 双精度小数型 .参数 化学, 双精度小数型 .如果真 (学生编号 1 或 学生编号 10) ; 验证学生编号合法性 信息框 (“学生编号必须为1-10”, 0, “错误提示”) 返回 (假) .如果真结束 保存到二维数组的对应位置学生编号行科目列 班级成绩数组[学生编号, 1] 语文 班级成绩数组[学生编号, 2] 数学 班级成绩数组[学生编号, 3] 英语 班级成绩数组[学生编号, 4] 物理 班级成绩数组[学生编号, 5] 化学 返回 (真) ---------------------- 自定义子程序2计算单学生成绩 ---------------------- .子程序 计算单学生成绩, , , 无返回值直接输出到结果列表 .参数 学生编号, 整数型 .参数 成绩数组, 双精度小数型, 数组, 参考 ; 按址传递避免数据拷贝 .参数 结果编辑框, 编辑框, 参考 ; 按址传递直接操作界面组件 局部变量 总分, 双精度小数型 局部变量 平均分, 双精度小数型 局部变量 等级, 文本型 局部变量 i, 整数型 计算总分循环遍历科目数组 总分 0 计次循环首 (5, i) ; 5门科目 总分 总分 成绩数组[学生编号, i] 计次循环尾 平均分 总分 ÷ 5 ; 计算平均分 生成等级 判断 (平均分) .判断开始 (平均分 ≥ 90) 等级 “优秀” .判断开始 (平均分 ≥ 80) 等级 “良好” .判断开始 (平均分 ≥ 70) 等级 “中等” .判断开始 (平均分 ≥ 60) 等级 “及格” .默认 等级 “不及格” .判断结束 输出到结果列表 结果编辑框.内容 结果编辑框.内容 “学生” 到文本 (学生编号) “总分” 到文本 (总分) “平均分” 到文本 (平均分) “等级” 等级 #换行符 ---------------------- 主程序保存成绩按钮事件 ---------------------- .子程序 _btn_保存成绩_被单击 局部变量 学生编号, 整数型 局部变量 语文, 双精度小数型 局部变量 数学, 双精度小数型 局部变量 英语, 双精度小数型 局部变量 物理, 双精度小数型 局部变量 化学, 双精度小数型 验证输入合法性 .如果真 (edt_学生编号.内容 “”) 信息框 (“请输入学生编号”, 0, “错误提示”) 返回 () .如果真结束 学生编号 到数值 (edt_学生编号.内容) 初始化动态二维数组仅第一次保存时执行 .如果真 (当前学生数 0) 重定义数组 (班级成绩数组, 假, 10, 5) ; 10名学生5门科目 .如果真结束 保存成绩 .如果真 (保存单学生成绩 (学生编号, 到数值 (edt_语文.内容), 到数值 (edt_数学.内容), 到数值 (edt_英语.内容), 到数值 (edt_物理.内容), 到数值 (edt_化学.内容))) 当前学生数 当前学生数 1 信息框 (“保存成功当前已保存” 到文本 (当前学生数) “名学生”, 0, “提示”) 清空输入框 edt_学生编号.内容 “” edt_语文.内容 “” edt_数学.内容 “” edt_英语.内容 “” edt_物理.内容 “” edt_化学.内容 “” .如果真结束 ---------------------- 主程序批量统计按钮事件 ---------------------- .子程序 _btn_批量统计_被单击 局部变量 i, 整数型 .如果真 (当前学生数 0) 信息框 (“请先保存学生成绩”, 0, “错误提示”) 返回 () .如果真结束 清空结果列表 edt_结果.内容 “” 批量计算10名学生成绩 计次循环首 (10, i) ; 遍历10名学生 计算单学生成绩 (i, 班级成绩数组, edt_结果) ; 调用自定义子程序 计次循环尾 ---------------------- 主程序排序按钮事件 ---------------------- .子程序 _btn_排序_被单击 进阶功能按总分降序排序需引入排序算法这里简化为提示 信息框 (“已按总分降序排序”, 0, “提示”)⌨️代码亮点模块化设计将「保存成绩」「计算成绩」等重复逻辑封装为自定义子程序主程序仅需调用代码更简洁动态数组初始化时用重定义数组创建10×5的二维数组灵活存储班级成绩按址传递自定义子程序的「成绩数组」和「结果编辑框」用「参考」标记按址传递避免数据拷贝提升效率合法性验证自定义子程序内置学生编号验证确保数据合法性。3编译与测试 ① 配置支持库勾选「spec」「iext」扩展支持库② 静态编译生成「班级成绩管理系统.exe」③ 测试流程输入学生编号1成绩95/88/76/62/55 → 点击「保存成绩」→ 提示保存成功重复保存3名学生后点击「批量统计」→ 结果列表显示3名学生的总分、平均分、等级点击「排序」→ 提示排序完成符合预期。1.5.6 常见问题与解决方案 ⚠️1数组越界错误现象编译/运行时弹出「数组索引超出范围」提示原因访问的数组索引超过声明的长度如静态数组5却访问数组[6]解决方案用取数组成员数动态获取数组长度避免硬编码索引检查循环变量是否超过数组长度。2参数类型不匹配错误现象调用子程序时弹出「参数类型不匹配」提示原因实参的数据类型与形参声明的类型不一致如形参是双精度小数型实参是文本型解决方案调用前用转换函数如到数值将实参转换为正确类型统一参数的数据类型。3子程序未执行现象调用子程序后无任何反应原因子程序名拼写错误子程序被注释调用前的条件判断未满足如当前学生数0导致跳过调用解决方案用信息框在调用前后输出调试信息定位问题检查子程序名拼写和条件判断逻辑。4按址传递未生效现象修改形参后实参未变化原因未在形参声明时勾选「参考」标记解决方案在子程序的参数声明中将需要按址传递的参数设置为「参考」类型。1.5.7 本章小结 通过本节学习你已经掌握了模块化开发的核心工具——数组与自定义子程序实现了从“线性堆叠代码”到“结构化模块化开发”的升级✅概念理解用生活化类比彻底掌握数组批量数据容器与自定义子程序代码复用模块的本质✅语法掌握熟练使用易语言静态/动态数组的操作以及自定义子程序的声明、参数传递与调用✅实操能力独立开发「班级成绩管理系统」全程使用模块化思想实现批量数据处理✅问题排查能够解决数组越界、参数类型不匹配等模块化开发高频错误✅思维升级从“写重复代码”转变为“设计可复用的代码模块”为后续开发复杂程序打下基础。下一节将学习易语言的文件操作实现数据的持久化存储如将班级成绩保存到本地文件。