




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章 过 程 7.1 过程的概念及其形式 过程是完成某一特定功能的一段程序,又称子程序。结构化程序设计的核心思想就是将一个复杂的问题不断细分成多个结构简单、功能单一的模块,每个模块只完成一个相对独立的功能,多个模块组合起来完成复杂的功能,在Visual Basic中,将这种程序模块称为过程,一个大的应用程序可以包含多个过程。过程的应用大大提高了代码的可重用性,简化了编程,使程序更具有可读性。 过程与过程之间有调用与被调用的关系,一个过程可以调用其他的过程,也可以被其他的过程调用,当一个过程调用其他的过程时,被调用过程执行完毕后,返回调用过程的下一条语句继续执行,如图7-1所示。,在Visual Basic中,过程可以分为两大类:Sub过程(子过程)和Function过程(函数过程)。Sub过程和Function过程最基本的区别是:Sub过程可以没有返回值,也可以有一个或多个返回值,即Sub过程可以有0多个返回值;Function过程只有一个返回值。 7.2 Sub过程 Sub过程可以分为:事件过程和通用过程两类。 7.2.1 事件过程 事件过程指的是当对象的某个事件被触发时,去执行对应这个事件的一段程序,事件过程是Visual Basic应用程序的主体。,1事件过程名 事件过程依附于窗体或控件,依附于窗体的事件过程名由Form、短下划线“_”和事件名三个部分组成;依附于控件的事件过程名由控件名(控件的Name属性值)、短下划线“_”和事件名三个部分组成。,2事件过程的格式 依附于窗体或控件的事件过程的一般格式如下: Private Sub Form|控件名_事件名() End Sub 注意: (1)事件过程的开始和结束语句,最好由系统用事件过程模板自动生成; (2)由于控件的事件过程名与控件名紧密相关,因此,如果生成了事件过程以后,再改变控件名,则控件的事件过程名中的控件名不会自动更改。,7.2.2 通用过程及其定义 通用过程又称为用户自定义的Sub过程,一般用于完成一个通用功能,通用过程不依赖于任何对象。通用过程的定义格式如下:,Private|Public|Static Sub () Exit Sub End Sub 说明: (1)Sub前的关键字Private、Public决定了通用过程的作用域;Static决定了过程中过程级变量的生存期(所有的过程级变量都是静态变量,前面章节已经介绍); (2)通用过程名应满足标识符的命名规则,而且,在同一个模块中过程名要惟一; (3)当通用过程有多个形式参数时,相互之间用逗号分隔; (4)在通用过程中不能再定义过程,但可以调用其他的过程。,创建通用过程的方法有如下两种: (1)直接在代码窗口中输入,只要输入通用过程的开始,按下回车键后,通用过程的结束语句End Sub会自动产生; (2)执行“工具”菜单下的“添加过程”命令,打开“添加过程”对话框,如图7-2所示,输入名称,选择“类型”和“范围”,单击“确定”按钮即可。,7.2.3 Sub过程的调用 调用Sub过程的方法有两种: (1)Call (实参表) (2) 实参表,说明: (1)实参表是实际参数列表,当过程有多个实际参数时,相互之间用逗号分隔; (2)用第一种方法调用Sub过程时,实参表必须用圆括号括起来;用第二种方法调用Sub过程时,实参表不能用圆括号括起来,但过程名与实参表之间要加一个空格。,【例7-1】编写一个求n!的通用过程,在由四个命令按钮组成的控件数组中分别计算4!、6!、8!以及110的阶乘和并输出,如图7-3所示。,【例7-2】编写一个求三个数的最大值和最小值的通用过程,在命令按钮的Click事件过程中,任意输入三个数调用该通用过程求它们的最大值和最小值并输出,如图7-4所示。,7.3 滚动条控件 滚动条通常用于附加在窗口上帮助观察数据或确定位置,也可以作为数据输入的工具或者数量、进度的指示器。 滚动条控件有两种:水平滚动条和垂直滚动条。两种滚动条的结构和操作完全一样。 1滚动条的常用属性 (1)Value属性 设置或返回滚动条滑块的当前位置值。,(2)Max属性 滚动条能表示的最大值,范围为-3276832767。当滑块位于水平滚动条的最右端或垂直滚动条的最下端时,Value属性所取的值。 (3)Min属性 滚动条能表示的最小值,范围为-3276832767。当滑块位于水平滚动条的最左端或垂直滚动条的最上端时,Value属性所取的值。 (4)LargeValue属性 当用鼠标单击滚动框的空白处,或滚动条获得焦点时按下PageUp或PageDown键时,Value属性值的改变量。 (5)SmallValue属性 当用鼠标单击滚动条两端的箭头,或滚动条获得焦点时按下箭头键、或、键时,Value属性值的改变量。,2滚动条的常用事件 (1)Change事件 当移动滑块或在代码中改变Value属性值时触发滚动条的Change事件。 (2)Scroll事件 当拖动滑块时触发滚动条的Scroll事件。,【例7-3】设计一个调色板。,7.4 Function过程 在Visual Basic中,提供了大量的内部函数,用户编写程序时可以直接调用内部函数,为了完成特定的功能,用户也可以编写自己的函数,Function过程就是用户自定义的函数过程。Function过程的调用与内部函数的调用完全相同。,7.4.1 Function过程的定义 Function过程的定义格式如下: Private|Public|Static Function () As Exit Function = End Function,说明:Function前的三个关键字的含义以及对函数过程名、形参和函数过程的要求与通用过程相同。 Function过程的创建方法与通用过程的创建方法一样也有两种方法。 需要强调的是:Function过程的返回值在函数过程中一定要赋给函数过程名。,7.4.2 Function过程的调用 Function过程的一般调用格式为: () 其中,实参表可以是一个或多个参数,参数可以是常量、变量或表达式,如有多个参数,参数之间用逗号分隔,如果函数没有参数,调用时可以省略圆括号。 Function过程在程序代码中的具体调用形式主要有四种(前面章节已经介绍)。,【例7-4】将例7-1中的求n!的通用过程改成Function过程实现同样的功能。,【例7-5】输入一个正整数n的值,计算s=1*(1+2)*(1+2+3)*(1+2+3+n)的值,要求先编写求1+2+3+k的Function过程,然后调用这个Function过程求前n项的乘积,如图7-6所示。,【例7-6】编写一个判断正整数n是否是素数的Function过程,调用这个过程求1001000之间所有的孪生素数并输出,如图7-7所示。 孪生素数是指两个素数的差值为2的素数,如:101和103就是孪生素数。,【例7-7】编写用辗转相除法求两个正整数的最大公约数的Function过程,调用这个Function过程求四个正整数的最大公约数并输出,如图7-8所示。,7.5 过程参数 7.5.1 形式参数与实际参数 在Visual Basic中,调用过程时,使用参数传递的方式实现调用过程与被调用过程之间的数据传递,即将调用过程中的实际参数传给被调用过程对应的形式参数。 形式参数简称形参,是在定义Sub过程或Function过程时,出现在圆括号中的变量名或数组名,其作用是接受调用程序传来的数据;实际参数简称实参,是在调用Sub过程或Function过程时,传递给Sub过程或Function过程的常量、变量、表达式或数组。 需要强调的是: (1)在定义Sub过程或Function过程时,在圆括号中定义的形参表,即变量名或数组名(),只需要在过程的圆括号中写成:变量名|数组名() As 数据类型; (2)形参表与实参表中对应位置的形参名和实参名可以相同也可以不同,Visual Basic都认为不同;,(3)在传递参数时,一般情况下,要求形参表与实参表中参数的个数、数据类型和位置顺序都必须一一对应,除非在形参的前面加上关键字Optional或ParamArray; (4)当数组作为过程的形参和实参时,必须写成数组名和空的圆括号“()”; (5)实参如果是变量也必须定义,而且数据类型与对应的形参要相同; (6)不能用定长字符串变量或定长字符串数组作为形参,但可以用定长字符串变量作为实参。 过程形参的格式如下: ByVal|ByRef|Optional|ParamArray | As ,7.5.2 按地址传递与按值传递参数 在过程形参的前面加上关键字ByRef或省略关键字,表示按地址或者按引用传递参数,简称传地址,默认的过程参数传递方式是传地址;在过程形参的前面加上关键字ByVal,表示按值传递参数,简称传值。,1传地址 传地址指的是用实参去代替或者替换对应的形参,由实参本身参与过程的计算,因此,在过程中如果改变了形参的值,实际上就改变了对应的实参的值。,【例7-8】传地址调用过程。输入两个正整数,调用例7-7中用辗转相除法求两个正整数的最大公约数的Function过程,求它们的最大公约数并输出,如图7-9所示。,【例7-9】传值调用过程。将例7-7中用辗转相除法求两个正整数的最大公约数的Function过程的形参m、n前分别加上关键字ByVal,或者调用这个Function过程时给实参a、b加上圆括号,输入两个正整数,求它们的最大公约数并输出,如图7-10所示。,2传值 传值指的是将实参的值复制给对应的形参,实参本身不参与过程的计算,而由形参参与过程的计算,因此,在过程中即使改变了形参的值,实参的值不变。 如果定义过程时采用的是默认方式传地址,调用过程时只要将实参用圆括号括起来,也可以变成传值。,7.5.3 可选参数及其默认值 在过程形参的前面加上关键字Optional表示可选的参数,调用该过程时,可以提供或不提供(省略)与此形参相对应的实参,但在过程中需要用函数IsMissing()来处理。当在过程的某个形参前加上关键字Optional后,其后所有的形参都成为可选的参数,因此,可选的参数一般放在形参表的后面,而且数据类型为Variant(默认数据类型)。,【例7-10】编写一个Function过程,调用该过程计算两个数的和、三个数的和、四个数的和并输出,如图7-11所示。,加上关键字Optional的可选参数,还可以设置默认值(缺省值),当一个可选的形参设置了默认值后,调用过程时如果为该形参传递实参则接受实参的值,否则,将使用默认值。,【例7-11】将例7-10中Function过程的形参c、d的默认值设为0,调用该过程计算两个数的和、三个数的和、四个数的和并输出。,7.5.4 可变参数 在过程形参的前面加上关键字ParamArray可以传递任意个数的参数,但其后的形参必须是Variant类型(默认数据类型)的数组,而且只能用于形参表的最后一个参数,ParamArray不能与ByVal、ByRef或Optional关键字一起使用。,【例7-12】将例7-10中Function过程的形参设为可变参数,调用该过程计算两个数的和、三个数的和、四个数的和并输出。,7.5.5 数组参数 在通用过程或函数过程中,可以将数组或数组元素作为参数进行传递,当传递整个数组,即将数组作为过程的形参和实参时,必须写成数组名和空的圆括号“()”的形式;数组参数只能按地址传递,不能按值传递,即不能在数组形参前加关键字ByVal。,【例7-13】数组作为过程的参数。 分别定义有10个、15个、20个元素的三个一维数组,并给这三个数组的元素赋随机的两位正整数并输出,编写一个用比较排序法按从大到小的顺序排列数组元素的Sub过程,调用该过程分别对这三个数组排序并输出,如图7-12所示。,7.5.6 对象参数 在Visual Basic中,既可以用变量或数组作为过程的参数,也可以用对象,即窗体或控件作为过程的参数。对象参数只能按地址传递,不能按值传递,即不能在对象形参前加关键字ByVal。 1使用窗体参数 使用窗体作为过程的参数时,形参的数据类型为Form,实参为窗体名。,【例7-14】窗体作为过程的参数。 新建一个工程,再添加2个窗体Form2、Form3;在Form1中画1个计时器控件Timer1,设置其Interval属性值为1000,在Form1中编写一个使用窗体作为参数的过程,该过程可以随机改变窗体在屏幕上的位置和背景颜色,编写程序,在Timer1的Timer事件过程中调用这个过程,每隔1秒变换一个窗体的位置和背景颜色。,【例7-15】控件作为过程的参数。 在窗体上画1个图片框Picture1、1个图像控件Image1、1个命令按钮Command1,设置Command1的Style属性值为1-Graphical,分别设置这三个控件的Picture属性;再画1个计时器控件Timer1,设置其Interval属性值为500,编写一个使用控件作为参数的过程,该过程可以随机改变控件在窗体上的位置,编写程序,在Timer1的Timer事件过程中调用这个过程,每隔500毫秒改变一个控件的位置,如图7-13所示。,2使用控件参数 使用控件作为过程的参数时,形参的数据类型为Control,实参为控件名。,7.6 过程的递归调用 一个过程直接或间接地调用过程本身称为过程的递归调用。过程的递归可以设计出结构清晰的程序,但递归次数的增加会占用较多的内存空间,程序执行的效率不高。 设计递归过程时,需要考虑两个要素:(1)递归终止条件;(2)递归函数,即具有能趋向递归终止条件的递归表示形式。一个递归过程只有具备了这两个要素,才能在有限次计算后得出结果。,【例7-16】将求n!的Function过程写成递归形式,在文本框中输入一个正整数,按回车键调用这个Function过程计算其阶乘,如图7-14所示。 n!的递归形式及其递归函数表示如下:,n=0,n0,n=0,n0,递归过程与非递归
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络安全架构的设计原则试题及答案
- 网络用户管理与试题及答案
- 计算机二级VB考试挑战试题及答案
- 2025年软考设计师职业道德与试题及答案
- 2025年创新型企业的成长战略试题及答案
- 战略目标设定与评估试题及答案
- 网络管理系统设计试题及答案
- 软件设计师考试常见难点解析试题及答案
- 项目进度管理工具与技巧试题及答案
- 2025届山东省菏泽市牡丹区胡集中学八年级数学第二学期期末学业质量监测模拟试题含解析
- 高处作业力学基础知识
- 幼儿园科学发现室环境布置设计方案
- 《企业的绩效管理问题与优化策略的分析案例-以舍得酒业公司为例9100字》
- 武装部面试题及答案
- T-NXS 0116T-2024 宁夏滩羊肉质量追溯标准体系构建应用技术规范
- 微弱的光亮(2024年山东烟台中考语文试卷记叙文阅读试题)
- 康复医疗评定课件
- 2025年浙江省金融控股有限公司招聘笔试参考题库含答案解析
- 交管12123驾驶证学法减分题库及答案(学法免分100题完整版)
- 2024-2030年中国家电维修市场发展现状及前景趋势分析报告
- 国家开放大学《煤矿安全管理》形考作业1-3
评论
0/150
提交评论