第5章 子程序的编写与调用e

上传人:飞*** 文档编号:6412958 上传时间:2017-09-11 格式:DOC 页数:13 大小:303KB
返回 下载 相关 举报
第5章 子程序的编写与调用e_第1页
第1页 / 共13页
第5章 子程序的编写与调用e_第2页
第2页 / 共13页
第5章 子程序的编写与调用e_第3页
第3页 / 共13页
第5章 子程序的编写与调用e_第4页
第4页 / 共13页
第5章 子程序的编写与调用e_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《第5章 子程序的编写与调用e》由会员分享,可在线阅读,更多相关《第5章 子程序的编写与调用e(13页珍藏版)》请在金锄头文库上搜索。

1、80第五章 子程序的编写与调用子程序用来对一系列命令进行封装,有利于程序的结构化开发。最早的计算机语言中没有子程序的概念,所有的代码全部写在一起,从程序入口一直执行到程序出口。可想而知,如果代码某处出现一个错误,就会导致一连串的错误,而且无法快速分析错误来源。现代软件工程中对结构化开发提出了明确的要求,特别是随着软件功能越来越复杂,合理划分代码结构是软件成功的基本保障。必须说明的是,子程序的调用过程会占用一定 CPU 处理时间。就普通应用程序来说,以目前计算机的处理速度完全可以忽略这一部分的时间损耗,特别是合理使用子程序能够确保程序代码结构清晰,便于理解和纠错,这是相当值得的。但在大批量数据运

2、算的操作中,子程序互相调用的过程会耗费大量的运算时间,在对运算速度有具体要求的时候,应该优化程序算法和代码结构,尽量避免频繁的子程序调用,如将递归算法转换为非递归算法等。前面章节已经接触到了一些子程序,如“_按钮 1_被单击”子程序。通过对本章的学习,可以加深对子程序的认识,并能熟练的编写及调用子程序。5.1 子程序的初步应用5.1.1 子程序的分类易语言中的子程序可以分为 2 大类:“事件子程序”和“用户自定义子程序” 。前面曾见过的“_按钮 1_被单击”子程序,是在按钮被单击事件产生时程序需要执行的动作。这种对应组件所发生事件的子程序,称作组件的“事件子程序” 。事件子程序的名称、返回值类

3、型和参数个数都是系统定义的,不允许用户任意修改。“用户自定义子程序”是由用户创建,其参数个数和返回值都由用户自行定义的子程序。用户可以根据需要在程序设计时对其任意修改,但在程序编译为可执行程序后就不可能再对其做任何调整。使用子程序的好处很多,譬如有段连续代码在程序中多处被重复调用,此时就可以将其编写到一个子程序中,不仅减少了代码输入的重复劳动,而且需要修改这段代码时,只要修改一个地方即可,而不用在程序中逐个修改;再譬如要实现一个相对复杂的功能,如果全部代码写在一起,发现错误就无法确认问题来源,此时可将问题分解为多个简单81问题,使用子程序逐个实现,这样有利于提高代码的正确性。组件的事件子程序在

4、书中各章均有提及,且格式相对固定,因此本章将重点介绍自定义子程序的定义与使用。5.1.2 用户自定义子程序的创建在窗口程序集中创建用户自定义子程序的基本方法:1在窗口程序集还没有创建时,可以通过在窗体空白处双击鼠标,会自动创建该窗口对应的窗口程序集,并自动生成“_启动窗口_创建完毕”子程序,如图 5-1 所示。或双击按钮等组件,也会创建该窗口对应的窗口程序集及组件对应缺省事件子程序。此时就可以在当前窗口程序集中添加新的子程序了。图 5-1 创建窗口程序集2若窗口对应的程序集已建立,可通过程序面板切换到程序集中操作,或通过窗口菜单切换。定义一个新的子程序可以通过在程序编辑界面按下“Ctrl+N”

5、键;或在程序编辑界面点击鼠标右键,在弹出菜单中选择第一项“新子程序” ;或者选择易语言菜单“插入”“新子程序”来插入新的子程序。如图 5-2 所示。创建后的子程序可以根据需要修改其名称,建议在定义子程序名称时,尽量选择能体现其功能的名称,如“求和” 、 “统计字符”等。82图 5-2 插入新子程序5.1.3 子程序的调用子程序的调用方法和命令的调用方法相同,输入子程序的名称加“() ”就可以调用该子程序。如果子程序要求提供参数,在括号中要按照子程序参数定义的数据类型和参数个数顺序填写参数;如果需要用变量保存子程序返回值,必须使用和子程序返回值相同的数据类型变量。5.1.4 返回值和参数的定义为

6、子程序定义返回值,需要在子程序的“返回值类型”单元格中定义其返回值的数据类型,同时,在子程序任意一个结束分支中,都必须使用“返回() ”命令将欲返回的值回传。为子程序增加参数定义,首先在子程序名称上按回车键增加一个空白参数定义,修改该参数的名称和数据类型即可。参数的“类型”如果为空,系统默认为整数型参数。如果某项参数的“可空”类型未被选中,在调用该子程序时就必须为此参数提供初始值。子程序的参数在本子程序内可以当作变量调用。例如:83上述子程序定义中,子程序名为“相加运算” ,返回值类型为“整数型” ,子程序有2 个整数型参数,分别为“加数 1”和“加数 2”。该子程序可以对参数做相加运算,并将

7、运算结果回传。调用该子程序的方法如下:5.1.5 编写第一个子程序下面实例讲解如何编写子程序。本例中该子程序用来统计一段文本在另一段文本中的个数。首先新建一个易程序,在窗口中添加 2 个编辑框组件和 1 个按钮组件,一个编辑框用来输入被查找的文本,可将其“允许多行”属性设为真便于查看;另一个用来输入欲查找的文本。按钮组件的标题改为“开始查找” 。如图 5-3 所示。图 5-3 查找文本例程界面进入窗口对应的程序集,新建一个子程序,将子程序返回值设置为整数型,并定义2 个参数,分别为“被寻找文本”和“欲寻找文本” ,然后在子程序中输入如下代码:84子程序中使用了“寻找文本() ”命令,该命令会返

8、回指定文本在另一文本中,从指定位置开始最先出现的位置,如果没有找到返回-1。程序每次从上一有效位置之后开始寻找指定文本,直到寻找失败自动跳出循环。循环结束后,使用返回命令,将统计的文本个数回传。在“_按钮 1_被单击”事件子程序中用信息框显示查找的结果,代码如下:试运行程序,在编辑框 1 中输入一段文本,然后在编辑框 2 中输入欲查找的文本,按下按钮,信息框显示查找到的文本个数。如图 5-4 所示。85图 5-4 “寻找文本个数”例程运行结果本例程参看随书光盘中“寻找文本个数.e” 。5.1.5 子程序指针易语言中部分命令函数必须以子程序在内存中的起始地址作为参数,如“启动线程() ”命令;使

9、用某些外部 API 函数时,也同样需要知道调用的子程序在内存中的起始地址。在易语言中,以子程序指针型变量记录子程序在内存中的起始地址。赋值方法为“&”+子程序名。如:变量 1子程序 1赋值之后, “变量 1”(类型为“子程序指针型” )存储的就是“子程序 1”的可执行代码首地址。5.2 子程序的参数属性子程序每个参数都存在“参考” 、 “可空”和“数组”三个属性。这三个属性决定了子程序参数的几种特性。本节将介绍它们作用和用法。5.2.1 参数的“参考”属性如果所传递的参数数据为数组、用户定义数据类型、库定义数据类型、字节集型、文本型数据,则无论此属性是否为真,在子程序内部都可以直接对该参数所对

10、应的外部变量进行修改。如果所传递过来数据类型与相应位置处参数的数据类型不一致但可以相互转换,譬如将“整数型”数据传递到“小数型”的参数中,则在数据被实际传递前,86系统将首先自动将“整数型”数据转换为“小数型” 数据,然后再进行传递。因此在这种情况下,即使本属性为真,在子程序内部也无法直接对该参数所对应的外部变量进行修改。如果参数数据与参数定义数据类型想吻合,将本属性设为真,在子程序内部对此参数的内容的更改,将会相应地反映到调用子程序时所提供的变量上。给子程序参数定义“参考”属性,只要将属性相应位置打上“”即可。下面通过一个例程来观察“参考”属性的作用。新建一个易程序,然后在“_启动窗口”中添

11、加一个画板组件和一个按钮组件。双击按钮组件,在代码编辑界面新建一个子程序,定义子程序名为“测试” ,为该子程序定义 2 个参数,均为整数型;参数名分别设为“参考参数”和“非参考参数” ,将“参考参数”的“参考”属性上打上“”:在“_按钮 1_被单击”子程序中输入代码:运行程序,观察运行结果。如图 5-5 所示。87图 5-5 “参考”属性对变量的影响比较上述程序中,每次点击按钮,就会调用“测试”子程序对 2 个参数进行修改。从画板的显示结果可以看出,对应“参考参数”的变量 1,因子程序内部对相应参数的操作而被修改,而对应“非参考参数”的变量 2 没有发生任何变化。本例程参考随书光盘中的例程“参

12、数的参考属性.e” 。5.2.2 参数的“可空”属性在设计子程序的时候,有些参数可能经常用到相同的数据。如果每次调用该子程序,均需手工指定此数据作为参数初始值,那是一件非常繁琐的事情。在这种情况下,可以将此数据作为该参数的默认值,内置在子程序中,并将参数属性设为“可空”类型。当子程序被调用时,该参数没有指定具体的初始值,就为该参数赋予默认值参与运算。 定义“可空”属性的方法和定义“参考”属性相同,将该属性打上“”即可。如果需要检测当前子程序被调用时,该参数是否传递了数据,可用“是否为空() ”命令进行确认。下面编写一个可以进行加法或减法运算的子程序,来了解“可空”属性的实际应用。第一步,新建一

13、个易程序,在窗口中添加 3 个编辑框组件,2 个按钮组件和 1 个标签组件,将按钮组件的标题分别改为“加法运算”和“减法运算” ,标签组件的标题改为“= ”。如图 5-6 所示。图 5-6 加减法运算例程界面第二步,切换到代码编辑界面,新建一个子程序,将子程序名改为“加减运算” 。给该子程序定义 3 个整数型参数,参数名分别为“被运算数” 、 “运算数”和“进行的运算” ,将“进行的运算”参数的“可空”属性选中,在子程序中输入如下代码:88子程序中, “进行的运算”参数控制子程序进行何种运算,该参数为空进行加法运算,该参数不为空则进行减法运算。第三步,回到“_启动窗口”双击“减法运算”按钮,然

14、后在“_按钮 1_被单击”和“_按钮 2_被单击”子程序中分别输入代码:可以看到,在“_按钮 1_被单击”子程序中,省略了“加减运算”子程序第 3 个参数的填写。最后,运行程序,查看运行后的效果。如图 5-7 所示。图 5-7 加减法运算例程的运行效果本例程可以参考随书光盘中的例程“加减运算.e” 。5.2.3 参数的“数组”属性子程序参数定义了“数组”属性后,即可以给这个参数中填写一个数组变量。前面89已经在“参考”属性讲解中提到,子程序的参数如果是“数组”型变量,就自动具有了“参考”属性。定义参数的“数组”属性,在该参数的数组属性上打“” 。下面就编写一个例程,来了解数组参数的作用。第一步

15、,新建一个易程序,在窗口中添加一个画板和一个按钮组件。第二步,双击按钮组件,在程序设计界面新增一个子程序,然后将子程序名改为“测试数组属性” ,给该子程序定义一个参数,将参数的名称改为“数组” ,并将参数的数组属性选中:第三步,在按钮 1 被单击的子程序中输入代码:最后试运行程序,查看运行效果,如图 5-8 所示。90图 5-8 数组属性例程运行效果运行后,画板显示出调用子程序前后数组变量中各成员的值,在调用子程序后,可以看出数组参数自动具有了参考属性,数组变量中成员的值发生了改变。5.3 编写寻找文件子程序大家可能经常使用 Windows 的搜索文件功能,可以在指定目录及其子目录中寻找特定条

16、件的文件。现在来看该如何编写一个寻找文件的子程序,实现多级目录的文件搜索。这是一个递归算法:子程序在指定的根目录中检索所有文件,对比文件名。然后检索根目录中的所有子目录,对每一个子目录调用自身子程序深入其中再次进行文件检索。不断的自身调用直到所有的子目录全部检索完毕。第一步,新建一个易程序,按图59所示,在窗口中添加列表框组件与按钮组件各一个,编辑框组件与标签组件各两个。按钮与标签的标题按图中所示修改。91图 5-9 搜索文件例程界面第二步,切换到代码设计界面,新建一个子程序,将子程序名改为“搜索文件” ,给子程序定义 2 个文本型参数,分别为“目录名”和“文件名” ,可以将“文件名”参数的“可空”属性选中,默认文件名参数为空的时候就寻找所有文件。在子程序中输入代码:92子程序中首先对参数进行有效性检查,第一个“判断循环首() ”命令,将指定目录的所有匹配文件加入到列表框中;第二个“判断循环首() ”命令用来搜索子目录,如果搜索到子目录,并且搜索到

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号