函数和过程.ppt
关于函数和过程现在学习的是第1页,共22页4.1.1 函数过程的编写与调用 函数过程的编写函数过程的编写 格式:Function (形参列表) As 函数体 End Function 函数体为实现运算的若干语句,其中至少应有1个赋值语句为函数名赋值,作为函数的返回值。 将调用、被调用过程之间要相互传递的数据作为形参(形式参数)。(3)编写时只管如何根据参数,完成功能,返回参数即可。不管调用者的具体程序。现在学习的是第2页,共22页 函数过程的调用函数过程的调用 定义为Private的任何过程,只能被其所在窗体的过程调用。 调用格式为 函数名(实参列表) 定义为Public(缺省属性)的任何过程,可以被当前工程中其它窗体中的过程调用。 调用格式为 窗体名.函数名(实参列表)现在学习的是第3页,共22页 一般应像使用VB内部函数一样来调用Function过程,调用后返回结果是1个函数值。也可以像后面所介绍的、调用Sub过程那样用Call命令调用,如Call函数名(实参列表),但用这种方式调用函数时,VB系统将放弃返回值,这样你就得不到想要的函数值了。 现在学习的是第4页,共22页例42输出65000间所有的亲密数对(若a,b为一亲密数对,则a因子和等于b,且b的因子和等于a,但ab.分析: a从65000之间循环求a的因子和b求b的因子和c如果a=c且ab,则a,b为亲密数对求因子和为一函数现在学习的是第5页,共22页例43显示21000之间的素数。分析: n从21000之间循环 调用判断n是否为素数的函数,若返回值为true,则n为素数输出n.现在学习的是第6页,共22页4.1.2 SUB过程的编写与调用 SUB过程的编写过程的编写, 格式: Public|PrivateStatic Sub (形参列表) SUB过程体End sub 在在Sub过程体中,不得为过程体中,不得为Sub过程名赋值。过程名赋值。 函数名在函数体中一定要被赋值,因为函数调用结束后,函数名要用其获得的值参加调用处表达式的计算。而SUB过程的名不能被赋值,这是函数过程和这是函数过程和SUB过程的最主要的区别之一。过程的最主要的区别之一。 现在学习的是第7页,共22页 SUB过程的调用过程的调用 调用格式 Call Sub过程名(实参列表) 或 Sub过程名 实参列表 Public或Private属性对过程调用的影响,与函数过程相同。例46编程,在窗体上显示如下图案分析:每一行打印m个空格,n个字符c * * * # # # #现在学习的是第8页,共22页例4-7 编程,将数组中各元素按值从大到小排序,要求将数组排序编写为Sub过程。为什么在过程中改变了变量的值,在主调函数中的实参的值也作了相应的改变? (例4a)现在学习的是第9页,共22页4.2 参数传递规则 当调用过程时,实参向形参传递的规则如下: 按值传递按值传递形参声明处变量名前的修饰符是“Byval”,为按值传递,实参应为与形参同类型的表达式。 过程(函数)中,对按值传递形参变量值的改变不会导致对应实参变量值的改变。保证了其“安全性”传递过程:传递过程:创建形参变量创建形参变量将实参的值复制给形参将实参的值复制给形参过程或函数调用结束,形参变量被取消过程或函数调用结束,形参变量被取消现在学习的是第10页,共22页 按地址传递按地址传递缺省属性(或修饰符为Byref)为按地址传递,实参应为与形参同类型的变量(数组)名。 如果实参是一个常量或表达式,尽管形参声明为按地址传递,实际还是按值传递。 按地址传递时,过程中对形参变量值的改变即是对实参变量的改变。 形参为数组时,对应的实参为同类型的数组名,数组参数只数组参数只有按地址传递有按地址传递1种方式。种方式。现在学习的是第11页,共22页例4-9 编制Sub过程,用于在数组中找出最大值、最小值。例4_10 编程,将输入在文本框中的文本删除其中空格符后、在标签控件内输出。 现在学习的是第12页,共22页实验练习目的:掌握函数和过程的定义及调用、参数的传递规则内容:上机编程,并调试以下程序1、编制一函数,计算double类型数组所有元素的平均值.2、找出一维数组中的最大值、最小值及其下标号(参考例49)现在学习的是第13页,共22页定义数组输入数组大小,重新定义数组输入数组元素求和输出平均值现在学习的是第14页,共22页4.3多模块程序设计VB工程的组成:窗体模块标准模块类模块作业九:可以在一个窗体模块中完成,将求平均值的函数定义为Private,该函数只能在该窗体中被调用。其它模块不能调用该函数。这样程序的共用性差。现在学习的是第15页,共22页4.3.1 标准模块1、创建标准模块(作业九的修改)将一些通用函数写在标准模块中, 工程添加模块确定2、跨模块调用用关键字Private修饰的函数或过程,只能在本模块中调用。标准模块中用Public修饰的函数或过程,可以被工程中所有模块调用。在窗体模块中,用Public修饰的函数或过程,可以被工程中所有其他模块调用。现在学习的是第16页,共22页4.3.2 变量作用域(例411) 局部量局部量在事件、函数、Sub过程中用Dim语句声明的变量(包括数组)、或用Const语句声明的符号常量是局部量。局部量的作用域限于它们所在过程它们所在过程,而不能被其它过程引用。 模块级量模块级量在模块的通用对象声明部分,用Dim或Private语句声明的变量(包括数组)、用Const或Private Const语句声明的符号常量,是模块级量。模块级量的作用域限于它们所在的模块,即不能被其它窗体的过程引用。现在学习的是第17页,共22页 全局量全局量在模块的通用对象声明部分,用Public语句声明的变量(不不包括数组包括数组)、用Public Const语句声明的符号常量,是全局量。全局量可以在整个工程中被引用,其它窗体引用时,在变量名或符号常量名前,必须指出窗体名称。 现在学习的是第18页,共22页4.3.3 变量的生存期 (例412)1.动态变量动态变量动态变量是指程序运行进入变量所在的过程时,才分配给该变量内存空间,退出该过程时,变量所占的内存空间自动释放,其值消失。2. 静态变量静态变量静态变量是指程序运行期间虽然退出变量所在的过程,其值仍被保留的变量,即变量所占的内存空间没有释放。当以后再次进入该过程时,原来变量的值可以继续使用。使用Static语句在过程中声明的局部变量就属于静态变量。静态变量只能在过程中声明,而不能在通用对象声明静态变量只能在过程中声明,而不能在通用对象声明部分声明。部分声明。现在学习的是第19页,共22页为使过程中所有的局部变量都为静态变量,可在过程头部加上关键字Static。如: Private Static Sub aa()这样,在Sub过程aa中,无论用Static、Dim或Private声明的变量,还是隐式声明的变量,都成为静态变量。函数过程、自定义过程均可以在过程头部加上关键字函数过程、自定义过程均可以在过程头部加上关键字Static例2-45 动态变量和静态变量使用示例。 现在学习的是第20页,共22页上机练习1、用随机函数产生10100之间的50个随机整数。在这50个随机整数中,删除重复的数,从小到大排序,并输出。要求:用过程产生50个10100之间的数用过程删除重复数用函数完成排序用过程输出数组中的元素 现在学习的是第21页,共22页感谢大家观看8/21/2022现在学习的是第22页,共22页