已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
工程应用培训教材第四节 函数与子程序应用背景函数和子程序是构成程序的一个模块,往往是完成一个相对独立的功能,这个模块定义一个入口数据接口,一个中间过程处理算法逻辑,最后给定计算得到的出口数据接口。因此模块的基本过程为:数据接口+算法逻辑+数据接口。将一个程序分解为多个模块过程,可以使程序更清晰,更容易调试,且更容易多人合作开发项目,共同完成一个大项目。下图4-1描述了一个典型的程序构架,这里包括全局类定义,全局变量,局部变量,全局函数,局部函数,程序模块,全局常数,数据文件等等。子程序模块n/局部变量全局类定义子程序模块3/局部变量全局常数全局变量全局函数子程序模块2/局部变量子程序模块1/局部变量程序入口Sub Main()图4-1程序构架知识要点(1)函数的定义与调用一般函数有返回值,故有返回值类型定义,且返回值保存在函数名变量里。函数定义的基本方式如下:public|private|static function 过程名(参数列表) as 返回值类型end function在函数的定义中,过程名就是函数名,他代表一个返回值变量,而参数列表是一组数,代表函数的入口数据,即函数过程中要处理的数据。调用函数的最基本方式为:变量名=过程名(传递参数列表)下面是一个给定三角形的三个边长,计算面积的函数定义:Private Function triangle(ByVal a As Single, ByVal b As Single, ByVal c As Single) As SingleDim r As Singler = (a + b + c) / 2r = r * (r - a) * (r - b) * (r - c)If r s(j + 1) Then tmp = s(j) s(j) = s(j + 1) s(j + 1) = tmp End If Next jNext iEnd Sub调用子过程如下:Const nn = 10Dim s(nn) As IntegerCall order(s, nn)该函数的传递参数有两个,一个是整数数组,一个是整数。本例子就是采用默认的传递地址方式传递整数数组,在子过程中排序后,将排序好的数组传递回来。因此,在调用排序函数的前打印数组与调用函数后打印数组是不一样的。(5)递归函数VB允许子过程或函数内部调用自己,这样的子过程或函数成为递归函数。递归函数在程序的设计中是一个技巧,有时候能够很巧妙的解决很多实际问题。下面是一个简单的递归函数举例:Public Function tree(s As Long) As LongIf s = 0 Then tree = 1Else tree = (s + 1) / tree(s - 1)End IfEnd Function在设计递归函数必须具备递归条件,否则程序陷入死循环的逻辑错误之中。上面这个递归函数的终止条件是s=0。(6)变量的作用域在窗体和标准模块中定义的变量或过程,加Private作限制的,只能在当前模块中使用。在窗体中定义的过程,一般应该用Private加以限制,说明该过程或变量是窗体级变量,只能在窗体模块中使用,在其他模块中是不可见的。在模块中定义的过程,默认的为全局的,也可以加Public作说明。局部变量为在子过程内使用或不加说明使用的变量,只能在过程中使用,离开过程该变量失效.窗体或模块级变量:在通用声名区域中声明的变量,可以在窗体或模块代码中使用,private或Dim,成为窗体级或模块级变量,离开窗体或者模块级变量失效。全局变量:在模块级变量定义中,使用Public或者Global,则该变量可以在整个程序范围内任意地方使用,当在程序运行过程中改变一个全局变量的值,那么当程序再次使用该变量时,就是已经改变的变量值拉。在一个工程中,所有的窗体对象,连接对象,类定义都是全局的,可以在程序的人一地方使用。应用举例:例1:编写一个计算三角形面积的函数,计算边长为(6,8,10)和(15,17,28)的三角形面积,并打印在窗体上。1建立一个标准exe的工程1,在窗体上添加命令按钮12在窗体代码的通用声明部分,写程序Option Explicit告诉VB下面的程序中的变量必须声明才可使用。并编写计算三角形面积的函数如下:Option ExplicitPrivate Function triangle(ByVal a As Single, ByVal b As Single, ByVal c As Single) As SingleDim r As Singler = (a + b + c) / 2r = r * (r - a) * (r - b) * (r - c)If r s(j + 1) Then tmp = s(j) s(j) = s(j + 1) s(j + 1) = tmp End If Next jNext iEnd Sub3.在窗体Form1的代码最顶部的通用声明部分,写程序Option Explicit告诉VB下面的程序中的变量必须声明才可使用。在窗体加载事件中,对全局数组进行初始化,代码如下:Dim i As IntegerRandomizeFor i = 0 To nn s(i) = Int(100 * Rnd) + 1Next i4. 编写命令按钮Command2的Click事件,程序如下:Private Sub Command2_Click()Dim i As IntegerFor i = 0 To nn Print Tab(i * 4); s(i);Next iPrintCall order(s, nn)For i = 0 To nn Print Tab(i * 4); s(i);Next iEnd Sub程序运行结果如下图4-3图4-3 程序运行结果例3:编写一个判断整数是否为素数的函数,输入一个整数,返回一个布尔型变量,为true时代表该整数为素数,为false时不是素数。请计算1到10000之间的所有素数之和1.在已经建立的标准exe工程1中,在窗体form1添加命令按钮32.在窗体代码的通用声明部分,写程序Option Explicit告诉VB下面的程序中的变量必须声明才可使用,并编写判断素数的函数如下:Public Function prime(ByVal m As Long) As Boolean Dim i As Long prime = True For i = 2 To m - 1 If (m Mod i) = 0 Then prime = False Exit For End If Next i End Function3编写Command3的Click事件,调用判断素数函数,计算1到10000的所有素数之和,代码如下:Private Sub Command3_Click()Dim i As LongDim sumprime As Longsumprime = 0For i = 2 To 10000 If prime(i) Then Print i; sumprime = sumprime + i End IfNext iPrintPrint sumprimeEnd Sub程序运行结果如下图4-4图4-4 程序运行结果例4:利用递归函数计算n0时的f(n)=n*f(n-1),其中n=1时f(1)=1。1.在已经建立的标准exe工程1中,在窗体form1添加命令按钮42.在窗体代码的通用声明部分,写程序Option Explicit告诉VB下面的程序中的变量必须声明才可使用,并编写f(n)=n*f(n-1)的递归函数如下:Private Function funn(n As Integer) As LongIf n = 0 Then funn = 1Else funn = n * funn(n - 1)End IfEnd Function3.编写Command4的Click程序,计算打印f(10)的结果,代码如下:Private Sub Command4_Click()Print funn(10)End Sub知识扩展:(1)内部函数Shell内部函数Shell (外部程序全路径,窗体状态常数),用于执行外部的程序,这给用户提供了很多方便之处。例如:Shell cmd, vbNormalFocus表示执行启动命令cmd,并获得焦点,即Console控制台。培训练习:(1)编写函数,用于计算一个数组的平均值,该函数定义如下:Function avg( a as Single,Byval n as Integer) as Single,并请验证函数。(2)编写一个子过程,用于查找一个数组的最大值和最小值,该子过程如下定义:Private Sub seek( a as single,byval n as Integer,mina as Single,maxa as Single),并请验证子
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初升高数学试题及答案
- 2026苏教版六年级数学上册活动课《二进制的秘密》教案
- Unit 7 Happy Birthday!(Period 6)单元复习课同步练2025-2026学年人教版英语七年级上册
- 大肠癌患者的心理支持与护理实践
- 2026青岛考编面试题及答案
- 2026人保审计面试题及答案
- 2026山东法警面试题型及答案
- 奖助贷申请材料季度审核台账辅导员招聘考试参考题库 含答案
- 2026外卖作坊面试题及答案
- 2026西安农行面试题及答案
- 2025年中大综评面试题及答案
- 城镇供水排水行业职业技能竞赛化学检验员(排水化验员)赛项理论考试题库(含答案)
- DZ∕T 0201-2020 矿产地质勘查规范 钨、锡、汞、锑(正式版)
- 2024年银川市金凤区国有资本运营有限公司招聘笔试参考题库附带答案详解
- 城镇低效用地再开发信息管理平台建设解决方案
- 《浙江省城镇既有住宅房屋结构安全排查技术导则(试行)》
- 《济南市城镇燃气领域重大隐患判定指导手册》
- 山东省6项核心制度护理课件
- 细胞与分子生物学
- 教学成果奖培育思考
- 往来皆鸿儒:《白丁会客厅》教育访谈实录一
评论
0/150
提交评论