第2章VisualBasic编程基础二部分_第1页
第2章VisualBasic编程基础二部分_第2页
第2章VisualBasic编程基础二部分_第3页
第2章VisualBasic编程基础二部分_第4页
第2章VisualBasic编程基础二部分_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第2 2章章 visual basic 6.0visual basic 6.0编程基础编程基础(第二部分)(第二部分) 基本流程结构基本流程结构 2.7数组数组 2.8过程过程 2.9visual basic 6.0visual basic 6.0程序组成程序组成 2.10综合案例综合案例 2.11实训实训 2.12控制结构可控制程序执行的流程。如控制结构可控制程序执行的流程。如果未使用控制流语句,程序便从左至右、果未使用控制流语句,程序便从左至右、自顶向下地贯穿这些语句。有些简单程序自顶向下地贯穿这些语句。有些简单程序可以只用单向流程来编写,有些流程可以可以只用单向流程来编写,有些流程可以

2、依靠运算符的优先级来控制,但任何编程依靠运算符的优先级来控制,但任何编程语言的效力和用途皆由其通过结构和循环语言的效力和用途皆由其通过结构和循环改变语句顺序的能力而得。改变语句顺序的能力而得。2.7.1 2.7.1 顺序结构顺序结构 顺序结构中程序按照语句编写的先后顺序结构中程序按照语句编写的先后顺序一条一条地执行。使用顺序结构只需顺序一条一条地执行。使用顺序结构只需要将合法语句按照合理的执行顺序排列即要将合法语句按照合理的执行顺序排列即可一一执行。可一一执行。【案例【案例2-62-6】 二次函数计算器二次函数计算器 按钮单击事件中的代码为按钮单击事件中的代码为private sub comm

3、and1_click() dim x, y as double const a = 3 const b = -5 x = val(text1.text) y = a * x 2 + b * x + 1 y = y / abs(a + b) text2.text = str$(y)end subvisual basic 6.0支持的条件结构有:支持的条件结构有: ifthen; ifthenelse; iif; select case;(1)用)用ifthen结构有条件地执行一个或多个语句,单结构有条件地执行一个或多个语句,单行语法和多行块语法都可以使用。行语法和多行块语法都可以使用。if 条件

4、条件 then 语句语句if 条件条件 then 语句块语句块end if“条件条件”通常是比较式,但它可以是任何计算数值的表达通常是比较式,但它可以是任何计算数值的表达式。式。visual basic 6.0 将这个值解释为将这个值解释为true或或false。一个。一个为零的数值为为零的数值为false,而任何非零数值都被看做,而任何非零数值都被看做true。若。若“条件条件”为为true,则,则visual basic 6.0执行执行“then”关键字关键字后面的所有后面的所有“语句块语句块”。(2)用)用 ifthenelse块定义几个语句块,执行其中一个块定义几个语句块,执行其中一个

5、语句:语句:if 条件条件1 then 语句块语句块1else if 条件条件2 then 语句块语句块2 .else 语句块语句块nend ifvisual basic 6.0首先测试首先测试“条件条件1”。如果它为。如果它为false,visual basic 6.0就测试就测试“条件条件2”,依此类推,直到找到一,依此类推,直到找到一个为个为true的条件。当它找到一个为的条件。当它找到一个为true的条件时,的条件时,visual basic 6.0就会执行相应的语句块,然后执行就会执行相应的语句块,然后执行end if后面的代后面的代码。作为一个选择,可以包含码。作为一个选择,可以包

6、含else语句块,如果前语句块,如果前n-1个条个条件都是件都是false,则,则visual basic 6.0执行执行else语句块。语句块。(3)iif函数用于实现一些简单的条件判函数用于实现一些简单的条件判断分支结构,其格式如下:断分支结构,其格式如下:iif(条件,条件为真时的值,条件为假时的条件,条件为真时的值,条件为假时的值值)其作用是对条件进行测试,若条件成立其作用是对条件进行测试,若条件成立(为真值),则取第一个值(即(为真值),则取第一个值(即“条件为条件为真时的值真时的值”),否则取第二个值(即),否则取第二个值(即“条条件为假时的值件为假时的值”)。)。(4)visua

7、l basic 6.0提供提供select case结构替代结构替代ifthenelse,从而可在多个语句块中有选择地执行其中,从而可在多个语句块中有选择地执行其中一个。一个。select case语句的能力与语句的能力与ifthenelse语句类似,语句类似,但对多重选择的情况,但对多重选择的情况,select case语句使代码更加易读。语句使代码更加易读。select case在结构的开始便处理一个测试表达式并只计算一在结构的开始便处理一个测试表达式并只计算一次。然后,次。然后,visual basic 6.0将表达式的值与结构中每个将表达式的值与结构中每个case的值进行比较。如果相等

8、,就执行与该的值进行比较。如果相等,就执行与该case相关联的语句相关联的语句块。块。select case test 测试表达式测试表达式 case 表达式列表表达式列表1 语句块语句块1 case 表达式列表表达式列表2 语句块语句块2 . case else 语句块语句块nend select【案例【案例2-72-7】 求数据的绝对值求数据的绝对值 按钮单击事件中的代码为按钮单击事件中的代码为private sub command1_click() dim a as integer定义变量定义变量 a = val(text1.text)将文本框中输入的值赋给变量将文本框中输入的值赋给变量

9、a if a 0 then 当当a为负数时取其相反数为负数时取其相反数 a = -a end if text2.text = str$(a)end sub 按钮单击事件中的代码为按钮单击事件中的代码为private sub command2_click() text1.text = text2.text = end sub【案例【案例2-82-8】 闰年闰年 “确定确定”按钮单击事件中的代码为按钮单击事件中的代码为private sub command1_click() dim x as integer x = val(text1.text) if (x mod 100) then如果如果x不

10、能被不能被100整除整除 if (x mod 4 = 0) then如果如果x能被能被4整除但不能被整除但不能被100整除整除 text2.text = yes else 如果如果x不能被不能被4和和100整除整除 text2.text = no end if elseif (x mod 400 = 0) then如果如果x能被能被100整除,又整除,又能被能被400整除整除 text2.text = yes else text2.text = no end ifend sub“清除清除”按钮单击事件中的代码为按钮单击事件中的代码为private sub command2_click() te

11、xt1.text = text2.text = end sub【案例【案例2-92-9】 查询十二生肖查询十二生肖case 6 text2.text = 虎虎 case 7 text2.text = 兔兔 case 8 text2.text = 龙龙 case 9 text2.text = 蛇蛇 case 10 text2.text = 马马 case 11 text2.text = 羊羊 case 0 text2.text = 猴猴 end selectend subprivate sub command1_click() dim year as integer, a as integer

12、year = val(text1.text) a = year mod 12 select case a case 1 text2.text = 鸡鸡 case 2 text2.text = 狗狗 case 3 text2.text = 猪猪 case 4 text2.text = 鼠鼠 case 5 text2.text = 牛牛elseif a=6 then text2.text = 虎虎 elseif a=7 then text2.text = 兔兔 elseif a=8 then text2.text = 龙龙 elseif a=9 then text2.text = 蛇蛇 elsei

13、f a=10 then text2.text = 马马 elseif a=11 then text2.text = 羊羊 else text2.text = 猴猴 end ifend sub使用使用ifthenelse结构,代码如下:结构,代码如下:private sub command1_click() dim year as integer, a as integer year = val(text1.text) a = year mod 12 if a=1 then text2.text = 鸡鸡 elseif a=2 then text2.text = 狗狗 elseif a=3 th

14、en text2.text = 猪猪 elseif a=4 then text2.text = 鼠鼠 elseif a=5 then text2.text = 牛牛 doloop; fornext。1doloop 用用do循环重复执行一语句块,且重复次数不定。循环重复执行一语句块,且重复次数不定。doloop语句有几种演变形式,但每种都计算数值条件以语句有几种演变形式,但每种都计算数值条件以决定是否继续执行。如同决定是否继续执行。如同ifthen 条件必须是一个数值或条件必须是一个数值或者值为者值为true(非零)或(非零)或false(零)的表达式。在下面的(零)的表达式。在下面的doloo

15、p循环中,只要循环中,只要“条件条件”为为true就执行就执行“语句块语句块”。do while (条件条件) 语句块语句块loop 当当visual basic 6.0执行这个执行这个do循环时会首先测试循环时会首先测试“条条件件”。如果。如果“条件条件”为为false(零),则跳过所有语句;如(零),则跳过所有语句;如果果“条件条件”为为true(非零),则(非零),则visual basic 6.0执行语句,执行语句,然后退回到然后退回到do while语句再测试条件。因此,只要语句再测试条件。因此,只要“条件条件”为为true或非零,循环可以随意执行多次;如果或非零,循环可以随意执行多

16、次;如果“条件条件”一一开始便为开始便为false,则不会执行语句。,则不会执行语句。 doloop语句的另一种演变形式是先执行语句的另一种演变形式是先执行语句,然后再在每次执行后测试语句,然后再在每次执行后测试“条件条件”。这种。这种形式保证形式保证“语句块语句块”至少执行一次:至少执行一次:do 语句块语句块loop while (条件条件) 其他两种演变形式类似于前两个,所不同的其他两种演变形式类似于前两个,所不同的是,只要是,只要“条件条件”为为false而不是而不是true,它们就执,它们就执行循环。行循环。 2fornext 与与do循环不同,循环不同,for循环使用一个叫做计数器

17、的变量,循环使用一个叫做计数器的变量,每重复一次循环之后,计数器变量的值就会增加或者减少。每重复一次循环之后,计数器变量的值就会增加或者减少。for循环的语法如下:循环的语法如下:for 循环变量循环变量 = 初值初值 to 终值终值 step 步长步长 语句块语句块next 循环变量循环变量 参数参数“循环变量循环变量”、“初值初值”、“终值终值”和和“步长步长”都是数值型的。都是数值型的。 “步长步长”参数可正可负。如果参数可正可负。如果“步长步长”为正,则为正,则“初初值值”必须小于等于必须小于等于“终值终值”,否则不能执行循环内的语句;,否则不能执行循环内的语句;如果如果“步长步长”为

18、负,则为负,则“初值初值”必须大于等于必须大于等于“终值终值”,这样才能执行循环体。如果没有设置这样才能执行循环体。如果没有设置“step”(步长),(步长),则则“步长步长”缺省值为缺省值为1。每执行一个循环,。每执行一个循环,“循环变量循环变量= 循环变量循环变量+步长步长”。 在执行在执行for循环时,其执行过程如下。循环时,其执行过程如下。 设置设置“循环变量循环变量”等于等于“初值初值”。 测试测试“循环变量循环变量”是否在是否在“初值初值”和和“终值终值”之间。若不是的话,则之间。若不是的话,则visual basic 6.0退出循环;若是的话执行语句。退出循环;若是的话执行语句。

19、 执行完执行完“语句块语句块”语句,执行语句,执行next 循循环变量环变量,循环变量,循环变量= 循环变量循环变量+步长。步长。 重复步骤重复步骤步骤步骤。【案例【案例2-102-10】 人口估算人口估算 假设我国现有人口约为假设我国现有人口约为12亿,设年增长率亿,设年增长率为为1%,计算多少年后增加到,计算多少年后增加到20亿。亿。private sub form_click() dim a as double dim r as single dim i as integer a = 12 r = 0.01 i = 0 do while a 20 当人口数大于等于当人口数大于等于20亿时

20、结束循亿时结束循环环 a = a * (1 + r) i = i + 1 loop print i ;年后中国人口达到年后中国人口达到20亿亿end sub使用使用doloop while结构,代码如下:结构,代码如下:private sub form_click() dim a as double dim r as single dim i as integer a = 12 r = 0.01 i = 0 do a = a * (1 + r) i = i + 1 loop while a = 20 then exit for 当人口数大于等于当人口数大于等于20亿时跳出循环亿时跳出循环 ne

21、xt i print i; 年后中国人口达到年后中国人口达到20亿亿end sub 在在visual basic 6.0中,把一组具有同中,把一组具有同一名字、不同下标的下标变量称为数组,一名字、不同下标的下标变量称为数组,其一般形式如下:其一般形式如下:s(i) 其中其中s称为数组名,称为数组名,i是下标。一个数组是下标。一个数组可以含有若干个下标变量,下标用来指出可以含有若干个下标变量,下标用来指出某个数组元素在数组中的位置,某个数组元素在数组中的位置,s(8)代表代表s数组中的第八个元素。数组中的第八个元素。 声明固定大小的数组有声明固定大小的数组有3种方法,用哪种方法,用哪一种方法取决

22、于数组应有的有效范围。一种方法取决于数组应有的有效范围。 建立全局数组,在模块的声明段用建立全局数组,在模块的声明段用public语句声明数组。语句声明数组。 建立模块或窗体数组,在模块的声明段用建立模块或窗体数组,在模块的声明段用private语句声明数组。语句声明数组。 建立局部数组,在过程中用建立局部数组,在过程中用private语句声语句声明数组。明数组。 声明数组时,在数组名之后跟一个用括弧括起来的,其声明数组时,在数组名之后跟一个用括弧括起来的,其上界、下界不得超过上界、下界不得超过long数据类型的范围(数据类型的范围(-2 147 483 6482 147 483 647)。)

23、。例如,下列数组声明可出现在模块的声明段:例如,下列数组声明可出现在模块的声明段:dim a(4) as integer 同时定义了同时定义了a(0),a(1),a(2),a(3),a(4)5个元素。个元素。dim s (20) as double 定义了定义了s(0)到到s(20)21个元素。个元素。为建立公用数组,直接用为建立公用数组,直接用public取代取代dim:public a(4) as integerpublic s (20) as double 第一个声明建立了一个有第一个声明建立了一个有5个元素的数组,其索引号为个元素的数组,其索引号为04;第二个声明建立了一个有;第二个声

24、明建立了一个有21个元素的数组,其索引号个元素的数组,其索引号范围是范围是020。为了规定下界,可以使用关键字为了规定下界,可以使用关键字“to”显式显式提供下界(为提供下界(为long数据类型):数据类型):dim a (1 to 5) as integerdim s (100 to 120) as string在前述声明中,在前述声明中,“a”的索引值范围为的索引值范围为15,而而“s”的索引值范围为的索引值范围为100120。 有时候,可能需要知道数组的上界值有时候,可能需要知道数组的上界值和下界值,这可以通过和下界值,这可以通过lbound和和ubound函数来测试,其格式如下:函数来

25、测试,其格式如下:lbound(数组名数组名) 返回数组索引值的上界值返回数组索引值的上界值ubound(数组名数组名) 返回数组索引值的下界值返回数组索引值的下界值数组长度到底应该为多大才算合适,数组长度到底应该为多大才算合适,有些情况下很难确定,这就需要数组能够有些情况下很难确定,这就需要数组能够在运行时具有改变大小的能力。通过使用在运行时具有改变大小的能力。通过使用动态数组,可以在程序中任意改变数组的动态数组,可以在程序中任意改变数组的长度。在长度。在visual basic 6.0中,动态数组是中,动态数组是最灵活、最方便的,有助于有效管理内存。最灵活、最方便的,有助于有效管理内存。

26、(1)如果希望数组为公用数组,则用)如果希望数组为公用数组,则用public语句声明数组;如果希望数组为模语句声明数组;如果希望数组为模块级,则在模块级用块级,则在模块级用dim语句声明数组;语句声明数组;如果希望数组为局部数组,则在过程中用如果希望数组为局部数组,则在过程中用static或或dim语句声明数组。给数组赋一个语句声明数组。给数组赋一个空数组,这样就将数组声明为动态数组。空数组,这样就将数组声明为动态数组。例如:例如:dim a ()(2)用)用redim语句分配实际的元素个数。语句分配实际的元素个数。redim a (x + 1)redim语句只能出现在过程中。与语句只能出现在

27、过程中。与dim语句、语句、static语句不同,语句不同,redim语句是一个可执行语句,语句是一个可执行语句,由于这一语句,应用程序在运行时执行一个操作。由于这一语句,应用程序在运行时执行一个操作。redim语句支持这样的语法,它与固定数组中使语句支持这样的语法,它与固定数组中使用的语法相同。每个用的语法相同。每个redim语句都能改变元素数语句都能改变元素数目以及上下界。目以及上下界。建立一个数组之后,可以对数组或数建立一个数组之后,可以对数组或数组元素进行操作。数组的基本操作包括输组元素进行操作。数组的基本操作包括输入、输出及复制,这些操作都是对数组进入、输出及复制,这些操作都是对数组

28、进行的。此外,在行的。此外,在visual basic 6.0中还提供中还提供了了for eachnext语句,可用于对数组的语句,可用于对数组的操作。操作。1数组元素的引用数组元素的引用引用数组元素的格式是:数组名(下引用数组元素的格式是:数组名(下标)。标)。例如:例如:number(1),a(2),num(0),b(4)等。等。 2给数组元素赋值给数组元素赋值(1)利用循环结构给数组元素赋值,例如)利用循环结构给数组元素赋值,例如为数组元素赋初值为数组元素赋初值3:for i=1 to 5 a(i)=3next i(2)利用)利用array()函数为数组元素赋值,即把一个数据集读函数为数

29、组元素赋值,即把一个数据集读入某个数组。其格式为:入某个数组。其格式为:数组变量名数组变量名array(数组元素值)(数组元素值)例如:例如:static number number=array(1,2,3,4,5)说明:说明: array()函数对各元素赋值,声明的数组是动态数组或连函数对各元素赋值,声明的数组是动态数组或连小括号都省略的数组,并且类型只能是小括号都省略的数组,并且类型只能是varient。 数组下界默认为数组下界默认为0,可通过,可通过option base语句决定,上界由语句决定,上界由array()函数括号内的参数个数决定,也可通过函数括号内的参数个数决定,也可通过ub

30、ound()函函数获得。数获得。 “数组元素值数组元素值”是需要赋给数组各元素的值,各值之间以是需要赋给数组各元素的值,各值之间以逗号分开。逗号分开。 array()函数只适用于一维数组。函数只适用于一维数组。4数组元素的复制数组元素的复制(1)单个数组元素可以像简单变量一样从)单个数组元素可以像简单变量一样从一个数组复制到另一个数组。例如:一个数组复制到另一个数组。例如:dim b(4),a(6)b(2)=a(3)(2)要复制整个数组,要使用)要复制整个数组,要使用for循环语循环语句。句。(3)要复制整个数组,也可以使用一条简单的赋值语句即)要复制整个数组,也可以使用一条简单的赋值语句即可

31、。例如:可。例如:dim a(4) as integer,b() as integera(0)=0:a(1)=5:a(2)=10:a(3)=13:a(4)=14b=a 使用这种方法赋值时,必须要注意:使用这种方法赋值时,必须要注意: 赋值号两边的数据类型必须一致;赋值号两边的数据类型必须一致; 如果赋值号左边的是一个大小固定的数组,则数组赋值如果赋值号左边的是一个大小固定的数组,则数组赋值出错;出错; 赋值号左边的必须是一个动态数组,赋值时系统将自动赋值号左边的必须是一个动态数组,赋值时系统将自动给动态数组分配内存空间,使之与右边数组大小相同。给动态数组分配内存空间,使之与右边数组大小相同。5

32、for eachnext语句语句for eachnext循环与循环与fornext循循环类似,与环类似,与fornext语句类似,两者都是语句类似,两者都是用来执行指定重复次数的语句。但用来执行指定重复次数的语句。但for eachnext语句是专门用于操作数组的,语句是专门用于操作数组的,它的格式如下:它的格式如下:for each in next 说明:说明: 格式中的格式中的“成员成员”必须是一个变体变量,是为必须是一个变体变量,是为循环提供的,代表的是数组中的每个元素。循环提供的,代表的是数组中的每个元素。 数组名没有括号和上下界。数组名没有括号和上下界。 用用for eachnext

33、语句可以对数组中的每个元语句可以对数组中的每个元素进行处理,它包括查询、显示和读取。它所重素进行处理,它包括查询、显示和读取。它所重复的次数由数组中元素的个数决定,数组中有多复的次数由数组中元素的个数决定,数组中有多少个元素,就自动重复执行多少次。少个元素,就自动重复执行多少次。【案例【案例2-132-13】 数组复制数组复制给数组赋初值,然后复制到另一数组中,给数组赋初值,然后复制到另一数组中,并打印输出到窗体上。并打印输出到窗体上。private sub form_click() dim a(), b() 定义动态数定义动态数 a = array(1, 2, 3, 4, 5) 给数组赋初值

34、给数组赋初值 redim b(ubound(a) 给动态数组分配内存空间给动态数组分配内存空间 for i = 0 to ubound(a) 数组复制数组复制 b(i) = a(i) next i for i = 0 to ubound(a) 数组输出数组输出 print b(i); next iend sub【案例【案例2-142-14】 数组求和数组求和求数组求数组a中所有元素的和。中所有元素的和。private sub form_click() dim sum as integer dim a(1 to 10) as integer 数组定义数组定义 for i = 1 to 10 数组

35、赋初值数组赋初值 a(i) = 1 next i sum = 0 for each x in a 使用使用for eachnext数组求和数组求和 sum = sum + x next x print sum 输出数组和输出数组和end sub【案例【案例2-152-15】 数组基本操作数组基本操作option base 1private sub form_click() dim abc(10) as integer 数组定义数组定义 for i = 1 to 10 数组赋初值为数组赋初值为0100内的整数内的整数 abc(i) = int(rnd * 100) next i print 使用

36、普通循环输出:使用普通循环输出: for i = 1 to 10 使用普通循环输出数组使用普通循环输出数组 print abc(i); next i print print 使用使用for eachnext输出:输出: for each x in abc 使用使用for eachnext输出数组输出数组 print x; nextend sub将公用的、能完成某一特定功能的程序设将公用的、能完成某一特定功能的程序设计成可供其他程序调用的、独立的程序段,这种计成可供其他程序调用的、独立的程序段,这种程序段就称为子程序(也称为过程)。调用子程程序段就称为子程序(也称为过程)。调用子程序的程序段称为

37、主程序。序的程序段称为主程序。用过程编程有两大好处。用过程编程有两大好处。(1)过程可使程序划分成离散的逻辑单元,这)过程可使程序划分成离散的逻辑单元,这样程序的结构清晰且便于调试。样程序的结构清晰且便于调试。(2)一个程序中的过程,往往不必修改或只需)一个程序中的过程,往往不必修改或只需稍做改动,便可成为另一个程序的构件。稍做改动,便可成为另一个程序的构件。在在visual basic中,有两类子过程:事中,有两类子过程:事件过程和通用过程。件过程和通用过程。1通用过程通用过程在在visual basic 6.0中,通用过程分为中,通用过程分为两类,即子程序过程(两类,即子程序过程(sub过

38、程)和函数过程)和函数过程(过程(function过程)。过程)。通用过程必须由其他过程调用,它并通用过程必须由其他过程调用,它并不与任何特定的事件直接相联系,它完成不与任何特定的事件直接相联系,它完成特定的任务,通用过程由用户创建。通用特定的任务,通用过程由用户创建。通用过程可以存储在窗体或标准模块中。过程可以存储在窗体或标准模块中。2事件过程事件过程当用户对一个对象发出动作时,会产当用户对一个对象发出动作时,会产生一个事件,然后自动地调用与该事件相生一个事件,然后自动地调用与该事件相关的事件过程。事件过程就是在响应事件关的事件过程。事件过程就是在响应事件时执行的程序段。时执行的程序段。 默

39、认时,事件过程是私有的。事件过默认时,事件过程是私有的。事件过程是附加在窗体和控件上的。程是附加在窗体和控件上的。 所有的事件过程都使用相同的语法。所有的事件过程都使用相同的语法。控件事件的语法:控件事件的语法:private sub 控件名控件名_事件名事件名 (参数列表参数列表 ) 语句块语句块 end sub窗体事件的语法:窗体事件的语法:private sub form_事件名事件名 (参数列表参数列表) 语句块语句块end sub1定义子过程定义子过程子过程的语法是:子过程的语法是:private | publicstatic sub () exit sub end sub2建立建立

40、sub子过程子过程【案例【案例2-162-16】 矩形面积计算矩形面积计算使用使用sub过程计算矩形的面积,输入矩过程计算矩形的面积,输入矩形的长和宽,输出矩形的面积。形的长和宽,输出矩形的面积。 在【通用】在【通用】/【声明】中定义模块级变量:【声明】中定义模块级变量:dim area as single在窗体模块中建立在窗体模块中建立sub过程,并编写过程,并编写sub过过程响应代码:程响应代码:sub recarea(rlen, rwid) area = rlen * rwidend sub“确定确定”按钮单击事件中的代码为按钮单击事件中的代码为private sub command1_

41、click() dim a as single, b as single a = val(text1.text) b = val(text2.text) recarea a, b call recarea(a, b) text3.text = areaend sub“清除清除”按钮单击事件中的代码为按钮单击事件中的代码为private sub command2_click() text1.text = text2.text = text3.text = end sub【案例【案例2-172-17】 打印等腰三角形打印等腰三角形在同一窗体建立两个过程,在同一窗体建立两个过程,triangle是通

42、用是通用过程,过程,form_click是窗体事件过程,执行程序时,是窗体事件过程,执行程序时,单击窗体将在窗体显示两个等腰三角形,如图所示。单击窗体将在窗体显示两个等腰三角形,如图所示。private sub triangle(str as string, n as integer) dim i as integer, j as integer for i = l to n print tab(16 - i); for j = 1 to 2 * i - 1 print str; next j print next iend subprivate sub form_click() dim ch

43、ar as string * 1, n as integer char = * n = 5 call triangle(char, n) char = + triangle char, 3end subvisual basic 6.0包含内置的或内部的函数,包含内置的或内部的函数,如如sqr,cos或或chr。此外,还可用。此外,还可用function语句语句编写自己的编写自己的function函数过程。函数过程。与与sub过程一样,过程一样,function过程也是一个独过程也是一个独立的过程,可读取参数,执行一系列语句并改变立的过程,可读取参数,执行一系列语句并改变其参数的值。与子过程不同

44、,其参数的值。与子过程不同,function过程可返过程可返回一个值到调用的过程。回一个值到调用的过程。1定义定义function过程过程函数过程的语法是:函数过程的语法是:static public | private function ()as 函数名函数名=返回值返回值exit functionend function 其中,其中, as类型:函数返回值的类型,若类型说明默认,则返回类型:函数返回值的类型,若类型说明默认,则返回变体类型值。变体类型值。 参数列表形式同参数列表形式同sub过程。过程。 在函数体内至少对函数名赋值一次。在函数体内至少对函数名赋值一次。2建立建立functio

45、n过程过程前一节提到建立前一节提到建立sub过程的两种方法过程的两种方法也可以建立也可以建立function过程,只是当用第一过程,只是当用第一种方法建立时,在【添加过程】对话框的种方法建立时,在【添加过程】对话框的【类型】栏内应选择【函数】单选按钮;【类型】栏内应选择【函数】单选按钮;另外,两种方法中的另外,两种方法中的sub应换成应换成function。3调用调用function过程过程 通常,调用自行编写的函数过程的方法和调用通常,调用自行编写的函数过程的方法和调用visual basic 6.0内部函数过程(例如内部函数过程(例如cos)的方法一样,)的方法一样,即在表达式中写上它的名

46、字。下面的语句都调用函数即在表达式中写上它的名字。下面的语句都调用函数txt。print 10 * txtx = txtif txt = 10 then print out of range; x = ;10 * txt像调用像调用sub过程那样,也能调用函数。下面的语句过程那样,也能调用函数。下面的语句都调用同一个函数:都调用同一个函数:call sin(x)sin x【案例【案例2-182-18】 矩形面积计算矩形面积计算本案例使用本案例使用function过程计算矩形面积。过程计算矩形面积。输入矩形的长和宽,输出矩形的面积。输入矩形的长和宽,输出矩形的面积。 在窗体模块中建立在窗体模块中

47、建立function过程,并编写过程响应代码:过程,并编写过程响应代码:function recarea(rlen, rwid) as single recarea = rlen * rwidend function“确定确定”按钮单击事件中的代码为按钮单击事件中的代码为private sub command1_click() dim a as single, b as single a = val(text1.text) b = val(text2.text) text3.text = str(recarea(a, b)end sub “清空清空”按钮单击事件中的代码为按钮单击事件中的代码为

48、private sub command2_click() text1.text = text2.text = text3.text = end sub参数传递可以实现调用过程和被调过程之间的信参数传递可以实现调用过程和被调过程之间的信息交换,在过程的调用中,调用其他过程的过程称为主息交换,在过程的调用中,调用其他过程的过程称为主过程,被调用的过程称为子过程。当被调用的子过程要过程,被调用的过程称为子过程。当被调用的子过程要使用主过程中的数据时,就必须使用参数传递。参数分使用主过程中的数据时,就必须使用参数传递。参数分为形式参数和实际参数。为形式参数和实际参数。形式参数(简称形参):在子过程中的

49、参数,出现在形式参数(简称形参):在子过程中的参数,出现在sub过程和过程和function过程中。形式参数可以是变量名和数过程中。形式参数可以是变量名和数组名。组名。实际参数(简称实参):在主过程中的参数,过程调用实际参数(简称实参):在主过程中的参数,过程调用时实参数据会传递给形参。时实参数据会传递给形参。在在visual basic 6.0中,实参与形参的结合有两种方法,即中,实参与形参的结合有两种方法,即传址传址(byref)和传值和传值(byval),其中传址又称为引用,是默,其中传址又称为引用,是默认的方法。认的方法。 1按值传递参数按值传递参数用用“byval”关键字指出参数是按

50、值来传递的。按关键字指出参数是按值来传递的。按值传递参数时,传递的只是变量的副本。当调用一个过值传递参数时,传递的只是变量的副本。当调用一个过程时,系统将实参的值复制给形参,实参与形参断开了程时,系统将实参的值复制给形参,实参与形参断开了联系。被调过程中的操作是在形参自己的存储单元中进联系。被调过程中的操作是在形参自己的存储单元中进行的,当过程调用结束时,形参所占用的存储单元也同行的,当过程调用结束时,形参所占用的存储单元也同时被释放。因此在过程体内对形参的任何操作不会影响时被释放。因此在过程体内对形参的任何操作不会影响到实参。到实参。2按地址传递参数按地址传递参数按地址传递参数在按地址传递参

51、数在visual basic 6.0中是缺省的,即中是缺省的,即不用不用“byval”关键字。按传址方式时,则是把变量在内关键字。按传址方式时,则是把变量在内存中的地址传递给形参。这时,形参将与原变量使用内存中的地址传递给形参。这时,形参将与原变量使用内存中的同一地址。也就是说,如果在过程中改变了这个存中的同一地址。也就是说,如果在过程中改变了这个形参的值,原变量也会随之而改变。形参的值,原变量也会随之而改变。3选用传值还是传地址的使用规则选用传值还是传地址的使用规则 形参是数组、自定义类型时只能用传地址方式,形参是数组、自定义类型时只能用传地址方式,若要将过程中的结果返回给主调程序,则形参必若要将过程中的结果返回给主调程序,则形参必须是传址方式。这时实参必须是同类型的变量名,须是传址方式。这时实参必须是同类型的变量名,不能是常量或表达式。不能是常量或表达式。 若形参不是上述中的两种情况,一般应选用传若形参不是上述中的两种情况,一般应选用传值方式。这样可增加程序的可靠性和便于调试,值方式。这样可增加程序的可靠性和便于调试,减少各过程间的关联。因为在过程体内对形参的减

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论