分享
分销 收藏 举报 申诉 / 34

类型第8章计算机基础.ppt

  • 上传人:a199****6536
  • 文档编号:14598979
  • 上传时间:2026-10-18
  • 格式:PPT
  • 页数:34
  • 大小:113.54KB
  • 下载积分:10 金币
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    计算机 基础
    资源描述:
    ,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第8章,过程,本章学习目标,明确过程的概念,掌握sub子过程和function子过程的定义和调用,理解过程调用时实参和形参的关系,掌握参数的传值方式和传递地址方式,理解和掌握VB的不同模块中过程的作用域和调用形式,第8章 过程,过程的概念,一个过程就是由若干条语句构成、具有相对独立功能的一段程序代码。,一个完整的程序通常由一个主过程和若干个子过程组成,主过程可根据需要调用子过程来实现相应的功能,而且各子过程间也能相互调用。,每一个过程就是一个完整的功能模块,由顺序、选择和循环三种基本结构组成。,过程的分类,在Visual Basic 6.0中,可以使用的过程包括子程序过程、函数过程、属性过程、事件过程四种类型。,事件过程,是,VB,应用程序的主体,能够很好地支持,VB,以事件驱动的编程机制。这类过程一般是由,VB,系统创建的,用户也可以自己创建事件过程,在触发相应的事件时会自动执行事件过程中的程序代码。,子程序过程,也称为自定义子过程,是由用户自己创建的一类过程。它不依附于,VB,的某一对象,独立于事件过程之外,可供其他自定义过程或事件过程进行调用。,函数过程,即,Function,过程。这也是由用户自己创建的一类过程,同事件过程、自定义过程的主要区别在于函数过程要求有一定的返回值。,属性过程,是由用户自己创建的一类过程,用来返回或设置属性的值及设置对象的引用等。,8.1 Sub过程,子程序过程和事件过程的定义都是使用Sub关键字开头,这两类过程统称为Sub过程。为更好地理解这两类过程,做如下区别:,子程序过程不依附于某一对象,而事件过程必须是与某一对象相关联的。,子程序过程是由用户自己创建的,而事件过程主要是由,VB,系统创建的。,事件过程在事件被触发时会自动调用,而子程序过程则必须通过调用语句的调用才能被执行,且可以多次被调用。,如不做特殊说明,以下提到的事件过程都是指,VB,系统预定义的事件过程,如窗体的,Load,事件、命令按钮的,Click,事件等。,8.1.1 Sub过程的创建,创建Sub过程的方法有两种:,利用“工具”菜单下的“添加过程”命令,在代码窗口中直接定义,注意:要创建Sub过程,必须事先打开代码窗口,声明Sub过程的语句及语法,不管是通过“添加过程”对话框创建Sub过程,还是在代码编辑窗口中直接定义,都必须明确声明Sub过程的语句的语法。,【格式】,Public|Private Static Sub(形参列表),局部变量或符号常量的声明,语句序列,Exit Sub,语句序列,End Sub,【说明】,子程序过程以,Sub,开头,,End Sub,结束,二者之间的语句序列称为过程体。,Public|Private,用于定义过程的作用范围,对应于“添加过程”对话框中的“范围”选项。关键字,Public,和,Private,只能二选一,其中,Public,声明的过程为全局级,可以在当前工程的所有模块中被调用;,Private,声明的过程为模块级,只能在声明该过程的模块中被调用。缺省时,声明的过程是全局级的。,Static,声明在该过程中定义的所有变量都是静态变量,对应于“添加过程”对话框中“所有本地变量为静态变量”选项。,子过程名是必选项,用于定义过程的名称,命名规则同变量的命名规则一致。,参数列表用于定义过程的形式参数,每一个参数相当于一个变量,其声明的形式类似于变量的声明,如果有多个参数,参数与参数之间用逗号进行分隔。,语句序列是过程要执行的程序代码,用于规定过程要完成的功能。,Exit Sub,是退出子过程语句,该语句可出现在过程中的任意一个语句位置。程序一旦执行该语句,将退出当前过程的执行,返回到主调过程中调用该过程语句的下一条语句上继续执行。,End Sub,标识子过程的结束。一旦执行,End Sub,语句,将同样结束当前子过程的调用,返回到主调过程中继续执行。,8.1.2 Sub过程的调用,过程的调用是指实际去执行过程中的语句序列。通常,如果在过程A中调用了过程B,则称A为主调过程,B为被调过程。,主调过程和被调过程是一个相对的概念,如果过程B又调用了过程C,则过程C为被调过程,而过程B对过程C来讲则是主调过程。,图8-4 过程调用示意图,主调过程A,过程B调用语句,语句i,End Sub,被调过程B,语句i,End Sub,8.1.2 Sub过程的调用,子程序过程必须通过调用语句显式调用才能执行过程中的代码。调用子程序过程的语句有如下两种形式:,【格式1】Call(参数列表),【格式2】参数列表,【说明】,参数列表中的参数为实际参数,即在过程调用时传递给过程的实际量,能够为被调过程的形式参数接收。主调过程的实参传递给被调过程的形参时要保持一一对应的关系。如果有多个实参,参数与参数之间用逗号隔开。,用,Call,语句调用过程时,参数列表必须包含在括号之内,如果没有参数(也称无参过程),可以省略掉括号;而使用格式,2,调用过程时,必须省略括号。,例8-1,子程序过程的创建和调用,8.2 Function过程,VB中的Function过程,即函数过程是过程的另一种表现形式。为完成函数要求的运算,必须首先要对函数进行定义;在表达式中调用函数时,函数运算的结果作为函数的返回值返回到主调过程,这也是Function过程与Sub过程的不同点。,由VB系统的设计者预先编写完成后封装在VB系统文件中的函数过程,是VB系统预定义的内部函数,只要启动VB的系统环境,用户就可以使用这些内部函数,不需要重新定义,也不必关心函数过程的内部代码是如何编写的。,8.2.1 Function过程的创建,与子程序过程类似,创建Function过程也有两种方法:,利用“工具”菜单下的“添加过程”命令,在代码编辑窗口直接定义,不管是通过“添加过程”命令,还是直接在代码编辑窗口中定义函数过程,都必须遵守,Function,过程定义的语法格式,Public|Private Static Function 函数过程名(形参列表)As 类型,局部变量或符号常量的声明,语句序列,函数过程名=表达式,Exit Function,语句序列,函数过程名=表达式,End Function,Function,过程以,Function,开头,以,End Function,结尾,两者之间描述过程操作的语句序列称为函数体。,格式中,Public,、,Private,、,Static,、,Exit Function,、函数过程名、形参列表同,Sub,过程的含义相同。,“,As,类型”用于指定,Function,过程返回值的类型,可以为,Integer,、,Long,、,Single,、,Currency,、,String,等,缺省时为,Variant,类型。,由,Function,过程返回的值通过“函数过程名,=,表达式”赋给函数过程名,在调用函数过程时由主调过程获取到该返回值。如果没有“函数过程名,=,表达式”这条语句,则,Function,过程返回一个默认值,其中数值类型函数过程返回,0,,字符串型函数过程返回一个空字符串,,Variant,类型函数过程返回,Empty,。,例8-2 定义一个求绝对值的函数过程,8.2.2 Function过程的调用,自定义Function过程的调用与VB内部函数的调用方法一样,其一般形式为:,【格式】函数过程名(实参列表),Function过程的调用同Sub过程一样,一旦调用一个Function过程,将转去执行相应的Function过程的程序代码。但所不同的是,Function过程调用结束时,其运算结果将返回到主调程序。因此,Function过程的调用一般不能作为单独的一条语句出现,而是必须出现在表达式中。,例8-3,编写计算阶乘的函数Fact,并求1!+2!+.+10!的结果。,例8-4,求2-100之间的质数。,8.3 过程中的参数传递,在调用过程时,主调过程和被调过程之间会有一些数据信息的传递,这种数据信息传递是双向的:主调过程要求被调过程根据其给出的数据信息进行相应的处理,而被调过程往往要将处理所得的结果再传回主调过程。,主调过程和被调过程之间的信息传递有两种方式:通过非局部变量传递或通过参数传递。通过非局部变量传递是指在过程中直接处理非局部变量,如模块级变量,能够在多个不同的过程中使用,从而实现在过程之间的信息传递。通过参数传递是指在调用过程时,主调过程给出的实际参数和被调过程中的形式参数相结合,即“虚实结合”的方式,将主调过程中的实际参数所包含的数据信息传递给被调过程中的形式参数。,8.3.1 形式参数和实际参数,形式参数是指在定义过程时,出现在Sub或Function语句的参数列表中的变量,用于接收从主调过程传递来的数据。,实际参数是指在调用过程时,过程调用语句的参数列表中出现的实际的量,代表了传递给形参的数据信息。根据定义过程时对于形式参数的声明,实际参数可以是常量、变量、表达式或数组等。,8.3.1 形式参数和实际参数,在定义过程时,形式参数的语法格式如下:,ByVal|ByRefOptionalParamArray 形参名()As 类型=缺省值,【说明】,ByVal|ByRef,,用于规定参数的传递方式。,ByVal,表示该参数按值传递;,ByRef,表示该参数按地址传递。缺省时是,ByRef,方式。,Optional,,表明该参数是可选的。若某参数是可选的,则在形参列表中该参数后面的所有参数都必须是可选的,即都要用,Optional,关键字来声明。,ParamArray,,仅用于形参列表中的最后一个参数,说明该参数是由不定个数的,Variant,类型的元素所组成的一个数组。,形参名,(),,用于规定形式参数的名称。如果形式参数是数组,则要在数组名后加一对空的圆括号。,As,类型,,用于规定形式参数的数据类型,缺省时为,Variant,类型。对于,String,类型的形式参数,它只支持变长字符串。但在调用过程时,实际参数可以是定长字符串;在使用用户自定义数据类型作为形式参数的数据类型时,形式参数的前面不能使用,Optional,关键字。,=,缺省值,,只对,Optional,参数适用,表示该参数缺省时的值。缺省值可以是任何常量或常量表达式,但当参数的类型为,Object,时,显式的缺省值只能取,Nothing,。,8.3.1 形式参数和实际参数,需要特别说明的是:,在定义形式参数时只能使用变量或数组,不能使用常量来定义形式参数。,只有在调用带参数的过程时,才为形式参数分配内存单元,并且接收由实参传递过来的数据;当过程调用结束后,形式参数所占据的存储单元也同时被释放。因此,形式参数和实际参数重名并不发生冲突。,在过程被调用时,形式参数接受由实际参数传递过来的数据,第一个形参接收第一个实参,第二个形参接收第二个实参,以此类推。例如:,8.3.1 形式参数和实际参数,实际参数和形式参数要具有一一对应的关系,在调用过程时需注意:,实参与形参的个数应相等(不定数量参数除外)。,实参和形参的顺序和位置要一一对应。各参数之间用逗号隔开,对于可选的形式参数即使在调用过程时没有提供实际参数,也要用逗号空出其位置。,实参和形参的数据类型要相符。类型相符是根据参数的传递方式而言的,对于按值传递的参数要求实参和形参赋值相容;而对于按地址传递的参数则要求实参和形参的类型必须相同。,8.3.2 参数的传递方式,在调用过程时,实际参数和形式参数之间的数据传递方式分为两种:按值传递(ByVal)、按地址传递(ByRef)。在默认情况下,变量(简单变量、数组或数组元素等)都按地址传送给Sub或Function过程。在这种情况下,过程中使用的变量是实际传送的变量本身。这意味着,当按地址传送参数时,有可能改变传送给过程的变量的值。,8.3.2 参数的传递方式,按值传递,:,如果在调用过程时实参是常量或表达式,或者在定义过程时形参前有关键字,ByVal,,则该参数是按值传递的,即在调用过程时是将实际参数的值复制一份传递给形式参数,此后形式参数与实际参数之间没有任何联系,在过程中对形式参数所做的任何改变不会影响到实际参数。,按值传递时,实参和形参各有内存单元,主调与被调过程之间不会相互干扰,可以提高程序的可靠性并且便于调试。所以调用过程时最好采用传值方式,除非希望被调过程改变实参的值。,例8-5,按值传递参数示例,8.3.2 参数的传递方式,按地址传递,如果在定义过程时,形参前有关键字,ByRef,或缺省,并且在调用过程时实参是变量,则该参数按地址传递,称为按引用传递参数。,按地址传递参数时,实参和形参的结合方式是:在调用过程时将实参的地址传递给形参,即形参与实参共用同一地址的内存单元。因此,在被调过程中对形参的任何改变都会影响到实参。,按地址传递参数时,形参和实参共用同一个内存单元,因此实参和形参的数据类型要相同,否则就会出错。,例8-6、8-7、8-8,按地址传递参数的不同形式,8.3.3 数组参数的传递,在调用过程时,可以把数组元素作为实参传递给被调过程,也可以把整个数组作为一个参数传递给被调过程。,传递数组元素,如果要传递数组中的某一元素,只要在调用过程时将其作为实参即可,如:,Call,inputSub,(,a,(,2,),,6,),其中,a(2),为数组元素,,inputSub,是被调过程的名称。,注:数组元素作为参数传递的用法与单个变量作为参数相同,也可以按值或按地址传递给过程。,8.3.3 数组参数的传递,传递整个数组,在将整个数组作为一个参数传递给过程时,需要注意以下几点:,定义过程时,要在形参名后加一堆空的圆括号,将其声明为数组;而且因为过程被调用前无法预知数组的大小和维数,因此将形参声明为一个动态数组。,调用过程时,将固定大小和维数的数组名称作为实参传递给被调过程的形参,不必包括维数和圆括号。,在过程中定义时,数组作为参数要求必须以,ByRef,方式传递,因此,要求形参和实参数组的数据类型必须要相同,否则就要出错。,在过程定义时,可以在最后一个参数的位置使用,ParamArray,关键字定义一个可变类型的动态数组,该参数为可选参数,且由不定个数的,Variant,类型的元素组成。,例8-9,编写一个参数为数组的过程,能够将数组中的元素按从大到小排列。,例8-10,编写一个过程,求任意一组数的最大、最小值。,8.4 过程的嵌套和递归调用,过程的嵌套和递归调用是过程调用的特殊形式,遵循过程调用的基本原则。其中嵌套调用是过程调用时又去调用其它的过程,调用关系类型与树形结构;而递归调用是过程对自身的重复调用,类似于过程调用的循环。,8.4.1 过程的嵌套调用,在VB中过程的定义是相互独立的,不允许嵌套定义,即在定义过程时,一个过程中不能包含另一个过程的定义。但是,过程的调用允许嵌套,即主调过程调用某个被调过程,而在被调用过程中还可以调用另外的过程,这称为过程的嵌套调用,如图8-11所示。由此可见,主调过程和被调过程是一个相对的概念。,图8-11 过程的嵌套调用,过程A,调用过程B,语句i,过程结束,过程B,调用过程C,语句k,过程结束,过程C,过程结束,例8-11,使用嵌套调用的方式,求组合数,8.4.2 过程的递归调用,在VB中,过程直接或间接调用它自身,称为递归调用。递归调用是一种特殊的嵌套调用情况。过程P直接调用P本身,称为直接调用;过程P调用过程Q,在过程Q中又调用过程P,称为间接调用。本节只讨论直接调用。,在程序中采用递归的方法,可以使程序语言的描述与问题的自然描述一致,能够用简短清晰的程序解决复杂的问题,因而对于那些具有递归结构的问题解决非常有用。,一个问题需要采用递归的方法来解决时,必须符合以下两个条件:,具有递归形式,即可以把要解决的问题转化为一个新问题,而这个新问题的解决仍与原来的问题解法相同,只是所处理的数据有规律地递增或递减,并且通过这个转化过程能够使问题最终得到解决。,必须有一个明确的结束递归的条件,例8-12,用递归的方法求N!,例8-13,用递归法求m和n的最大公约数,8.5 代码模块,VB的应用程序是以工程为主体的,其中每一个工程可包含若干个不同的模块,每个模块又是以过程为单元进行代码的组织和使用的,代码最终存储在不同的模块中。VB的代码模块有三种类型,即窗体模块、标准模块和类模块,在工程中按照类别进行分层组织,如右图所示。其中标准模块通常简称为模块。,8.5.1 窗体模块,窗体模块是VB应用程序的基础,作为应用程序界面的重要组成部分,是用户与VB应用程序进行交互的主要方式。在VB的工程中,每一个窗体都对应一个窗体模块,窗体模块保存在扩展名为.frm的文件中。,窗体模块主要包含三部分内容,一是跟窗体有关的事件处理过程、通用过程(包括Sub过程和Function过程);二是窗体级的常量、变量、类型定义以及外部过程的声明;三是窗体的大小、颜色、所含的各种控件的属性设置等信息。如果在文本编辑器中打开窗体模块,就会看到关于窗体以及控件的描述,包括它们的属性设置等。,默认情况下,VB的工程中只包含一个窗体,可以根据需要添加多个窗体。如在“工程”菜单中执行“添加窗体”命令,在打开的“添加窗体”对话框中,可以选择“新建”一个窗体或者从“现存”选项卡中选择添加一个已经创建并保存的窗体。每一个新添加的窗体都将单独保存,并在VB的“工程资源管理器”窗口中显示。,8.5.2 标准模块,在VB的应用程序中,一个工程可以包含多个窗体,这些窗体要执行的公共代码部分可以从窗体中独立出来,存放于标准模块中。通过标准模块的使用,可以进一步提高代码的可重用性,增加代码的模块化和可读性。,标准模块保存在扩展名为.bas的文件中,通常包含变量、常量、类型定义、外部过程和通用过程的全局级或模块级声明。在缺省的情况下,标准模块中的声明都是全局级的,只有用关键字Private或Dim所作的声明才是模块级的。全局变量可以用Public或Global关键字进行声明。,标准模块可以脱离特定的应用程序,也就是说在不同的应用程序中可以重用标准模块,只要将标准模块添加到当前的应用程序中即可。,8.5.2 标准模块,创建标准模块,设置启动对象,在标准模块中,可以创建一个特殊的,Sub,子过程,即,Main,子程序过程,而且即使有多个标准模块,也只能在一个标准模块中创建一个,Sub Main,子过程。其特殊性就在于,Sub Main,子过程可以作为,VB,整个应用程序的启动对象。,要把,Sub Main,作为启动对象,可以执行“工程”菜单的“工程属性”命令,在打开的“工程属性”对话框中,可设置“启动对象”为,Sub Main,,当然也可以设置工程中的一个窗体作为启动对象。作为启动对象的,Sub Main,子过程就是在标准模块中创建的,Main,子程序过程。,8.5.3 类模块,类模块是面向对象编程的基础,它保存在扩展名为.cls的文件中。类模块代表了一个类的模板,据此可以创建新的对象。类模块既包含数据,又包含代码,分别描述了从该类创建的对象的特征和行为,可以看做是没有物理表示的对象。类模块的创建和使用方法,在此不做介绍。,8.6 过程的作用域,过程调用时,必须考虑其作用域问题。,8.6.1 过程的作用域,过程同变量一样,需要考虑过程的作用域问题。按照过程定义时所在的模块位置以及采用的关键字的不同,过程的作用域分为模块级和全局级。其中,模块级也称为文件级;全局级也称为工程级。,全局级:在用户自定义的子程序和函数过程前不加任何关键字,或者加上,Public,关键字,则该子程序或函数过程可以被本工程中任何窗体和标准模块的任何过程调用。,模块级:在用户自定义的子程序或函数过程前加上,Private,关键字,使得该子程序或函数过程只能被创建该过程的窗体模块或标准模块中的过程调用。,8.6.2 不同模块间过程的调用,要调用在其他模块中定义的全局级过程(也称外部调用),要看该过程是在哪一个模块中声明的,不同模块的全局级过程在调用时略有不同。,窗体模块的全局级过程,窗体模块中的全局级过程在被其他模块调用时,需指出该过程所隶属的窗体。如在窗体模块,Form1,中声明了全局级过程,mySub,,则在其他模块中要用以下语句调用该过程:,Call Form1.mySub,8.6.2 不同模块间过程的调用,标准模块的全局级过程,直接用过程名调用,无需在过程名前加模块名。,如果标准模块的全局级过程在整个工程中是唯一的,或者与其他标准模块的全局级过程都不同名,则在其他模块中可以直接用过程名调用此过程。注意:在第二种情况下在主调模块中不能有与此过程同名的过程。这是因为与变量类似,在同一模块中过程名不能相同,而在不同模块中过程名可以相同,在未指定模块名时本模块中的过程优先调用。,在过程名前加上模块名,在调用不同模块中的同名全局级过程时,要在过程名前加上模块名。例如,在标准模块,Module1,和,Module2,中分别有一个名为,sameSub,的全局级过程,则在调用时须通过,Call Module1.sameSub,或,Call Module2.sameSub,指明调用的是哪一个模块中的过程。,8.6.2 不同模块间过程的调用,类模块的全局级过程,在其他模块中调用类模块的全局级过程时,不能直接用加类名的方法来调用该过程,必须先声明一个类的实例,然后通过这个具体的对象变量来调用。,例如,在类模块,someClass,中有一个全局级过程,someSub,,则需要通过如下方式调用此过程:,Dim,myObject,As New,someClass,myObject.someSub,
    展开阅读全文

    开通VIP折扣优惠下载文档

    提示  咨信网声明:本文档由用户上传并分享,仅供学习交流、研究之用,未经授权,严禁复制、发行、汇编、翻译或网络传播等,侵权必究。

    咨信网小贴示:
    1、浏览或下载可查看了解,请点击【咨信网告知】。
    2、下载文件中如有侵权或不适当内容,将立即纠正。
    3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
    4、开具发票登录电脑端申请,请点击【索取发票】。

    咨信网客服组:【微信客服】

    自信AI创作助手
    关于本文
    本文标题:第8章计算机基础.ppt
    链接地址:https://www.zixin.com.cn/doc/14598979.html

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork