欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    VB程序设计 第八章.ppt

    • 资源ID:5451924       资源大小:523KB        全文页数:39页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    VB程序设计 第八章.ppt

    Visual Basic程序设计教程,内蒙古科技大学实践训练中心,第八章 过程,8.1 过程的定义与调用,VB的过程:系统提供的内部函数过程,其中,事件是构成VB应用程序的主体,应 用设计基本上是对事件过程进行设计;用户根据应用的需要而设计的过程;VB的过程分类:以”Sub”保留字开始的子过程;以“Function”保留字开始的函数过程;以“Property”保留字开始的属性过程;以“Event”保留字开始的事件过程;,8.1 过程的定义与调用,8.1.1 Sub过程的定义与调用 用户自定义子过程通常来完成一个特定的功能,其名字可由用户根据自己的习惯而定义。VB的事件过程只在用户触发该事件后启动,而用户自定义的子过程只有在被其他过程调用时才启动。1、用户自定义子过程的一般格式 Static Private|Public Sub 子过程名(参数列表)语句块 Exit Sub 语句块 End Sub 说明:格式中“Sub 子过程名”和”End Sub“不可缺;子过程名的命名规则与 变量命名规则相同;,8.1 过程的定义与调用,8.1.1 Sub过程的定义与调用 Static:在过程名之前使用Static,表示过程中的局部变量都是静态变 量。当程序退出该程序时,局部变量的值仍然保留作为下次调用的初 值。Static对数组变量也有效,但对动态变量则无法转换为静态变量;Private:表示该过程为私有过程,只有本模块中的其他过程访问,不能 被其他模块中的模块访问;Public:表示该过程为公有过程,即可以被程序中所有模块调用。本窗 体和其他模块均可调用,但过程名必须是唯一的,否则在过程名前加上 该过程所在的窗体名或模块名。参数列表:其他过程与本过程进行参数传递和交换的形式参数,当参数 个数大于等于2时,参数之间用”,”隔开;Exit Sub:在过程任意位置终止过程的运行而退出过程而使用的语句;End Sub:过程结束标识,用来正常终止过程;,8.1 过程的定义与调用,8.1.1 Sub过程的定义与调用 过程参数的传递默认方式为引用(地址)传递(ByRef),若只传参数(实参)的值则必须将形式参数说明为Byval,格式如下:Byval 变量名或数组名()As 数据类型 过程内部不能再定义其他过程,可以调用其他合法的过程,事件过程中 也不允许定义子过程。,sub command_click()call test()end sub,static sub test()dim a(2)as integer a(0)=a)(0)+1 a(1)=a(1)+1 print a(0);a(1)end sub,8.1 过程的定义与调用,8.1.1 Sub过程的定义与调用 定义过程的方式:手工方式:在过程、事件代码窗口中,编写事件程序:sub 过程名(参数列表)End Sub 系统方式 进入模块代码窗口:系统菜单”工程“”添加”“新建”,则新建一 个模块,在标准模块中填写子过程代码;系统菜单”工具“”添加过程“,确定子过程的名称以及类型后,即回 到模块的代码窗口;,8.1 过程的定义与调用,8.1.1 Sub过程的定义与调用 2、子过程调用 Call 过程名(实参列表);如:call text(12,”abc”)过程名实参列表;如:test 12,”abc”例8-1求n!解题思路:在标准模块中定义一个子过程n,用于实现求任意正整数的阶乘。,8.1 过程的定义与调用,8.1.1 Sub过程的定义与调用 2、子过程调用 Call 过程名(实参列表);如:call text(12,”abc”)过程名实参列表;如:test 12,”abc”例8-2给出矩形的长和宽,求矩形的面积。解题思路:定义一个过程area,计算矩形的面积。,8.1 过程的定义与调用,8.1.2 Function过程的定义与调用 函数过程(Function)与子过程一样,可将一组完成特定功能的程序代码组织起来,作为一个相对独立的过程使用;但子过程没有值的返回,函数过程有值的返回。1、函数过程的定义 Static Public Private Function 函数过程名(参数列表)As 类型 语句块 Exit Function 语句块给函数名赋返回值End Funtion,8.1 过程的定义与调用,8.1.2 Function过程的定义与调用 说明:格式中的Static、Public、Private的含义与作用以及参数列表的格式 和使用方法,Byval传值的作用等均与子过程的定义相同;Exit Function的作用与Exit Sub相同;As类型,指定该函数的返回值的类型;语句块为符合VB语法的一条语句或多条语句;给函数名赋值:一般情况下,定义一个函数过程,就是能返回一个值 给调用程序,故函数过程应有一条语句给函数名赋值即调用后的返回 值;若不赋值,则默认返回值为0(数值型函数),或空值(可变类 型函数)。与Sub定义一样,函数过程定义的函数体内不允许定义其他的函数过 程和子过程。,8.1 过程的定义与调用,8.1.2 Function过程的定义与调用 2、函数过程的定义方法 在代码窗口中手工输入函数过程的框架;如:Static Private Function Areturn(a as integer,b as integer)as Integer End Function 系统菜单“工具”“添加过程”,选择相应的类型和范围属性;3、函数过程的调用 函数过程的调用如同调用VB的系统内部函数一样;程序中。函数过程的 调用一般放在表达式中赋值号”“的右边,将它看成某种类型的值而参加 表达式的组成。,8.1 过程的定义与调用,8.1.2 Function过程的定义与调用3、函数过程的调用 例8-3函数过程的定义与调用:判断某个成绩(百分制)的等级.解题思路:定义一个函数过程,用于判断分数的等级,判断后的结果返回为 字符串:优、良、中、及格或不及格。,8.1 过程的定义与调用,8.1.2 Function过程的定义与调用 例8-4 编写求任意给定两个自然数的最大公约数的程序。解题思路:对于已知两个数m、n,使得mn;m除以n得余数 r;若r0,则n为所求的最大公约数,算法结束,否则执行(1);nm,rn,再重复步骤(2);,8.2 函数和过程的参数传递,参数传递:在调用过程时,过程参数使用的是实际参数,它要与定义过程时的形式参数一一对应,并以适当的形式将实参传给行参,供过程使用。参数传递的方式:传值;传址;8.2.1 传值 形参:指在定义过程时出现在参数列表中的变量名,这些变量名的使用只 能在过程内部。实参:是在调用该过程时调用过程中已组织好的准备传给形参的常量、变 量、表达式或数组控件对象等,它是在调用过程(主程序或父过程)中 组织好的数据,实参若是常量,则传递就相当于将该常量的值赋给 形参。实参若为一个简单变量的表达式,也是与常量一样将该表达 式的值赋给对应的形式参数。传递参数时,形参和实参的个数一定相同,传递时要一一对应;参数之间要用“,”隔开;每个实参的类型必须与相对应的行参类型相同;,8.2 函数和过程的参数传递,8.2.1 传值 Sub tempSub(a as integer,b as single,c as string)End Sub可采用调用方式:call tempsub(a%,b!,”comm”),过程定义中默认的参数传递是地址传递,但在定义过程中,若某个参数用Byval来说明。则该参数便是传值。传值的一个特点是将实参的值复制一份给形式参数所代表的临时内存单元,此后实参与形参之间再无任何联系,形式参数的任何变化均不会对实参产生任何影响。,8.2 函数和过程的参数传递,8.2.1 传值 例【8-5】传值调用 Private sub command1_click()dim x as integer,y as integer x=10:y=20 print“x=“;x;”y=“;y;call temp(x,y)print“x=“;x;”y=“;y;End Sub Sub temp(Byval x as integer,Byval y as integer)x=x+100:y=x*60 print“x=“;x,”y=“,y;End Sub 运行结果:x=10 y=20 调用前的实参 x=110 y=6600 temp中的行参 x=10 y=20 调用后的实参,8.2 函数和过程的参数传递,8.2.1 传值 例8-6求幂级数 解题思路:定义temp函数用于计算x的幂,需要用到2个参数,x和y,x用于传递某个数,y用于传递幂的次方数。y是传值参数,因此,函数中y值的改变不会影响它相应的实际参数。,8.2 函数和过程的参数传递,8.2.2 传址 在过程调用过程中,参数传递的默认方式是按地址传递,故不加任何关键字就是传址调用。传址的特点是形参与对应实参用相同的内存地址,形参的改变将影响实参的改变,实际上,形参也是实参的别名。通常情况下,形式参数为传值形式,则形式参数可认为是一个局部变量;但若为传址方式,则由形参与实参连系起来,使形参为非局部变量,因为形参的改变结果直接传给了实参。例【8-7】对于例8-5中的过程temp将其定义为:sub temp(x as integer,y as integer)End Sub 则Call temp(x,y)变为了传址调用,故形参的改变会引起实参x、y的值改变。,8.2 函数和过程的参数传递,8.2.2 传址 例8-8传值与传址两种方式下,形参与实参的改变。,8.2 函数和过程的参数传递,8.2.3 数组及对象作为过程的参数 1、数组作为参数 用数组名作为形参或实参;用数组元素作为实参进行传递;注意:第中方法相当于传址方式,即将数组的起始地址传给形参,但在使 用时应注意以下几点:用数组名进行地址传递时,在参数列表中说明数组,不需要说明其维 数的定义,但圆括号不可省略;在过程定义体内如需要知道参数的上、下界,可用UBound和 LBound 确定参数组的上、下界;形参数组和实参数组的类型必须一致;例8-9求一个nn方阵所有元素之和;,8.2 函数和过程的参数传递,8.2.3 数组及对象作为过程的参数 1、数组作为参数 例8-9求一个nn方阵所有元素之和;解题思路:利用随机函数产生一个6阶方阵a,并保存在二维数组中,将此数组作为参数传给函数suma,在函数suma中计算方阵的元素之和;在函数过程内部使用Ubound(a,1)确定数组a的第一维上界。,8.2 函数和过程的参数传递,8.2.3 数组及对象作为过程的参数 2、对象参数 对于过程中的参数,可以用对象参数进行传递,如窗体、控件等。经 过传递后,可以使用对象的有关属性以及方法。在使用控件作为参数时,必须考虑到作为实参的控件是否具有通过过 程中所列的控件的属性,因此必须先判断控件是哪一类控件。判断格式为:If/Elseif Typeof 控件名称 is 控件类型 其中:控件类型指各种不同的控件的关键字,如文本框的关键字为 TextBox等。If typeof Testctr is textbox then testctr.text=“Ms”End if,8.3 变量、过程的作用域,在VB程序中我们定义的变量、过程、函数均有其作用范围,在VB系统内,该范围称为其作用域。作用域分为三个层次:过程、模块(文件)、全局(工程);过程的作用域最小,仅局限于过程内部(针对局部变量);模块(文件)次之,仅在某个模块或文件内;全局(工程)范围最大,在整个应用工程范围内。8.3.1 过程的作用域 过程的作用域:模块级(文件级)和全局级;一个工程应用程序一般由三类模块构成:窗体模块(*.frm):通常有:事件过程、自定义子过程和自定义函数过程 标准模块文件(*.bas):由若干个VB子过程和函数组成,通常为应用程序 提供可调用的标准程序单元;类模块文件(*.cls):包括自定义的类、为相应类设计的属性过程、自定 义方法过程、自定义事件过程等;,8.3 变量、过程的作用域,8.3.1 过程的作用域,应用程序(.vbp文件),至少一个或多个窗体模块(*.frm)文件,事件过程(sub)、自定义过程(Sub)自定义函数(Function),一个或多个标准模块(.bas)文件,自定义过程(Sub)自定义函数(Function),一个或多个类模块(.cls)文件,自定义属性过程(Property)自定义方法过程(Sub 或Function)自定义事件过程(Event),8.3 变量、过程的作用域,8.3.1 过程的作用域 1、模块级(文件级)过程 指只能在本文件或模块中被调用,此类过程(或函数)定义时在Sub或 Function前加“Private”关键字;2、全局级过程 指能在整个应用程序中被调用的过程,此类过程与模块级过程的定义过 程完全相同,只是在定义前不加关键字“Private”,或加关键字“Public”。调用方式通常为:标准模块名(或窗体名).子过程或函数名(参数)。,8.3 变量、过程的作用域,8.3.1 过程的作用域,8.3 变量、过程的作用域,8.3.2 变量的作用域 变量的作用域分为三级:局部(过程)级、模块级(文件)、全局(工程)级;1、局部变量(过程级):指在过程内部定义、只能在过程内使用的变量,别的过程不能使用;定义方式:Dim、Static;局部变量随过程的调用而产生,也随着过程调用的结束而结束(Dim声 明的变量将被释放内存,而用Static声明的变量,变量没有被释放,但已 变得不可访问,下次发问时,其值仍存在);2、窗体模块级变量:指在窗体(模块)文件内,但在所有过程之外定义的 变量,即在窗体文件中的“通用声明”段里用Dim或Private语句声明的变 量,该变量可被窗体文件中的任何过程访问,但不能被其他模块文件中 的过程访问。此类变量随窗体的产生而产生,也随着窗体的结束而结束。3、全局变量(工程级变量):指窗体或任一模块中定义,但不在任一过程 内定义的变量,此类变量的声明必须用Public语句完成,次变量在整个 工程文件中存在,在工程应用结束时才会被释放。,8.3 变量、过程的作用域,8.3.2 变量的作用域,8.3 变量、过程的作用域,文件1(*.Bas)(模块文件 Module1.Bas)public a as integer private b as integer 模块级变量 sub f1()dim c as integer 局部变量 print form1.c;c;b end sub,文件2(*.frm)(窗体模块:Form1.frm)public c as single 全局变量 public a as integer 全局变量 sub command1_click()dim c as integer 局部变量 print module1.a;c;form1.c;a end sub,注释:上面Form1.frm文件print语句中,“Module1.a”是指“Module1.Bas”文件中定义的全局变量a;”Form1.c“是指Form1.frm中定义的全局变量c;”c“是指command1_click中定义的局部变量c;“a”是指在Form1.frm中定义的全局变量a;,8.3 变量、过程的作用域,说明:在同一模块不同过程中定义的变量可以同名;在同一模块不同级别中定义的变量可以同名;在不同模块中定义的全局变量可以同名;在过程中直接引用的变量总是同名变量中作用域最小的那个变量;在其他模块(定义全局变量所在模块)中引用全局变量时,必须在该变 量前加上模块名;,8.3 变量、过程的作用域,8.3.3 静态变量 局部变量除了用Dim语句声明外,还可以用Static语句将变量声明为静态变量,它在程序运行中保留变量的值。即每次调用过程,用Static说明的变量保持原来的值;而用Dim说明的变量,每次调用过程时,重新初始化。形式:Static 变量名 As 类型 Static Function 函数名(参数列表)As 类型 Static Sub 过程名(参数列表)若函数名、过程名前加”Static“,表示该函数、过程内的局部变量都是静态 变量。,8.3 变量、过程的作用域,8.3.3 静态变量例8-10 一个窗体单击事件过程(Form_click()和一个求和函数(sum()组成的应用程序,在Form_click()过程中5次调用函数sum(),Dim i As Integer,isum As Integer For i=1 To 5 isum=sum(i)Print isum=;isum;NextPrivate Function sum(n As Integer)Static j As Integer Dim j As Integer j=j+n sum=jEnd Function,8.4 递归,递归是指一个自己调用自己的过程。VB允许定义一个自定义过程或函数在过程内部自己调用自己,这样的子过程或函数叫做递归子过程或递归函数。例8-11 求n!的函数。解题思路:递归就是一个自己不断调用自己的过程,直到达到递归结束条件,而后逐级返回到上一次调用过程。每一次调用自己,先把形参、局部变量、调用结束时的返回地址压栈,直到递归结束,这个过程叫做递归过程;然后一级一级从堆栈弹出参数,直到栈空,这个过程叫做回归。定义阶乘运算如下:n!=n(n1)!(n1)!=(n1)(n2)!若用fn(n)表示n!,则由有:,8.4 递归,求n!的函数定义如下:public function fn(n as integer)as integer if n=1 then fn=1 else fn=n*fn(n-1)endif end function 假设n3,则上诉函数的步骤如下:fn(3)=3*fn(2),n3时调用fn(2);fn(2)=2*fn(1),n2时调用fn(1);fn(1)=1,n1时求得fn(1)的值;fn(2)=2*1,返回fn(2)的值;fn(3)=3*fn(2)=3*2,返回fn(3)的值;设计一个递归过程或函数应具备的条件:具备递归条件及递归的条件;递归调用递归结束的条件发展;,8.4 递归,例8-12在一个三角形中,取三边的中点构成一个三角形,然后在所画的三角形的边与相邻的三角形的角构成的三角形内又画一个三角形,如此循环下去直到满足给定层次为止。,解题思路:本题中的递归子过程为triangle(x1,x2,x3,y1,y2,k),k的初值为三角形的层次,递归结束条件为k1,在递归子过程中,每调用一次,k的值就减1。,(x1,y1),(x2,y2),(x3,y1),(u1,v1),(x2,y1),(u2,v1),8.5 常用算法与数据结构三,8.5.1 素数问题 求素数的方法:对于一个自然数N,用大于1小于N的各个自然数都去除N,若都除不尽,则N为素数;否则为合数。例8-13 编写程序,求500,1999十位数字为7的素数的个数 解题思路:定义一个函数isprime(k as integer)来判断一个数是否素数,再判断这个数的十位数是否为7。,8.5 常用算法与数据结构三,8.5.2 加密和解密 例8-14 编写一个加密和解密程序,将输入的一行字符串中的所有字母加密 解题思路:加密方法为将每一个字母加一序数,例如,加序数3,这时”A“变换为”D“,”B“变换为”E“,“a”变换为“d”,“Y”变换为“B”,“Z”变换为”C“。在本题中,用字母的ASCII码值加序数3进行加密,若大写的字母加密后超过Z或小写字母超过z,则将字母的ASCII码值26。,8.5 常用算法与数据结构三,8.5.3 数据检索 数据检索 就是从一组数据中找出具有某种特征的数据项。最常用的一种检索方式是顺序检索,是指对所存储的数据从第一项开始,依次与所要检索的数据进行比较,直到找到该数据,或将全部元素都找完还没有找到该数据为止。例8-15 在线性表(数组)中根据给定的关键值,找出与其值相同的元素 解题思路:本题采用顺序查找,即根据关键值与数组中的元素逐一比较,若相同,查找成功,若找不到,则查找成功。,8.5 常用算法与数据结构三,8.5.3 数据检索 例8-16 采用二分法在线性表(数组)中查找元素,5 11 23 27 29 32 38 43 58 77 89,low,high,mid,初始:,

    注意事项

    本文(VB程序设计 第八章.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开