




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六章第六章 过过 程程 6.1 6.1 函数过程的定义与调用函数过程的定义与调用 6.2 6.2 子过程的定义与调用子过程的定义与调用 6.3 6.3 参数传递参数传递 6.4 6.4 递递 归归 6.5 6.5 综合应用综合应用 本章目录本章目录 6.1 6.1 函数过程的定义和调用函数过程的定义和调用 6.1.1 引例引例6.1已知多边形各条边已知多边形各条边 的长度,计算多边形的面积。的长度,计算多边形的面积。 计算多边形面积,可将多边形分解计算多边形面积,可将多边形分解 成若干个三角形。计算三角形面积成若干个三角形。计算三角形面积 的公式如下:的公式如下: a b d e f g S
2、1 c S2 S3 )( 2 1 )()(zyxczcycxccarea 本章目录本章目录 6.1.1 6.1.1 引例引例 定义函数过程定义函数过程area Public Function area(x!, y!, z!) As Single Dim c! c = 1 / 2 * (x + y + z) area = Sqr(c * (c - x) * (c - y) * (c - z) End Function Sub command1_click() 输入若干个三角形边长输入若干个三角形边长 S=area(a,b,c)+area(c,d,e)+area(e,f,g) Print S En
3、d Sub 调调 用用 函函 数数 过过 程程 本章目录本章目录 .2函数过程的定义函数过程的定义 在窗体、模块等的代码窗口把插入点放在所有现在窗体、模块等的代码窗口把插入点放在所有现 有过程之外,直接输入函数过程。定义函数过程有过程之外,直接输入函数过程。定义函数过程 的形式如下:的形式如下: Public |Private Function函数过程函数过程(形参形参)As 类型类型 变量声明变量声明 语句块语句块 Return 表达式表达式 或或 函数名函数名=表达式表达式 End Function 本章目录本章目录 函数过程的定义函数过程的定义 vPublic 全局函数过
4、程,可被程序任何模块调全局函数过程,可被程序任何模块调 用用 vPrivate 仅供本模块中的其它过程调用仅供本模块中的其它过程调用 v形参形参(或称哑元或称哑元) 只能是变量或数组名只能是变量或数组名( ),仅表示仅表示 参数的个数、类型,无值。参数的个数、类型,无值。 例例6.26.2 编一求最大公约数的函数过程编一求最大公约数的函数过程 Function gcd( m%, n%) As Integer If m n Then t = m: m = n: n = t Do while n0 r = m Mod n : m = n: n = r Loop gcd = m End Functi
5、on 本章目录本章目录 .3函数过程的调用函数过程的调用 调用形式:调用形式:函数过程名函数过程名(参数列表参数列表) 参数列表参数列表(称为实参或实元称为实参或实元):必须与形参个数相同,位置与:必须与形参个数相同,位置与 类型一一对应。可以是同类型的常量、变量、表达式。类型一一对应。可以是同类型的常量、变量、表达式。 SubSub Form1_Click( Form1_Click() ) Handles MyBase.Click Handles MyBase.Click Dim x%, y%, z% Dim x%, y%, z% x = 124: y = 24 x = 12
6、4: y = 24 z = gcd(x, y) z = gcd(x, y) MsgBox( MsgBox(最大公约数是最大公约数是 & z) & z) End SubEnd Sub 程序运程序运 行流程行流程 Function gcd( m%, n%) As Integer If m n Then t = m: m = n: n = t Do while n0 r = m Mod n : m = n: n = r Loop gcd = m End Function Sub Form1_Click(Sub Form1_Click() Handles MyBase.Click) Handles M
7、yBase.Click Dim x%, y%, z% Dim x%, y%, z% x = 124: y = 24 x = 124: y = 24 z = gcd(x, y) z = gcd(x, y) Function gcd( m%, n%) As Integer If m n Then t = m: m = n: n = t Do while n0 r = m Mod n : m = n: n = r Loop gcd = m End Function MsgBox( MsgBox(最大公约数是最大公约数是 & z) & z) End SubEnd Sub 本章目录本章目录 调用演示调用
8、演示 函数过程的调用函数过程的调用 例例6.36.3编一函数,统计字符串中汉字的个数。编一函数,统计字符串中汉字的个数。 分析:在分析:在VB.NET中,字符以中,字符以Unicode码存放,码存放, 每个汉字和英文是一个字符、占有两个字节,每个汉字和英文是一个字符、占有两个字节, 区别是汉字的机内码最高位为区别是汉字的机内码最高位为1,若利用,若利用Asc函函 数求其码值为小于数求其码值为小于0(以补码表示),而西文字(以补码表示),而西文字 符的最高位为符的最高位为0,Asc函数求其码值为大于函数求其码值为大于0 本章目录本章目录 代码说明代码说明 6.2 6.2 子过程的定义与调用子过程
9、的定义与调用 6.2.1 引例引例 以下情况使用函数过程存在不足:以下情况使用函数过程存在不足: v不是为了获得某个函数值,而是为了某种功不是为了获得某个函数值,而是为了某种功 能的处理。能的处理。 v要获得多个结果。要获得多个结果。 VB.NET中提供了使用更灵活的子过程。中提供了使用更灵活的子过程。 例例6.4编一过程,对编一过程,对Label1控件进行移动,通过控件进行移动,通过 参数参数Tag的值(的值(1或或-1)决定移动方向。)决定移动方向。 该过程不是为了计算获得某个结果,而是进行该过程不是为了计算获得某个结果,而是进行 对控件移动的处理。对控件移动的处理。 本章目录本章目录 代
10、码说明代码说明 .2子过程的定义子过程的定义 子过程定义的方法同函数过程,形式如下:子过程定义的方法同函数过程,形式如下: Sub Sub 子过程名子过程名(参数列表参数列表) 局部变量或常数定义局部变量或常数定义 语句语句 Exit Sub 语句语句 End SubEnd Sub 子过程名、形参同函数过程中对应项的规定,子过程名、形参同函数过程中对应项的规定, 当无形参时不要括号。当无形参时不要括号。 本章目录本章目录 子过程与函数过程的区别子过程与函数过程的区别 q 把某功能定义为函数过程还是子过程,没有严格的把某功能定义为函数过程还是子过程,没有严格的 规定。一般若程序有
11、一个返回值时,函数过程直观;规定。一般若程序有一个返回值时,函数过程直观; 当有多个返回值时,习惯用子过程。当有多个返回值时,习惯用子过程。 q 函数过程必须有返回值,函数名有类型。子过程名函数过程必须有返回值,函数名有类型。子过程名 没有值,过程名没有类型,不能在子过程体内对子过没有值,过程名没有类型,不能在子过程体内对子过 程名赋值。程名赋值。 q 形参是过程与主调程序交互的接口,从主调程序获形参是过程与主调程序交互的接口,从主调程序获 得初值,或将计算结果返回给主调程序。不要将过程得初值,或将计算结果返回给主调程序。不要将过程 中所有使用过的变量均作为形参。中所有使用过的变量均作为形参。
12、 q 形参没有具体的值,只代表了参数的个数、位置、形参没有具体的值,只代表了参数的个数、位置、 类型;只能是简单变量、数组名,不能是常量、数组类型;只能是简单变量、数组名,不能是常量、数组 元素、表达式。元素、表达式。 本章目录本章目录 子过程的调用是一句独立的调用语句,有两种子过程的调用是一句独立的调用语句,有两种 形式:形式: Call Call 子过程名子过程名(实参列表实参列表) 子过程名子过程名 (实参列表实参列表) 用用Call关键字时,若有实参,则实参必须用圆关键字时,若有实参,则实参必须用圆 括号括起,无实参圆括号省略括号括起,无实参圆括号省略 注意:注意:若实参要获得子过程的
13、返回值,则实参若实参要获得子过程的返回值,则实参 只能是变量只能是变量( (与形参同类型的简单变量、数组名、与形参同类型的简单变量、数组名、 结构类型结构类型) ),不能是常量、表达式,也不能是控,不能是常量、表达式,也不能是控 件名。件名。 .3子过程调用子过程调用 本章目录本章目录 例例6.5 6.5 分别编一统计字符串分别编一统计字符串S S中定冠词中定冠词TheThe出现个出现个 数的子过程和函数过程,并分别调用。数的子过程和函数过程,并分别调用。 处理方法:利用处理方法:利用InStrInStr函数反复在函数反复在字符串字符串S找找T The 子串。子串。 对同一问题
14、定义两种过程时,只要抓住函数过程对同一问题定义两种过程时,只要抓住函数过程 和子过程的区别,即函数名有一个值、子过程名和子过程的区别,即函数名有一个值、子过程名 无值的特点。当定义好函数过程后,要改为子过无值的特点。当定义好函数过程后,要改为子过 程,只要将函数过程的返回结果作为子过程的形程,只要将函数过程的返回结果作为子过程的形 参,即在子过程中增加一个参数;反之也然。参,即在子过程中增加一个参数;反之也然。 .3子过程调用子过程调用 本章目录本章目录 代码说明代码说明 6.3 6.3 参数传递参数传递 6.3.1 形参与实参形参与实参 在参数传递中,一般是按位置传送,按实参
15、的位在参数传递中,一般是按位置传送,按实参的位 置次序与形参的位置次序对应传送,与参数名没置次序与形参的位置次序对应传送,与参数名没 有关系。有关系。 按位置传送是最常用的参数传递方法,如在调用按位置传送是最常用的参数传递方法,如在调用 标准函数时,用户根本不知道形参名,只要关心标准函数时,用户根本不知道形参名,只要关心 形参的个数、类型、位置,例如形参的个数、类型、位置,例如Mid函数形式:函数形式: MidMid(字符串字符串$,起始位,起始位%,取几位,取几位%) 调用语句:调用语句:s=Mid(This is VB.NET ,9,2) 则则s中的结果为中的结果为“VB”。 本章目录本章
16、目录 6.3.2 6.3.2 传址与传值传址与传值 实参与形参的结合有实参与形参的结合有传址传址(ByRef)和和传值传值(ByVal) 两种方法。两种方法。 v 传址方式参数结合过程传址方式参数结合过程 当调用一个过程时,当调用一个过程时, 它将实参的地址传递给形参。因此在被调过程体它将实参的地址传递给形参。因此在被调过程体 中对形参的任何操作都变成了对相应实参的操作,中对形参的任何操作都变成了对相应实参的操作, 实参的值就会随过程体内对形参的改变而实参的值就会随过程体内对形参的改变而改变改变。 v 传值方式参数结合过程传值方式参数结合过程 当调用一个过程时,当调用一个过程时, 系统将实参的
17、值复制给形参,实参与形参断开了系统将实参的值复制给形参,实参与形参断开了 联系。在过程体内对形参的任何操作联系。在过程体内对形参的任何操作不会影响不会影响到到 实参。实参。 本章目录本章目录 传址与传值传址与传值 a的 地 址 1 0 1 0 1 0 aa x x 形 参 实 参 B yV al 传 值传 地 址 本章目录本章目录 传址与传值传址与传值 选用传值还是传地址一般进行如下考虑:选用传值还是传地址一般进行如下考虑: q 要将被调过程中的结果返回给主调程序,则要将被调过程中的结果返回给主调程序,则 形参必须是传址方式。这时实参必须是同类型的形参必须是传址方式。这时实参必须是同类型的 变
18、量名变量名( (包括简单变量、数组名、结构类型等包括简单变量、数组名、结构类型等) ), 不能是常量、表达式。不能是常量、表达式。 q 不希望过程修改实参的值,则应选用传值方不希望过程修改实参的值,则应选用传值方 式,减少各过程间的关联。因为在过程体内对形式,减少各过程间的关联。因为在过程体内对形 参的改变不会影响实参。参的改变不会影响实参。 q 形参是数组都是地址传递形参是数组都是地址传递( (可表示值传递或地可表示值传递或地 址传递址传递) )。 本章目录本章目录 例例6.86.8如下如下sumsum子过程求数组子过程求数组a a各元素和、并改变各元素和、并改变 数组各元素值:数组各元素值
19、: FunctionFunction 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 i EndEnd FunctionFunction 6.3.3 6.3.3 数组参数的传递数组参数的传递 本章目录本章目录 v形参是数组形参是数组 要以数组名加圆括号表示
20、,不要要以数组名加圆括号表示,不要 给出维数上界;多维数组,每维以逗号分隔。在给出维数上界;多维数组,每维以逗号分隔。在 过程中通过过程中通过Ubound函数确定每维的上界。函数确定每维的上界。 v实参是数组实参是数组 要给出数组名要给出数组名(不需要圆括号不需要圆括号)。 v当数组作为参数传递时,系统将实参数组的起当数组作为参数传递时,系统将实参数组的起 始地址传给过程,使形参数组也具有与实参数组始地址传给过程,使形参数组也具有与实参数组 相同的起始地址。相同的起始地址。 数组参数的传递数组参数的传递 13579 形参数组形参数组 实参数组实参数组 本章目录本章目录 6.3.4 6.3.4
21、变量的作用域变量的作用域 v块变量块变量 在控制结构块中声明的变量,只能在在控制结构块中声明的变量,只能在 本块内有效本块内有效 v过程级变量过程级变量 在一个过程内用在一个过程内用Dim或或Static语句语句 声明的变量,只能在本过程中使用声明的变量,只能在本过程中使用 v模块级变量模块级变量 在模块内、任何过程外用在模块内、任何过程外用Dim、 Private语句声明的变量,可被本模块的任何过程语句声明的变量,可被本模块的任何过程 访问访问 v全局变量全局变量 在模块级用在模块级用Public语句声明的变量,语句声明的变量, 可被应用程序的任何过程或函数访问可被应用程序的任何过程或函数访
22、问 本章目录本章目录 变量的作用域变量的作用域 例如在下面一个标准模块文件中不同级的变量声明:例如在下面一个标准模块文件中不同级的变量声明: Public Pa As integer 全局变量全局变量 Private Mb As string *10 窗体窗体/模块级变量模块级变量 Sub F1( ) Dim Fa As integer 局部变量局部变量 End Sub Sub F2( ) Dim Fb As Single 局部变量局部变量 End Sub 本章目录本章目录 Sub Button1_Click() Handles Button1.Click Dim i% ,isum% For
23、i = 1 To 5 isum = sum(i) TextBox1.Text &= isum= & isum & vbCrLf Next i End Sub Function sum(ByVal n As Integer) Static j As Integer j = j + n sum = j End Function 6.3.5 6.3.5 静态变量静态变量 静态变量静态变量 程序运行过程中可程序运行过程中可保留变量的值保留变量的值 声明形式:声明形式:Static Static 变量名变量名 AS 类型类型 用用Dim声明的变量,每次调用过程时重新初始化声明的变量,每次调用过程时重新初
24、始化 例例6.10比较比较Dim和和Static两者的区别。两者的区别。 本章目录本章目录 递归过程在自身定义的内部调用自己。递归过程在自身定义的内部调用自己。 例例6.12编编fac(n)=n! 的递归函数的递归函数 Function fac(n As Integer) As Integer If n = 1 Then fac = 1 Else fac = n * fac(n - 1) End If End Function 1) 1fac(* 11 )fac( nnn n n 6.4 6.4 递归递归 用自身的结构来描述自用自身的结构来描述自 身就称为递归。身就称为递归。 最典型的例子是阶
25、乘运最典型的例子是阶乘运 算算, ,作如下的定义:作如下的定义: )!2() 1()!1( )!1(! nnn nnn 本章目录本章目录 递推递推回归回归 递推过程:每调用自身,当前参数压栈,直到达到递归结束条件。递推过程:每调用自身,当前参数压栈,直到达到递归结束条件。 回归过程:不断从栈中弹出当前的参数,直到栈空。回归过程:不断从栈中弹出当前的参数,直到栈空。 递归算法设计简单,但消耗的机时和占据的内存空间比非递归大递归算法设计简单,但消耗的机时和占据的内存空间比非递归大 由此可见构成递归的结构如下:由此可见构成递归的结构如下: 递归结束条件及结束时的值;递归结束条件及结束时的值; 能用递
26、归形式表示,并且递归向终止条件发展。能用递归形式表示,并且递归向终止条件发展。 fac(2)=2*fac(1) fac(1)=1 fac(4)=4*6fac(3)=3*2fac(2)=2*1 fac(3)=3*fac(2)fac(4)=4*fac(3) 本章目录本章目录 递归结构递归结构 6.5 6.5 综合应用综合应用 6.5.1 数制转换数制转换 不同进制数之间的转换,可通过编程来实现;也可通过不同进制数之间的转换,可通过编程来实现;也可通过 VB.NET提供的内部函数:十进制转换为八进制函数(提供的内部函数:十进制转换为八进制函数( Oct)、转换为十六进制函数()、转换为十六进制函数(
27、Hex)来实现。)来实现。 例例6.136.13编一函数,实现一个十进制整数转换成二至十六编一函数,实现一个十进制整数转换成二至十六 任意进制的字符。任意进制的字符。 一个十进制正整数一个十进制正整数m转换成转换成r进制数的思路进制数的思路:将将m 不断除不断除r取余数取余数(若余数超过若余数超过9,还要进行相应的转,还要进行相应的转 换,例如换,例如10变成变成A,11变成变成B等等),直到商为零,直到商为零, 以反序得到结果,即最后得到的余数在最高位。以反序得到结果,即最后得到的余数在最高位。 本章目录本章目录 代码说明代码说明 综合应用综合应用- -加密加密 2.加密和解密加密和解密 信息加密是信息安全性的措施之一。信息加密有信息加密是信息安全性的措施之一。信息加密有 各种方法,最简单的加密方法是将每个字母平移各种方法,最简单的加密方法是将每个字母平移 一个位置一个位置( 称为密钥称为密钥)。例如,后移。例如,后移5个位置,这个位置,这 时,时,AF,B G Y D,ZE ,a f ;解;解 密是加密的逆操作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论