《过程与函数 (2)课件.ppt》由会员分享,可在线阅读,更多相关《过程与函数 (2)课件.ppt(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、关于过程与函数(2)现在学习的是第1页,共45页根据结构化程序的设计思想,在程序设计过程中,通常应根据程序实现的主要功能,将复杂的应用问题,分解成一个个相对简单的问题去解决,每一个简单问题通过一段相对独立的程序段实现,或者将程序中需要多处调用的程序段独立出来,编写为一个独立的子程序,以简化程序对某部分功能的引用。子程序一旦定义好,就可以被程序任意调用。调用程序与被调用程序之间的数据交换通过参数传递实现。在VB中,子程序被称为过程。VB的整个应用程序是由过程组成的。VB中的过程分为事件过程和通用过程两大类。VB程序设计的特点就是采用了事件驱动机制,事件过程构成VB应用程序的主体。当发生某个事件(
2、如Click,Load,Change)时,对该事件做出响应的程序段,就是事件过程。有时,多个不同的事件过程可能需要使用同一段程序代码,就可以将这段代码独立出来,这样的过程叫做“通用过程”,它独立于事件过程之外,供事件过程或通用过程调用。VB根据过程是否返回值,将通用过程分为子程序(Sub)过程和函数(Function)过程两类。函数过程通常要返回值。现在学习的是第2页,共45页7.1 通用过程7.1.1 事件过程与通用过程1.事件过程事件过程由VB系统自行声明的过程,用户不能增加或删除。当用户对某个对象发出一个动作时,Windows会通知VB产生了一个事件,VB会自动地调用与该事件相关的事件过
3、程。控件事件过程的语法为:Private Sub控件名控件名_事件名事件名(形参列表形参列表)语句组语句组End Sub窗体事件过程的语法为:Private Sub Form_事件名事件名(形参列表形参列表)语句组语句组End Sub2.通用过程通用过程不与任何特定的事件相联系,只能由别过程来调用,它可以存储在窗体或标准模块中。现在学习的是第3页,共45页7.1.2 通用过程的定义过程定义的一般格式:StaticPrivatePublicSub 过程名过程名(参数列表参数列表)语句块语句块 Exit Sub 语句块语句块End Sub说明:过程名:命名规则与变量名相同。参数列表:过程被调用时传
4、送给该过程的形式参数表,可以是简单变量名或数组名,各名字之间用逗号隔开。“参数列表”指明了调用时传给该过程的参数类型和个数。每个参数的格式为:ByVal变量名 As 数据类型ByVal表明该参数是“传值”(Passed by Value)参数,不加此项,则该参数是“传址”(Passed by reference)参数。过程可以有参数也可以不带任何参数。没有参数的过程称为无参过程。Sub过程以Sub开头,以End Sub结束,在其间的语句块称为“过程体”。Static:是指过程中的局部变量在内存中的存储方式。Private:表示Sub过程是私有过程,它只能被本模块中的其它过程访问,而不能被其他模
5、块中的过程访问。Public:表示过程是公有过程,可以在程序的任何地方调用它。过程体可以用一个或多个Exit Sub语句从过程中退出。现在学习的是第4页,共45页7.1.3 创建通用过程 Sub过程不属于任何一个事件过程,独立于事件过程之外,因此不能放在事件过程中,必须在模块中定义。可以在标准模块中建立,也可以在窗体模块中建立。1.在标准模块中创建Sub过程 选择【工程】/【添加模块】,打开“添加模块”对话框。在“添加模块”对话框中选择【新建】选项卡,选择“模块”,打开模块代码窗口。在窗口内键入Sub和过程名Display,然后按回车键,VB系统会自动在过程名后加一对圆括号并将End Sub语
6、句写入下一行,如图 7-1所示。在Sub和End Sub之间即可输入该过程中的语句。或在“添加模块”对话框中或选择【现存】选项卡,打开“打开文件”对话框,可以用此方法将已存在的模块加载进来。图7-1 模块代码窗口现在学习的是第5页,共45页2.在窗体模块中创建Sub过程 双击窗体进入代码窗口,在“对象”列表中选择“通用”,此时“过程”列表中出现“声明”。在代码窗口内键入Sub和过程名,然后按回车键,系统会自动在过程名后加一对圆括号并将End Sub语句写入下一行,如图7-2所示。则Sub和End Sub之间即是过程体所在。图7.2 模块代码窗口现在学习的是第6页,共45页7.1.4 调用Sub
7、过程调用过程即引起过程的执行。Sub过程的调用有两种方式:用Call语句调用SUB过程Call 过程名(实际参数列表)把过程名作为一个语句来使用过程名 实际参数列表调用Sub过程必须是一个独立的语句,不能在表达式中调用Sub过程。例例7.1 编写一个计算矩形面积的Sub过程,然后调用该过程计算矩形面积。设计步骤如下:(1)建立应用程序用户界面并设置对象属性,如图7-3所示。图7-3 建立计算矩形面积的用户界面现在学习的是第7页,共45页(2)在代码窗口中直接输入通用事件代码。Sub recarea(rlen,rwid)Dim area area=rlen*rwid 计算矩形面积 MsgBox
8、矩形的面积是:&area 用消息框输出矩形面积End Sub(3)编写窗体Form的单击Click事件代码。Private Sub Form_Click()Dim a,b a=InputBox(“请输入矩形面积的长度:”)用输入框输入矩形的长 b=InputBox(“请输入矩形面积的宽度:”)用输入框输入矩形的宽 recarea a,b 调用recarea过程,也可以改为Call recarea(a,b)End Sub如图7-4所示,编写子过程与窗体的事件过程代码。现在学习的是第8页,共45页图7-4 子过程与窗体的事件过程代码现在学习的是第9页,共45页(4)运行工程。单击标准工具栏中的“启
9、动”按钮,运行工程,单击窗体,依次输入矩形的长、宽求得矩形面积。图7-5显示了最终结果。图7-5 矩形面积的计算结果现在学习的是第10页,共45页7.2 函数过程在数学中,函数(function)是一个因变量与一些自变量的函数对应关系。Visual Basic中的函数同样表达了这种关系。函数需要用户用一个过程来定义该函数,且需要一个返回值,可以说函数是一种带有返回值的过程。函数值可以用在表达式中。7.2.1 函数的定义函数的定义格式:StaticPrivatePublicFunction 过程名(参数表)As 类型 语句块 Exit Function 语句块过程名=表达式End Functio
10、n说明:若Function过程中省略“过程名=表达式”,则该过程返回一个默认值:数值函数过程返回一个0值,字符串函数过程返回空字符串。函数定义不能嵌套。现在学习的是第11页,共45页7.2.2 函数的调用由于Function过程能返回一个值,因此完全可以把它看成是用户定义的一个类似于VB内部函数的函数。Function过程的调用与调用VB内部函数方法相同。其格式为:函数过程名(参数表)函数若不使用返回值,可以使用Call来调用。例例7.2 编写求矩形面积的自定义函数。在代码窗口中直接输入下面的代码:Public Function area(a As Integer,b As Integer)A
11、s Long area=a*b 计算并返回函数值End Function例例7.3 计算任意整数n的阶乘的Function过程fact:Function fact(x As Integer)As Long Dim p As Long,i As Integer p=1 For i=1 To xp=p*i 累乘 Next i fact=p 返回函数值End Function例例7.4 利用Function函数求矩形面积。直接调用例7.2的area函数,代码如下:现在学习的是第12页,共45页Private Sub Form_Load()Show Label3.Caption=area(5,6)通过
12、实参,调用area函数,输出End Sub图7-6 函数过程及调用现在学习的是第13页,共45页7.3 过程调用中的参数传送形参与实参之间的数据传递是调用过程和返回过程运算结果的桥梁。在过程被调用之前,所有形参既没有具体的存储地址也无具体的值,只是起到模板的作用。当程序流程转向执行过程时,实参和形参按一定方式结合,形参获取了相应的值后执行过程体,过程的运算结果还可通过形参带回到主程序。在调用一个过程时,必须把实际参数传送给过程,完成形式参数与实际参数的结合,用实际参数执行调用的过程。形参与实参形式参数是在Sub或Function过程的定义中出现的变量名,实际参数则是在调用Sub或Functio
13、n过程时传送给Sub或Function过程的常数、变量、表达式或数组。在定义通用过程时,形式参数为实际参数预留位置,而在调用过程时,实际参数则按位依次传给形式参数。形参表与实参表对应的变量名不必相同,但变量个数必须相等,相应的类型必须相同。传值与传址在VB中,参数通过两种方式传送,即传地址和传值。传地址(默认方式,可以使用关键词ByRef)习惯上称为“引用”,就是让过程根据变量的内存地址去访问变量的内容,即形参与实参共用相同的单元地址。这意味着,如果过程中改变了变量值,就会将结果带回到调用它的上级程序或过程,引起实参值的改变。此时过程中使用的变量是实际传送的变量本身,当通过引用来传送实参时,有
14、可能改变传送给过程的变量的值。传值方式用关键词ByVal。它将变量或表达式的值复制一份,并将值传送给过程。因为所有的变化都是在变量的副本上进行的,所以不会改变原来变量的值。现在学习的是第14页,共45页7.3.1 参数传递1.传地址方式传地址是VB默认的参数传递方式。在这种方式下,将实参的存储地址传给形参,使形参与实参共用同一存储单元,因此在过程中对形参的任何操作实质都是对相应实参的操作。要实现传地址方式可体现在过程定义和过程调用中。在过程定义时,形参前省略关键字ByRef(或加ByRef显式说明);在过程调用时,对应位置的实参是相同类型的变量或数组名。实参为常数或表达式是无法实现地址传递的。
15、采用传地址方式进行参数传递时需要注意以下问题:当实参为变量时,参数传递时是把变量的地址传递给形参,使实参与形参共享同一存储单元。当实参为数组时,参数传递时是把数组的存储地址传递给形参,使实参数组与形参数组共享同一存储区域。编写过程定义时,形参中数组名只须带括号,不指定元素个数;编写过程调用语句时,实参数组名既无括号,也不能指定元素个数。实际编程中,可以利用传地址方式获得过程中处理的结果,例如:例例8.5 s=5!+10!+14!,编程求s的值。分析:完成累加过程,需要求不同数的阶乘3次,可以编写一个Sub过程,求任意个整形数n的阶乘,以供主程序中多次调用。定义过程时需要设置2个形参,一个用于传
16、入N值,另一个用于存放计算结果。程序代码如下:现在学习的是第15页,共45页Sub fact(n As Integer,f As Double)Dim i As Integer f=1 For i=1 To n f=f*i Next iEnd Sub Private Sub Command1_Click()Dim m As Integer,s As Double,x As Double m=5:Call fact(m,x)s=s+x m=10:Call fact(m,x)s=s+x m=14:Call fact(m,x)s=s+x Print 5!+10!+14!=&sEnd Sub利用传地址
17、方式可以很方便地获得过程的处理结果。例例8.6 编写求两个整数的最大公约数过程,并在主程序中调用该过程求两个数的最大公约数,并根据最大公约数求最小公倍数。分析:要求两个整数的最大公约数,需要过程在过程定义中设置2个形参用于接收这两个整数,再设置1个参数用于存放过程中得到的最大公约数。代码如下:现在学习的是第16页,共45页Sub gys(m As Integer,n As Integer,t As Integer)Dim r As Integer Do r=m Mod n If r=0 Then Exit Do m=n n=r Loop t=nEnd Sub在Command1_Click单击调
18、用gys,代码如下:Private Sub Command1_Click()Dim a As Integer,b As Integer,x As Integer,y As Integer a=16:b=12 Call gys(a,b,x)y=a*b/x Print 最大公约数为:&x Print 最小公倍数为:&yEnd Sub运行结果“最大公约数为:4”,“最小公倍数为:12”。现在学习的是第17页,共45页这个结果显然不对,为什么呢?下面进行分析:在本例中,过程gys定义时形参个数为3个,其中前2个形参用于接受运算对象,第3个形参用于返回运算结果,所有的形参前均省略了关键字ByRef;过程
19、调用时实参为变量,因此在过程调用时,参数传递方式为传地址方式,过程中对形参m、n和t的处理,实际上就是对实参a、b和x的处理。过程中m、n的值发生了变化,就造成了调用过程前a和b的值与调用过程后a和b的值是不相同的。根据最大公约数和调用过程结束后的a、b值,计算得到的最小公倍数是错误的。如何使形参改变了的值不会影响对应位置的实参?VB提供了另一种传递参数的方式传值方式。2.传值方式当以传值方式调用一个过程时,形参拥有独立的存储单元,实参只是将值复制给形参。被调过程的操作是在形参自己的存储单元中进行,如果形参的值被改变了,对应位置的实参值不会受任何影响。当过程调用结束时,形参所占用的存储单元也同
20、时被释放。实现传值方式也可体现在过程调用和过程声明中。(1)在过程调用时,如果实参为常量、表达式或为带括号的变量,参数传递是按传值方式进行的。(2)定义过程时,如果形参前加ByVal关键字。调用过程时,不管实参以何种形式,参数传递均采用传值方式。现在学习的是第18页,共45页在例8.6 中,如果过程定义为格式2:Sub gys(ByVal m As Integer,ByVal n As Integer,t As Integer)Dim r As Integer Do r=m Mod n If r=0 Then Exit Do m=n n=r Loop t=nEnd Sub调用该过程时,无论实参
21、是何种形式,形参m和n接受的是实参的值,过程调用时参数传递方式为传值方式,过程中m和n值的改变都不会影响相应位置的实参。例例8.7 分别用传地址方式和传值方式编写交换两个整数的过程并调用。Sub swap1(ByVal x As Integer,ByVal y As Integer)Dim t As Integer t=x:x=y:y=tEnd SubSub swap2(x As Integer,y As Integer)Dim t As Integer t=x:x=y:y=tEnd SubPrivate Sub Command1_Click()现在学习的是第19页,共45页Dim a As
22、Integer,b As Integer a=3:b=4 swap1 a,b 调用传值方式过程 Print a=&a&,b=&b a=5:b=6 swap2 a,b 调用传地址方式过程 Print a=&a&,b=&bEnd Sub运行程序可以看到,过程swap1不能实现变量值的交换,这是因为它采用的是传值方式,过程中交换的是形参x和y的值,交换的结果不会影响实参a和b;而过程swap2采用的是传地址方式,形参与实参共用同一存储单元,过程中对形参的交换实际上就是在交换实参,所以可以完成对两个变量值的交换。现在学习的是第20页,共45页7.4 变量、过程的作用域VB的应用程序由若干个过程组成,这
23、些过程一般保存在窗体文件(.frm)或标准模块文件(.bas)中。变量是过程代码中必不可少的,一个变量、过程所处的位置不同,可被访问的范围也不同。变量、过程可被访问的范围称为变量、过程的作用域。7.4.1模块模块(Module)是相对独立的程序单元。在VB中主要有三种模块,即窗体模块(Form)、标准模块(Module)和类模块(Class)。所有的过程都放在模块之内。每一个模块都存入一个文件。窗体模块(.frm)窗体模块是大多数应用程序的主体。窗体模块包含窗体及其控件的属性设置、有关窗体的事件处理过程、通用过程,窗体级的常量、变量、类型定义以及外部过程的声明。标准模块(.bas)标准模块由程
24、序代码组成,它包含一些通用的过程,可以包含公有或模块级的变量、常数、类型、外部过程和全局过程的全局声明或模块级声明。类模块(.cls)类模块是用来定义类对象的,这些新对象可以包含自定义的属性和方法,可以在应用程序的过程内使用。现在学习的是第21页,共45页7.4.2 过程的作用域一个VB的应用程序由若干个窗体和标准模块组成,每一个窗体可由若干个事件过程和自定义过程组成;每一个标准模块也可由若干个自定义过程组成,其结构如图7-7所示。过程的作用域分为窗体(又称模块)级和全局级两种。1窗体(模块)级过程窗体级过程是指在窗体或标准模块通用声明段定义的、用Private关键字限制的过程,这类过程只能在
25、所属的窗体或标准模块中被其它过程调用。例如:在窗体1的通用段中定义一个窗体级过程fact,分别被窗体下的Command1_Click()和Form_Click()所调用。Private Function fact(ByVal n As Integer)As Double图7-7 VB应用程序组成有一个或若干个标准模块(.bas)文件自定义Sub过程自定义Function过程若干个窗体模块(*.frm)文件事件过程(Sub)自定义Sub过程自定义Function过程应用程(.vbp)现在学习的是第22页,共45页 Dim p!,i%p=1 For i=1 To n p=p*i Next i fa
26、ct=pEnd Function在Command1_Click()下调用fact函数过程:Private Sub Command1_Click()Dim s!,i%s=0For i=1 To 4 s=s+fact(i)Next iPrint sEnd Sub在Form _Click()下调用fact函数过程:Private Sub Form_Click()Dim i%,s!s=0 For i=3 To 6 s=s+fact(i)Next i Print s End Sub现在学习的是第23页,共45页若在窗体2下调用窗体1中定义的过程“fact”,会出现一消息框显示“子程序或函数未定义”。2全
27、局级过程在窗体或标准模块中定义的过程默认是全局的,也可用Pub1ic关键字声明。全局级过程可供该应用程序的所有窗体和所有标准模块中的过程调用,但根据过程所处的位置不同,其调用方式有所区别:(1)在窗体中定义的全局级过程,该窗体之外的其它过程要调用,必须在过程名前加该过程所在的窗体名。例如:定义在Form1通用段的函数过程fact。Public Function fact(ByVal n As Integer)As Double Dim p!,i%p=1 For i=1 To n p=p*i Next i fact=pEnd Function该函数可以被Form1的所有过程调用,可以被同工程的任
28、何窗体的任何过程调用。但在Form2中调用窗体1的“fact”过程,计算5的阶乘,调用格式为:Form1.fact(5)。(2)在标准模块中定义的过程,外部过程均可调用,但过程名必须惟一,否则要加标准模块名。现在学习的是第24页,共45页例如:在标准模块中定义函数过程“fact1”,可被该工程内的所有窗体的所有过程调用。Public Function fact1(ByVal n As Integer)As Double Dim p!,i%p=1 For i=1 To n p=p*i Next i Fact1=pEnd Function在Form1的Command1_Click()下调用fact
29、1函数过程:Private Sub Command1_Click()s=0For i=1 To 4 s=s+fact1(i)Next iPrint sEnd Sub在Form2中的Form_Click()下调用fact1函数过程:Private Sub Form_Click()s=fact1(5)Print sEnd Sub若一个工程包含多个标准模块,且其中过程名不惟一,在调用时为了区分不同的过程,应在过程名前加标准模块名。现在学习的是第25页,共45页7.4.3 变量的作用域在VB中,根据声明变量的位置和所使用的定义关键字(Private或Public)不同,可将变量分为局部变量(Local
30、)、窗体和模块变量(Form and Module)及全局变量(Public)。局部变量也叫过程级变量(Procedure Level)。局部变量在过程(事件过程或通用过程)内定义的变量叫做局部变量,其作用域是它所在的过程。局部变量通常用来存放中间结果或用做临时变量。因此,在不同的过程中可以定义相同名字的局部变量。局部变量在过程中用Dim,Static定义。窗体级变量和模块级变量模块级变量对该模块中的所有过程都是可见的,但对其它模块中的代码不可见。窗体级变量可用于该窗体中的所有过程。在声明窗体级变量和模块级变量时,总是放在所有的过程之前。在模块的声明部分,用Private或Dim声明模块级变量
31、。全局变量全局变量也称全程变量,其作用域最大。可以在每个模块、每个过程中使用。全局变量在标准模块的声明部分用Public或Global语句声明。三种变量作用域见表7-1。现在学习的是第26页,共45页表7-1 变量的作用域名称作用域声明位置使用语句局部变量过程过程中Dim或Static模块级变量窗体模块及标准模块模块的声明部分Dim 或Private全局变量整个应用程序标准模块的声明部分Public或Global1过程级变量过程级变量的作用范围限制在该过程内部,也就是说在一个过程内部声明的变量,只有该过程内部的代码才能访问或改变变量的值。该类变量通常用来存储过程中的临时数据。在过程内部使用Di
32、m或Static关键字来声明变量。例如:Dim a As integer,b As SingleStatic a As String 如果在过程中未说明而直接使用了某个变量,则该变量被默认为过程级变量。用Static声明的变量称为静态变量,该类变量在过程执行结束后一直存在,直到窗体关闭。而用Dim声明的变量只在过程执行时存在,退出过程后这类变量就会消失。请看下面的代码段:Private Sub Form_Click()Dim i As Integer i=i+1 Print iEnd Sub现在学习的是第27页,共45页每单击窗体,窗体上均显示相同的数“1”。这是因为,过程每次运行结束后,变量
33、i的值会自动释放。再看下面的代码段:Private Sub Form_Click()Static i As Integer i=i+1 Print iEnd Sub每单击一次窗体,过程变量i累加1次,第n次运行i的值为“n”。原因是用Static定义的变量为静态变量,过程运行结束后,变量i的值被保存起来,下一次运行时,变量i 的值是在上一次运行的基础上进行累加的结果。2窗体(模块)级变量窗体(模块)级变量的作用域限制在声明它的窗体(模块)中,该窗体(模块)中的所有过程均可访问该变量,其它窗体(模块)则不能。在窗体(模块)的通用段中用Private或Dim关键字声明。例例8.8 窗体级变量的作用
34、范围示例(结果如图7-8所示)。图7-8 窗体级变量作用范围现在学习的是第28页,共45页Dim a As Integer,b As Integer,c As Integer Sub prod()c=a*b Print prod子程序,a,b,cEnd SubSub sum()c=a+b Print sum子程序,a,b,cEnd SubPrivate Sub Form_Click()a=5:b=3 Print Tab(16);a;Tab(30);b;Tab(42);c=a*b Print 调用prod前,a,b,c Call prod Print 调用prod后,a,b,c Print Ta
35、b(16);a;Tab(30);b;Tab(42);c=a+b Print 调用sum前,a,b,c Call sum Print 调用sum后,a,b,c Call sumEnd Sub现在学习的是第29页,共45页图7-8 变量作用范围示例3全局级变量全局级变量在所有模块的所有过程都能使用,它的作用范围是整个应用程序,在模块的通用段中使用Public关键字声明。例例8.9 变量的作用范围综合示例(结果如图8-4所示)。Public tt As Integer 声名全局变量ttPrivate Sub test1()tt=tt+10 全局变量tt Print tt 显示110End SubPr
36、ivate Sub test2()Dim tt As Integer 声名局部变量tt tt=tt+20 局部变量tt,本过程无法访问全局变量tt Print tt 显示20End SubPrivate Sub Form_Click()tt=100 全局变量tt Print tt 显示100 Call test1 Print tt 显示110 Call test2 Print tt 显示110End Sub现在学习的是第30页,共45页从运行结果可出看出:当变量名相同而作用域不同时,将优先访问作用域小的变量。在定义变量时应将变量声明为哪一个级别呢?这主要取决于变量要在什么范围内使用。(1)如果
37、变量只在某一个过程中使用,它的运算结果也不被其它过程再次使用,则可以声明为过程级变量。如本书中的大部分例题,采用的都是这种级别的变量。(2)如果变量将在同一窗体的多个过程中被用到,且彼此之间还有相互关系,则可以声明为窗体(模块)级变量。如本书中的例7-10。(3)如果变量将在多个窗体中被用到,且彼此之间还有相互关系,则可以声明为全局变量。建议除非必需,尽量使用作用域小的变量,因为大型程序的开发由多人合作完成,分工编写不同的模块。变量的局部化使合作者不必担心各模块中使用的变量是否同名。现在学习的是第31页,共45页实训七 过程与函数应用一实验目的 熟练掌握Sub过程的定义、Sub过程的调用方法。
38、熟练掌握函数或Function过程的定义、调用方法。理解通用过程调用中传值和传地址的不同。二实训要求1.创建一个求计算矩形面积的Sub过程,然后在窗体事件过程中调用该Sub过程。2.创建一个求函数过程,然后在窗体事件过程中调用该函数,求出2100以内的质数。3.创建一个求两个正整数x,y的最大公约数的函数过程,然后在窗体事件过程中调用该函数。4.创建Sub过程,在窗体上显示字符串 ABCDEFGHIJ和abcdefghij的对应字符组合成图7-9所示的效果。7-9 字符组合效果现在学习的是第32页,共45页练 习一、选择题1.VB中在模块的通用声明段用Dim X 声明的变量是 变量。(A)过程
39、级(B)模块级(C)全局(D)静态2.在Visual Basic应用程序中,以下描述正确的是 。(A)过程的定义可以嵌套,但过程的调用不能嵌套(B)过程的定义不可以嵌套,但过程的调用可以嵌套(C)过程的定义和过程的调用均可以嵌套(D)过程的定义和过程的调用均不可以嵌套3.以下程序运行时,单击命令按钮得到的结果是 。Sub subp(b()As Integer)For i=1 To 4 b(i)=2*i Next iEnd SubPrivate Sub Command1_Click()Dim a(1 To 4)As Integer a(1)=5:a(2)=6:a(3)=7:a(4)=8 subp
40、 a 现在学习的是第33页,共45页For i=1 To 4 Print a(i);Next iEnd Sub(A)2 4 6 8(B)5 6 7 8(C)10 12 14 16(D)出错4.假定有以下两个过程:Sub s1(ByVal x As Integer,ByVal y As Integer)Dim t As Integer t=x:x=y:y=tEnd SubSub s2(x As Integer,y As Integer)Dim t As Integer t=x:x=y:y=tEnd Sub则以下说法中正确的是 。(A)调用过程S1可以实现交换两个变量的值的操作,S2不能实现(B)
41、调用过程S2可以实现交换两个变量的值的操作,S1不能实现(C)调用过程S1和S2都可以实现交换两个变量的值的操作(D)调用过程S1和S2都不能实现交换两个变量的值的操作5.在窗体上添加一个命令按钮Command1和两个名称分别为Label1和Label2的标签,在通用声明段声明变量X,并编写如下事件过程和Sub过程:现在学习的是第34页,共45页Private X As Integer Private Sub Command1_Click()X=5:y=3 Call proc(X,y)Label1.Caption=X Label2.Caption=yEnd SubSub proc(ByVal
42、a As Integer,ByVal b As Integer)X=a*a y=b+bEnd Sub程序运行后,单击命令按钮,则两个标签中显示的内容分别是 。(A)5和3(B)25和3(C)25和6(D)5和66.下列程序输出结果为 。Private Sub Command1_Click()For i=1 To 3 GetValue(i)Next i Print GetValue(i)End SubPrivate Function GetValue(ByVal a As Integer)dim S As Integer S=S+a GetValue=SEnd Function现在学习的是第35
43、页,共45页A)4B)5C)10D)117.以下程序的运行结果是 。Dim x As Integer,y As Integer,z As IntegerSub s2(a As Integer,ByVal b As Integer)a=2*a b=b+2End SubPrivate Sub Command1_Click()x=4 y=4 Call s2(x,y)Print x+y End Sub(A)0(B)8(C)12(D)148.以下程序的运行结果是 。Private Sub Form_Click()a=1:b=2 Print A=;a;B=;b Call mult(a,b)Print A=
44、;a;B=;bEnd SubSub mult(x,ByVal y)现在学习的是第36页,共45页x=2*x y=3*yEnd Sub(A)A=1 B=2 (B)A=1 B=2 (C)A=1 B=2 (D)A=1 B=2 A=1 B=2 A=1 B=2 A=2 B=6 A=2 B=2 9.假定有如下通用过程:Public Sub fun(a(),ByVal x As Integer)For i=1 To 5 x=x+a(i)Next iEnd Sub在窗体上添加一个命令按钮和一个文本框,然后编写如下事件过程:Private Sub Command1_Click()Dim arr(5)As Var
45、iant For i=1 To 5 arr(i)=i Next i n=10 Call fun(arr(),n)Text1.Text=nEnd Sub程序运行时,单击命令按钮,则文本框中显示内容是 。(A)10 (B)15 (C)25 (D)24现在学习的是第37页,共45页10.以下程序段的运行结果是 。Private Sub Form_Click()Dim nx%nx=3 Call abcd(nx)Print nxEnd SubPublic Sub abcd(n As Integer)n=n+5End Sub(A)3 (B)5 (C)8 (D)1011.一个工程中包含两个名称分别为Form
46、1和Form2的窗体,一个名称为mdlfunc的标准模块。假定Form1,Form2和mdlfunc中分别建立了自定义过程,其定义格式为:Form1中定义的过程:Private sub frmFunction1()End SubForm2中定义的过程:Pubilc sub frmFunction2()End SubMd1func中定义的过程:现在学习的是第38页,共45页Public sub md1Function()End Sub在调用上述过程的程序时,若不指明窗体或模块名称,则以下叙述中正确的是 。(A)上述三个过程都可以在工程中的任何窗体或模块中被调用(B)frmFunction2和md
47、1Function过程能够在工程中各个窗体或模块中被调用(C)上述三个过程都只能在各自被定义的模块中调用(D)只有md1Function过程能够被工程中各个窗体或模块调用12.以下程序段的运行结果是 。Function abc(n As Integer)As Integer abc=n*2+1End FunctionPrivate Sub Form_Click()Dim x As Integer x=abc(3)*abc(4)Print xEnd Sub(A)63 (B)0 (C)1 (D)空13.以下程序段的运行结果是 。Private Sub Form_Click()Dim x As In
48、teger x=4现在学习的是第39页,共45页Print x;Call test(x)Print xEnd SubPublic Sub test(ByVal i As Integer)i=i+1End Sub(A)4 6 (B)4 4 (C)4 5 (D)5 414.下面过程说明语句合法的是 。(A)Sub f1(ByVal n%()(B)Sub f1(n%)As Integer(C)Function f1%(f1%)(D)Function fl(ByVal n%)15.要想从过程调用后通过参数返回两个结果,下面过程说明合法的是 。(A)Sub f2(ByVal n%,ByVal m%)(B
49、)Sub f1(n%,ByVal m%)(C)Sub f1(n%,m%)(D)Sub f1(ByVal n%,m%)16.下面过程运行后显示的结果是 。Public Sub F1(ByVal n%,m%)Private Sub Command1_Click()n=n Mod 10 Dim x%,y%m=m10 x=12:y=34End Sub Call F1(x,y)Print x,y End Sub(A)2 34 (B)12 34 (C)2 3 (D)12 3现在学习的是第40页,共45页17.下列叙述错误的是 。(A)Sub过程可以递归调用(B)Sub过程不可以由其过程名返回结果值(C)表
50、达式中可以调用Function过程(D)表达式中可以调用Sub过程18.以下关于过程及过程参数的描述中,错误的是 。(A)过程的参数可以是控件名称(B)过程的参数可以是窗体(C)只有函数过程能够将过程中处理的信息传回到调用的程序中(D)用数组作为过程的参数时,使用的是传地址方式19.模块中采用以下方式定义的过程,能被其它模块调用的是 。(A)Private Sub S1()(B)Public Sub S2()(C)Private Function F1()(D)均不能被其它模块调用20.为了在同一模块中的不同过程之间互相传递数据,下述方法中错误的是 。(A)利用全局变量(B)利用传地址方式的变