六章节过程.ppt

上传人:本田雅阁 文档编号:2596924 上传时间:2019-04-15 格式:PPT 页数:38 大小:1.91MB
返回 下载 相关 举报
六章节过程.ppt_第1页
第1页 / 共38页
六章节过程.ppt_第2页
第2页 / 共38页
六章节过程.ppt_第3页
第3页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《六章节过程.ppt》由会员分享,可在线阅读,更多相关《六章节过程.ppt(38页珍藏版)》请在三一文库上搜索。

1、第六章 过程,第六章 过 程,6.1 函数过程 6.2 子过程 6.3 参数传递 6.4 综合应用 6.5 自主学习-递 归,本章目录,6. 过程概述,一、问题的提出 引例.1 自动和手动事件 例.5 输入数据合法性检验: 回车键、Tab键表示输入,完成相同的输入数据合法性,本章目录,过程的引入: 使同类的操作不重复编写,写一次多次用 把一项复杂的工作分成简单的功能块,分而治之 过程: 完成一段独立功能,可供其他过程使用(调用)。 调用过程: 调用其他过程的过程,调用过程: 调用Sprg1 调用Sprg1 调用Sprg2,子过程: Sprg1,子过程: Sprg2,常用过程分类:,Sub过程,

2、Function过程,事件过程 自定义子过程,内部函数(标准函数) 自定义函数过程,1)过程是一段程序代码,是相对独立的逻辑模块。 2)一个完整的VB应用程序由若干过程和模块组成。 Sub子过程:完成一定的操作和功能,无返回值。 Function函数过程:完成一定的操作和功能,并且可将数据处理的结果返回。,6.1 函数过程,6.1.1 引例求多边形面积 已知多边形各条边的长度,计算多边形的面积。,本章目录,分析: 计算多边形面积,可将多边形分解成若干个三角形。 计算三角形面积的公式如下:,6.1.1 引例,定义函数过程area Function area(x!, y!, z!) As Sing

3、le Dim c! c = 1 / 2 * (x + y + z) area = Sqrt(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) msgbox(“面积=” & S) End Sub,调用函数过程,本章目录,6.1.2函数过程的定义,定义函数过程的形式如下: Public |Private Function 函数过程(形参) As 类型 变量声明 语句块 Return 表达式 或 函数名=表达式 End F

4、unction,本章目录,Public 全局函数过程,可被程序任何模块调用。 Private 仅供本模块中的其它过程调用。 形参(或称哑元) 只能是变量或数组名( ), 仅表示参数的个数、类型,无值。,例6.2 编一求最大公约数的函数过程 分别求若干组数的最大公约数 分析:求最大公约数的算法已在例4.19中解决 (辗转相除法、相减法),本章目录,解决的问题:如何构建函数(函数头,参数设置), 供多次调用,搞清楚: 解该问题已知数据有几个(本例两个), 处理结果几个(本例1个)。,6.1.3函数过程的调用,调用形式:函数过程名(参数列表) 参数列表(称为实参或实元):必须与形参个数相同,位置与类

5、型一一对应。可以是同类型的常量、变量、表达式。,Sub Form1_Click() Handles MyBase.Click Dim x%, y%, z% x = 124: y = 24 z = gcd(x, y) MsgBox(“最大公约数是“ & z) End Sub,程序运行流程,Function gcd( m%, n%) As Integer Dim r% If m 0 m = n: n = r : r = m Mod n Loop gcd = n End Function,本章目录,调用演示,函数过程的调用,例6.3编一函数,统计字符串中汉字的个数。,本章目录,代码说明,分析:在VB

6、.NET中,字符以Unicode码存放,每个汉字和英文是一个字符、占有两个字节,区别是汉字的机内码最高位为1,若利用Asc函数求其码值为小于0(以补码表示),而西文字符的最高位为0,Asc函数求其码值为大于0,6.2 子过程的定义与调用,6.2.1 引例-控件随机移动 例6.4编一过程,对Label1控件进行移动,通过参数Tag的值(1或-1)决定移动方向。 分析: 该过程不是为了计算获得某个结果,而是进行对控件移动的处理。,本章目录,针对函数过程问题的提出: 不是为了获得某个函数值,而是为了某种功能处理。 要获得多个结果。 VB.NET中提供了使用更灵活的子过程。,6.2.2子过程的定义,子

7、过程定义的方法同函数过程,形式如下: Sub 子过程名(参数列表) 局部变量或常数定义 语句 Exit Sub 语句 End Sub 子过程名、形参同函数过程中对应项的规定,当无形参时不要括号。,本章目录,子过程与函数过程的区别,把某功能定义为函数过程还是子过程,没有严格的规定。一般若程序有一个返回值时,函数过程直观;当有多个返回值时,习惯用子过程。 函数过程必须有返回值,函数名有类型。子过程名没有值,过程名没有类型,不能在子过程体内对子过程名赋值。,本章目录,子过程的调用是一句独立的调用语句,有两种形式: Call 子过程名(实参列表) 子过程名 (实参列表),6.2.3子过程调用,本章目录

8、,注意:若实参要获得子过程的返回值,则实参只能是变量(与形参同类型的简单变量、数组名、结构类型),不能是常量、表达式,也不能是控件名。,例6.5 分别编一统计字符串S中定冠词The出现个数的子过程和函数过程,并分别调用。 处理方法:利用InStr函数反复在字符串S找The子串。,本章目录,代码说明,If you cant find the answers you need in the product,i,st,st,第1次,第2次,参数问题,形参是过程与主调程序交互的接口,从主调 程序获得初值,或将计算结果返回给主调程序。不要将过程中所有使用过的变量均作为形参。利6.5找定冠词的rocThe

9、子过程 形参没有具体的值,只代表了参数的个数、位置、类型;只能是简单变量、数组名,不能是常量、数组元素、表达式。,本章目录,6.3 参数传递,在参数传递中,一般是按位置传送,按实参的位置次序与形参的位置次序对应传送,与参数名没有关系。 按位置传送是最常用的参数传递方法,如在调用标准函数时,用户根本不知道形参名,只要关心形参的个数、类型、位置.,本章目录,如Mid函数形式: Mid(字符串$,起始位%,取几位%) 调用: s=Mid(“ This is VB.NET “,9,2) s为“VB“ 若调用:s=Mid(9, “ This is VB.NET “ ,2) 则错误,6.3.1 形参与实参

10、,6.3.2 传址与传值,传值方式参数结合过程 当调用时,系统将实参的值复制给形参,实参与形参断开了联系。在过程体内对形参的任何操作不会影响到实参。 传址方式参数结合过程 当调用时,将实参的地址传递给形参。因此在被调过程体中对形参的任何操作都变成了对相应实参的操作,实参的值就会随过程体内对形参的改变而改变。,本章目录,实参与形参两种结合方法: 传址(ByRef,)、传值(ByVal默认),传值、传址对比例,本章目录,例6.6 编写交换两个数的过程Swap1,其中x,y为形参,使用传值传递方式。,例6.7 编写交换两个数的过程Swap2,其中x,y为形参,使用传址传递方式。,传递方式的选择,被调

11、过程中的结果返回给主调程序,则形参必须是传地址方式;否则选用传值方式, 可增加程序的可靠性和便于调试。 传值参数只接受实参的值,实参为同类型的表达式; 传址方式形参获得的是实参地址,实参必须是同类型的变量名(包括简单变量、数组名、结构类型等),不能是常量、表达式。 实参和形参在不同的过程(一般前者在事件过程,后者为函数过程或子过程),其作用域不同,与是否同名无关。,本章目录,例6.8如下sum子过程求数组a各元素和、并改变数组各元素值: Function sum%(ByVal x() As Integer) Dim i% sum = 0 For i = 0 To UBound(x) sum +

12、= x(i):x(i) = 2 * x(i) Next i End Function,6.3.3 数组参数的传递,本章目录,调用: Dim b() As Integer = 1, 3, 5, 7, 9, i%,s% s = sum( b ),形参是数组 要以数组名加圆括号表示,不要给出维数上界;多维数组,每维以逗号分隔。在过程中通过Ubound函数确定每维的上界。 实参是数组 要给出数组名(不需要圆括号)。 传递过程 系统将实参数组的首地址传给过程的形参,使两者有相同的起始地址。,数组参数的传递规定,形参数组 实参数组,本章目录,6.3.4 变量的作用域,块变量 在控制结构块中声明,只能在本块

13、内 有效. 过程级变量 在一个过程内用Dim或Static语句 声明的变量,只能在本过程中使用 模块级变量 在模块内、任何过程外用Dim、 Private语句声明,可被本模块的任何过程访问 全局变量 在模块级用Public语句声明,可被 应用程序的任何过程或函数访问,本章目录,变量声明位置不同,被访问范围不同,称为变量的作用域。,变量的作用域,例如在下面一个标准模块文件中不同级的变量声明: Public Pa As integer 全局变量 Private Mb As string *10 窗体/模块级变量 Sub F1( ) Dim Fa As integer 过程级变量 End Sub S

14、ub F2( ) Dim Fb As Single 过程级变量 For i=1 to 10 Dim k% 块变量 Next i End Sub,本章目录,6.3.5 静态变量,声明形式:Static 变量名 AS 类型,本章目录,用Static语句声明的过程级变量 程序运行过程中可保留变量的值.,用Dim声明的变量,每次调用过程时重新初始化,例6.10 比较Dim和Static两者的区别。,Sub Form_Click() Dim Count% Count=Count + 1 Label1.Text &=“已单击窗体“ _ & Count &“次“ End Sub,Sub Form_Click

15、() Static Count% Count=Count + 1 Label1.Text &=“已单击窗体“ _ & Count &“次“ End Sub,6.4 综合应用,1 数制转换 例6.11编一函数,实现一个十进制整数转换成二、八、十六任意进制的数字字符串;并用内部函数验证。,本章目录,演示,分析:十进制正整数m转换成r进制数,将m不断除r取余数(若余数超过9,还要进行相应的转换,例如10变成A,11变成B等),直到商为零,以反序得到结果,即最后得到的余数在最高位。,2.加密和解密 信息加密是信息安全性的措施之一。信息加密有各种方法,最简单的加密方法是将每个字母平移一个位置( 称为密钥

16、)。例如,后移5个位置,这时,AF,B G Y D,ZE ,a f ;解密是加密的逆操作。 例6.12 编一加密和解密的程序,即将输入的一行字符串中的所有字母加密,加密后还可再进行解密。,本章目录,代码说明,Welcome stud,W,C,87,IAsc=Asc(C),92,+5,IAsc90 IAsc=IAsc-26,B,如果密钥为5 ,对取得的一个字符”放入变量中, 加密的过程如下:,C=Chr(IAsc),加密思路,过程头如何设置? 思考:解密思路?,C,3.查找 查找是在线性表(在此为数组)中,根据指定的关键值,找出与其值相同的元素。,查找方法: 一般有顺序查找和二分法查找。顺序查找

17、根据查找的关键值与数组的元素逐一比较,若相同,查找成功,若找不到,则查找失败。,例6.13实现顺序查找,4. 字符处理应用,本章目录,代码说明,此题关键是:对输入的字符串与随机产生的字符串,一一对应比较,判断输入正确与否。,例6.14 编写一个英文打字训练的程序,要求: (1) 在标签框内随机产生30个字母的范文; (2) 当焦点进入文本框时开始计时,并显示当时时间; (3) 当输入了30个字符时结束计时,禁止向文本框输入内容,显示打字的速度和正确率。,例6.15编fac(n)=n! 的递归函数 Function fac%(n %) If n = 1 Then fac = 1 Else fac

18、 = n * fac(n - 1) End If End Function,6.5 自主学习,用自身的结构来描述自身就称为递归 最典型的例子是阶乘运算,作如下的定义:,本章目录,递归过程在自身定义的内部调用自己。,6.5.1 递归,由此可见构成递归的结构如下: 递归结束条件及结束时的值; 能用递归形式表示,并且递归向终止条件发展。,fac(2)=2*fac(1),fac(1)=1,fac(4)=4*6,fac(3)=3*2,fac(2)=2*1,fac(3)=3*fac(2),fac(4)=4*fac(3),本章目录,递归执行过程,递推过程:每调用自身,当前参数压栈,直到达到递归结束条件。 回

19、归过程:不断从栈中弹出当前的参数,直到栈空。,递归算法设计简单,但消耗的机时和占据的内存空间比非递归大,6.5.2 二分法,利用计算机二分法算法可解决很多问题: 猜数游戏、二分法查找、二分法求根等 1.电脑猜数,例6.17 利用计算机做猜数游戏。 由用户想好一个1,1000的任意整数Key,计算机提问题“x?”,用户根据两种情况:Keyx、Keyx,分别回答“是”“否”,经过10次提问,计算机能正确猜中用户想好的数,就结束游戏。,分析: 猜数实质就是二分法查找,思路是对一组有序的数据,设置查找区间的下界low、上界high,每次猜数取其中间项: mid =(low + high) 2: 计算机

20、每次猜的数应该取mid值。 若Keymid,则后半部作为继续查找的区域, low=mid; 若Keymid,则前半部作为继续查找的区域, high=mid。 Key=mid 猜对,2.二分法查找 利用猜数的思想,查找有序数组a中值为的Key的数组元素下标,k中返回找到的下标,找不到返回-1)。 Search(ByRef%(),ByVal Key%,ByRef k%),3.二分法求根,高次方程求解,通常通过迭代法求得方程的近似解。常用迭代法有:二分法、牛顿切线法、弦截法等。,二分法求根的思路与二分法查找的思路相似,在二分过程中不断缩小求根的区间。求根方法如下: 取a与b的中点c=(a+b)/2,将求根区间分成两半,判断根在哪个区间。有三种情况: f(c)f(a)0,求根区间在c,b,a=c,转。 f(c)或|b-a|,c为求得的根,结束; 这样不断重复二分过程,将含根区间不断缩小一半,直到达到精度,例6.18 对高次方程 求(-2,0)之间的根,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1