




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 VB.NET程序设计教程程序设计教程本书目录本书目录Visual Basic.NETVisual Basic.NET程序设计教程程序设计教程上海商学院信息管理与信息系统教研室上海商学院信息管理与信息系统教研室沈群力(沈群力(SQL)http:/ VB.NET程序设计教程程序设计教程本书目录本书目录2 2第六章第六章 过过 程程 6.1 6.1 函数过程的定义与调用函数过程的定义与调用6.2 6.2 子过程的定义与调用子过程的定义与调用6.3 6.3 参数传递参数传递6.4 6.4 递递 归归6.5 6.5 综合应用综合应用 本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书目
2、录3 3u过程的引入过程的引入: 使同类的操作不重复编写,使同类的操作不重复编写,写一次多次用写一次多次用 把一项复杂的工作分成简单的功能块把一项复杂的工作分成简单的功能块,分而治之分而治之u过程过程: 完成一段独立功能,可供其他过程使用完成一段独立功能,可供其他过程使用(调用调用)。u调用过程调用过程: 调用其他过程的过程调用其他过程的过程调用过程调用过程: 调用调用Sprg1调用调用Sprg1调用调用Sprg2子过程子过程: Sprg1子过程子过程: Sprg2 VB.NET程序设计教程程序设计教程本书目录本书目录4 4常用过程分类常用过程分类:Sub过程过程Function过程过程事件过
3、程事件过程自定义子过程自定义子过程 内部函数内部函数(标准函数)标准函数) 自定义函数过程自定义函数过程1)过程是一段程序代码,是相对独立的逻辑模块。)过程是一段程序代码,是相对独立的逻辑模块。2)一个完整的)一个完整的VB应用程序由若干过程和模块组成。应用程序由若干过程和模块组成。本节主要介绍用户自定义的本节主要介绍用户自定义的Sub子过程:完成一定的操作和功能,无返回值。子过程:完成一定的操作和功能,无返回值。Function函数过程:完成一定的操作和功能,并且可函数过程:完成一定的操作和功能,并且可将数据处理的结果返回。将数据处理的结果返回。 VB.NET程序设计教程程序设计教程本书目录
4、本书目录5 56.1 6.1 函数过程的定义和调用函数过程的定义和调用 6.1.1 引例引例6.1已知多边形各条边已知多边形各条边的长度,计算多边形的面积。的长度,计算多边形的面积。计算多边形面积,可将多边形分解计算多边形面积,可将多边形分解成若干个三角形。计算三角形面积成若干个三角形。计算三角形面积的公式如下:的公式如下:a b d e f g S1 c S2 S3 )(21)()(zyxczcycxccarea本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书目录6 66.1.1 6.1.1 引例引例 定义函数过程定义函数过程areaFunction area(x!, y!
5、, z!) As Single Dim c! c = 1 / 2 * (x + y + z) area = Sqrt(c * (c - x) * (c - y) * (c - z)End FunctionSub command1_click() 输入若干个三角形边长输入若干个三角形边长 S=area(a,b,c)+area(c,d,e)+area(e,f,g) msgbox(“面积面积=” & S)End Sub调调用用函函数数过过程程本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书目录7 .2函数过程的定义函数过程的定义 在窗体、模块等的代码窗口把插入点放
6、在所有现在窗体、模块等的代码窗口把插入点放在所有现有过程之外,直接输入函数过程。定义函数过程有过程之外,直接输入函数过程。定义函数过程的形式如下:的形式如下:Public |Private Function函数过程函数过程(形参形参)As 类型类型 变量声明变量声明 语句块语句块 Return 表达式表达式 或或 函数名函数名=表达式表达式End Function本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书目录8 8vPublic 全局函数过程,可被程序任何模块调全局函数过程,可被程序任何模块调用用vPrivate 仅供本模块中的其它过程调用仅供本模块中的其它过程调用v形
7、参形参(或称哑元或称哑元) 只能是变量或数组名只能是变量或数组名( ),仅表示仅表示参数的个数、类型,无值。参数的个数、类型,无值。例例6.2 6.2 编一求最大公约数的函数过程编一求最大公约数的函数过程 Function gcd( m%, n%) As Integer Dim r% If m n Then t = m: m = n: n = t r=m mod n Do while r0 m = n: n = r : r = m Mod n Loop gcd = n End Function本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书目录9 .3函数过
8、程的调用函数过程的调用 调用形式:调用形式:函数过程名函数过程名(参数列表参数列表) 参数列表参数列表(称为实参或实元称为实参或实元):必须与形参个数相同,位置与:必须与形参个数相同,位置与类型一一对应。可以是同类型的常量、变量、表达式。类型一一对应。可以是同类型的常量、变量、表达式。 SubSub Form1_Click( Form1_Click() ) Handles MyBase.Click Handles MyBase.Click Dim x%, y%, z% Dim x%, y%, z% x = 124: y = 24 x = 124: y = 24 z = gcd(x z = gc
9、d(x, y), y) MsgBox MsgBox(最大公约数是最大公约数是 & z) & z)End SubEnd Sub 程序运程序运行流程行流程 Sub Form1_Click(Sub Form1_Click() Handles MyBase.Click) Handles MyBase.Click Dim x%, y%, z% Dim x%, y%, z% x = 124: y = 24 x = 124: y = 24 z = gcd(x z = gcd(x, y), y) Function gcd( m%, n%) As Integer Dim r% If m n Then t = m
10、: m = n: n = t r=m mod n Do while r0 m = n: n = r : r = m Mod n Loop gcd = n End Function MsgBox MsgBox(最大公约数是最大公约数是 & z) & z)End SubEnd Sub 本章目录本章目录调用演示调用演示 VB.NET程序设计教程程序设计教程本书目录本书目录1010函数过程的调用函数过程的调用 例例6.36.3编一函数,统计字符串中汉字的个数。编一函数,统计字符串中汉字的个数。分析:在分析:在VB.NET中,字符以中,字符以Unicode码存放,码存放,每个汉字和英文是一个字符、占有两
11、个字节,每个汉字和英文是一个字符、占有两个字节,区别是汉字的机内码最高位为区别是汉字的机内码最高位为1,若利用,若利用Asc函函数求其码值为小于数求其码值为小于0(以补码表示),而西文字(以补码表示),而西文字符的最高位为符的最高位为0,Asc函数求其码值为大于函数求其码值为大于0 本章目录本章目录代码说明代码说明 VB.NET程序设计教程程序设计教程本书目录本书目录11116.2 6.2 子过程的定义与调用子过程的定义与调用 6.2.1 引例引例以下情况使用函数过程存在不便:以下情况使用函数过程存在不便:v不是为了获得某个函数值,而是为了某种功不是为了获得某个函数值,而是为了某种功能的处理。
12、能的处理。v要获得多个结果。要获得多个结果。VB.NET中提供了使用更灵活的子过程。中提供了使用更灵活的子过程。例例6.4编一过程,对编一过程,对Label1控件进行移动,通过控件进行移动,通过参数参数Tag的值(的值(1或或-1)决定移动方向。)决定移动方向。 该过程不是为了计算获得某个结果,而是进行该过程不是为了计算获得某个结果,而是进行对控件移动的处理。对控件移动的处理。 本章目录本章目录代码说明代码说明 VB.NET程序设计教程程序设计教程本书目录本书目录12.2子过程的定义子过程的定义 子过程定义的方法同函数过程,形式如下:子过程定义的方法同函数过程,形式如下:S
13、ub Sub 子过程名子过程名(参数列表参数列表) 局部变量或常数定义局部变量或常数定义 语句语句 Exit Sub 语句语句End SubEnd Sub子过程名、形参同函数过程中对应项的规定,子过程名、形参同函数过程中对应项的规定,当无形参时不要括号。当无形参时不要括号。本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书目录1313子过程与函数过程的区别子过程与函数过程的区别u 把某功能定义为函数过程还是子过程,没有把某功能定义为函数过程还是子过程,没有严格的规定。一般若程序有一个返回值时,函严格的规定。一般若程序有一个返回值时,函数过程直观;当有多个返回值时,习惯用子过数过
14、程直观;当有多个返回值时,习惯用子过程。程。u 函数过程必须有返回值,函数名有类型。函数过程必须有返回值,函数名有类型。子过程名没有值,过程名没有类型,不能在子子过程名没有值,过程名没有类型,不能在子过程体内对子过程名赋值。过程体内对子过程名赋值。 本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书目录1414参数问题参数问题u形参是过程与主调程序交互的接口,从主调形参是过程与主调程序交互的接口,从主调 程序获得初值,或将计算结果返回给主调程序。程序获得初值,或将计算结果返回给主调程序。不要将过程中所有使用过的变量均作为形参。不要将过程中所有使用过的变量均作为形参。利利6.5找
15、定冠词的找定冠词的rocThe子过程子过程u 形参没有具体的值,只代表了参数的个数、形参没有具体的值,只代表了参数的个数、位置、类型;只能是简单变量、数组名,不能位置、类型;只能是简单变量、数组名,不能是常量、数组元素、表达式。是常量、数组元素、表达式。 本章目录本章目录 Sub ProcThe(ByVal s$, ByRef Count%) End Sub Call ProcThe(Text1.Text, n ) VB.NET程序设计教程程序设计教程本书目录本书目录1515子过程的调用是一句独立的调用语句,有两种子过程的调用是一句独立的调用语句,有两种形式:形式:Call Call 子过程名
16、子过程名(实参列表实参列表)子过程名子过程名 (实参列表实参列表)用用Call关键字时,若有实参,则实参必须用圆关键字时,若有实参,则实参必须用圆括号括起,无实参圆括号省略括号括起,无实参圆括号省略注意:注意:若实参要获得子过程的返回值,则实参若实参要获得子过程的返回值,则实参只能是变量只能是变量( (与形参同类型的简单变量、数组名、与形参同类型的简单变量、数组名、结构类型结构类型) ),不能是常量、表达式,也不能是控,不能是常量、表达式,也不能是控件名。件名。 .3子过程调用子过程调用本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书目录1616例例6.5 6
17、.5 分别编一统计字符串分别编一统计字符串S S中定冠词中定冠词T Thehe出现个出现个数的子过程和函数过程,并分别调用。数的子过程和函数过程,并分别调用。处理方法:利用处理方法:利用InStrInStr函数反复在函数反复在字符串字符串S找找T The子串。子串。.3子过程调用子过程调用本章目录本章目录代码说明代码说明If you cant find the answers you need in the productist VB.NET程序设计教程程序设计教程本书目录本书目录1717例例6.5 6.5 分别编一统计字符串分别编一统计字符串S S中定冠词中定冠词TheThe
18、出现个出现个数的数的子过程和函数过程子过程和函数过程,并分别调用。,并分别调用。处理方法:利用处理方法:利用InStrInStr函数反复在函数反复在字符串字符串St找找TheThe子串。子串。分析:分析:.3子过程调用子过程调用本章目录本章目录If you cant find the answers you need in the productiSt VB.NET程序设计教程程序设计教程本书目录本书目录1818两种过程使用的区别两种过程使用的区别: : 函数名有一个值、子过程名无值函数名有一个值、子过程名无值要将函数过程改为子过程要将函数过程改为子过程: : 将函数过程的返回
19、结果作为子过程的一个形参将函数过程的返回结果作为子过程的一个形参本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书目录19196.3 6.3 参数传递参数传递 6.3.1 形参与实参形参与实参在参数传递中,一般是按位置传送,按实参的位在参数传递中,一般是按位置传送,按实参的位置次序与形参的位置次序对应传送,与参数名没置次序与形参的位置次序对应传送,与参数名没有关系。有关系。按位置传送是最常用的参数传递方法,如在调用按位置传送是最常用的参数传递方法,如在调用标准函数时,用户根本不知道形参名,只要关心标准函数时,用户根本不知道形参名,只要关心形参的个数、类型、位置,例如形参的个数、
20、类型、位置,例如Mid函数形式:函数形式: MidMid(字符串字符串$,起始位,起始位%,取几位,取几位%)调用语句:调用语句:s=Mid(This is VB.NET ,9,2)则则s中的结果为中的结果为“VB”。 若若: s=Mid(9,“This is VB.NET” ,2) 则错误则错误本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书目录20206.3.2 6.3.2 传址与传值传址与传值实参与形参的结合有实参与形参的结合有传址传址(ByRef,默认默认)和和传值传值(ByVal)两种方法。两种方法。v 传址方式参数结合过程传址方式参数结合过程 当调用一个过程时,当
21、调用一个过程时,它将实参的地址传递给形参。因此在被调过程体它将实参的地址传递给形参。因此在被调过程体中对形参的任何操作都变成了对相应实参的操作,中对形参的任何操作都变成了对相应实参的操作,实参的值就会随过程体内对形参的改变而实参的值就会随过程体内对形参的改变而改变改变。v 传值方式参数结合过程传值方式参数结合过程 当调用一个过程时,当调用一个过程时,系统将实参的值复制给形参,实参与形参断开了系统将实参的值复制给形参,实参与形参断开了联系。在过程体内对形参的任何操作联系。在过程体内对形参的任何操作不会影响不会影响到到实参。实参。 本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书
22、目录2121例例6.7 传址与传值传址与传值a的 地 址 1 0 1 0 1 0aa x x形 参实 参B yV al 传 值传 地 址本章目录本章目录形参获得实形参获得实参的值参的值形参获得实形参获得实参的地址参的地址 VB.NET程序设计教程程序设计教程本书目录本书目录2222传址与传值传址与传值选用传值还是传地址一般进行如下考虑:选用传值还是传地址一般进行如下考虑:q 要将被调过程中的结果返回给主调程序,则要将被调过程中的结果返回给主调程序,则形参必须是传址方式。这时实参必须是同类型的形参必须是传址方式。这时实参必须是同类型的变量名变量名( (包括简单变量、数组名、结构类型等包括简单变量
23、、数组名、结构类型等) ),不能是常量、表达式。不能是常量、表达式。q 不希望过程修改实参的值,则应选用传值方不希望过程修改实参的值,则应选用传值方式,减少各过程间的关联。因为在过程体内对形式,减少各过程间的关联。因为在过程体内对形参的改变不会影响实参。参的改变不会影响实参。q 形参是数组都是地址传递形参是数组都是地址传递( (可表示值传递或地可表示值传递或地址传递址传递) )。 本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书目录2323例例6.86.8如下如下sumsum子过程求数组子过程求数组a a各元素和、并改变各元素和、并改变数组各元素值:数组各元素值:Functi
24、onFunction sum%( sum%(ByValByVal x() x() AsAs IntegerInteger) ) Dim Dim i% i% sum = 0 sum = 0 For For i = 0 i = 0 ToTo UBound(x UBound(x) ) sum += x(i) sum += x(i):x(i) = 2 x(i) = 2 * * x(i) x(i) Next Next i iEndEnd FunctionFunction6.3.3 6.3.3 数组参数的传递数组参数的传递 本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书目录2424v形
25、参是数组形参是数组 要以数组名加圆括号表示,不要要以数组名加圆括号表示,不要给出维数上界;多维数组,每维以逗号分隔。在给出维数上界;多维数组,每维以逗号分隔。在过程中通过过程中通过Ubound函数确定每维的上界。函数确定每维的上界。v实参是数组实参是数组 要给出数组名要给出数组名(不需要圆括号不需要圆括号)。v当数组作为参数传递时,系统将实参数组的起当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组始地址传给过程,使形参数组也具有与实参数组相同的起始地址。相同的起始地址。 数组参数的传递数组参数的传递 13579形参数组形参数组实参数组实参数组本章目录本章目录
26、VB.NET程序设计教程程序设计教程本书目录本书目录25256.3.4 6.3.4 变量的作用域变量的作用域 u块变量块变量 在控制结构块中声明的变量,只能在在控制结构块中声明的变量,只能在 本块内有效本块内有效 u过程级变量过程级变量 在一个过程内用在一个过程内用Dim或或Static语句语句 声明的变量,只能在本过程中使用声明的变量,只能在本过程中使用 u模块级变量模块级变量 在模块内、任何过程外用在模块内、任何过程外用Dim、Private语句声明的变量,可被本模块的任何过程语句声明的变量,可被本模块的任何过程访问访问 u全局变量全局变量 在模块级用在模块级用Public语句声明的变量,
27、语句声明的变量,可被应用程序的任何过程或函数访问可被应用程序的任何过程或函数访问 本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书目录2626变量的作用域变量的作用域 例如在下面一个标准模块文件中不同级的变量声明:例如在下面一个标准模块文件中不同级的变量声明: Public Pa As integer 全局变量全局变量 Private Mb As string *10 窗体窗体/模块级变量模块级变量 Sub F1( ) Dim Fa As integer 过程级变量过程级变量 End Sub Sub F2( ) Dim Fb As Single 过程级变量过程级变量For i
28、=1 to 10 Dim k% 块变量块变量 Next i End Sub本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书目录2727Sub Button1_Click() Handles Button1.Click Dim i% ,isum% For i = 1 To 5 isum = sum(i) TextBox1.Text &= isum= & isum & vbCrLf Next iEnd SubFunction sum(ByVal n As Integer) Static j As Integer j = j + n sum = jEnd Function6.3.5
29、 6.3.5 静态变量静态变量 静态变量静态变量 程序运行过程中可程序运行过程中可保留变量的值保留变量的值声明形式:声明形式:Static Static 变量名变量名 AS 类型类型用用Dim声明的变量,每次调用过程时重新初始化声明的变量,每次调用过程时重新初始化例例6.10比较比较Dim和和Static两者的区别。两者的区别。 本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书目录2828递归过程在自身定义的内部调用自己。递归过程在自身定义的内部调用自己。例例6.12编编fac(n)=n! 的递归函数的递归函数Function fac(n As Integer) As Int
30、eger If n = 1 Then fac = 1 Elsefac = n * fac(n - 1) End IfEnd Function1) 1fac(*11)fac(nnnnn6.4 6.4 递归递归用自身的结构来描述自用自身的结构来描述自身就称为递归。身就称为递归。最典型的例子是阶乘运最典型的例子是阶乘运算算, ,作如下的定义:作如下的定义: )!2() 1()!1()!1(!nnnnnn本章目录本章目录 VB.NET程序设计教程程序设计教程本书目录本书目录2929递推递推回归回归递推过程:每调用自身,当前参数压栈,直到达到递归结束条件。递推过程:每调用自身,当前参数压栈,直到达到递归
31、结束条件。回归过程:不断从栈中弹出当前的参数,直到栈空。回归过程:不断从栈中弹出当前的参数,直到栈空。递归算法设计简单,但消耗的机时和占据的内存空间比非递归大递归算法设计简单,但消耗的机时和占据的内存空间比非递归大由此可见构成递归的结构如下:由此可见构成递归的结构如下: 递归结束条件及结束时的值;递归结束条件及结束时的值; 能用递归形式表示,并且递归向终止条件发展。能用递归形式表示,并且递归向终止条件发展。fac(2)=2*fac(1)fac(1)=1fac(4)=4*6fac(3)=3*2fac(2)=2*1fac(3)=3*fac(2)fac(4)=4*fac(3)本章目录本章目录递归结构
32、递归结构 VB.NET程序设计教程程序设计教程本书目录本书目录30306.5 6.5 综合应用综合应用 1 数制转换数制转换不同进制数之间的转换,可通过编程来实现;也可通过不同进制数之间的转换,可通过编程来实现;也可通过VB提供的内部函数:十进制转换为八进制函数(提供的内部函数:十进制转换为八进制函数(Oct)、)、转换为十六进制函数(转换为十六进制函数(Hex)来实现。)来实现。例例6.13编一函数,实现一个十进制整数转换成二至十六编一函数,实现一个十进制整数转换成二至十六任意进制的字符。任意进制的字符。分析:十进制正整数分析:十进制正整数m转换成转换成r进制数,进制数,将将m不断除不断除r
33、取取余数余数(若余数超过若余数超过9,还要进行相应的转换,例如,还要进行相应的转换,例如10变成变成A,11变成变成B等等),直到商为零直到商为零,以,以反序得到结果反序得到结果,即最,即最后得到的余数在最高位。后得到的余数在最高位。本章目录本章目录演示演示 VB.NET程序设计教程程序设计教程本书目录本书目录3131综合应用综合应用- -加密加密2.加密和解密加密和解密信息加密是信息安全性的措施之一。信息加密有信息加密是信息安全性的措施之一。信息加密有各种方法,最简单的加密方法是将每个字母平移各种方法,最简单的加密方法是将每个字母平移一个位置一个位置( 称为密钥称为密钥)。例如,后移。例如,后移5个位置,这个位置,这时,时,AF,B G Y D,ZE ,a f ;解;解密是加密的逆操作。密是加密的逆操作。例例6.14 6.14 编一加密和解密的程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年住宅小区物业停车位临时使用许可协议
- 二零二五年度美容院品牌形象升级与推广协议
- 2025年度车辆名义挂靠代管代购代付协议
- 2025年度门面转让及品牌形象使用权合同
- 2025年度智能快递仓储租赁服务合同协议书
- 2025年度智能房屋出租管理服务协议书
- 2025年度沙场开采与地质灾害防治承包服务合同
- 版权许可合同范本
- 二零二五年度体育产业代理记账与赛事运营财务服务合同
- 2025年度鸡场租赁与农业科研合作合同
- 运动疗法技术学
- 《蜀道难》理解性默写(带答案)
- 塔吊租赁(大型机械)-招标文件模板(完整版)2021.5.13
- 物品移交接收单(模板)
- 肺透明膜病课件
- 护理学基础期末试卷及答案
- IMS搅拌桩施工方案
- 我的家乡广西南宁宣传简介
- 变废为宝-小学科学高段活动案例
- 2《幼苗长大了》课件
- 四川省政府采购专家考试试题
评论
0/150
提交评论