FUNCTION函数定义及调用



《FUNCTION函数定义及调用》由会员分享,可在线阅读,更多相关《FUNCTION函数定义及调用(21页珍藏版)》请在装配图网上搜索。
1、,单击以编辑母版标题样式,,单击以编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,,*,第八章 过程,8.2 Function,函数定义及调用,,8.4,递归过程,8.3,参数的传递,8.1 SUB,过程及其调用,8.5,变量的作用域,8.6,程序示例,8.7,实验,,§,8.4,递归过程,递归的概念,,用自身的结构来描述自身称为“递归”即一个过程调用过程本身,在递归调用中,一个过程执行的某一步要用到它自身的上一步或上几步的结果。例如:最典型的例子是对阶乘运算可作如下定义:,,,n!=n*(n-1)!,,(n-1)!=(n-1) *(n-2)!,,Sub f1(x),,…,,
2、x=f2(xx)*3…,,,End Sub,Sub Command1_Click(),,……,,Call f1(y),,,End Sub,,Function f2(x),,……,,f2=f3(x)+3,,,End Sub,Function f3(x),,……,,,,f3=x*x,,End Sub,Sub f1(x),,…,,Call f1(y),,,End Sub,过程的嵌套调用,Sub Command1_Click(),,……,,Call f1(y),,,End Sub,过程的递归调用,,,,§8.4,递归过程,递归有两种,,•,,直接递归:自己调用自己,,•,,间接递归:,A,调用
3、,B,,,B,调用,A,,递归过程中必须有递归结束语句。,递归子过程和递归函数,,,VB,允许一个子过程或函数在自身定义的内部调用自己,这样的子过程或函数称为,递归子过程,或,递归函数,。许多问题中具有递归的特性,用递归调用描述它们就非常方便。,,注意:递归过程必须有一个结束递归的终止条件,否则会无限制的执行下去。,,,,,§8.4,递归过程,例,7,、 求,fac(n,)=n!,的值,,(,n,已,4,为例),递推,fac(4)=4*fac(3),fac(3)=3*fac(2),fac(2)=2*fac(1),fac(1)=1,fac(2)=2*1,fac(3)=3*2,fac(4)=4*6
4、,回归,,§8.4,递归过程,Public Function,fac(n,As Integer) As Integer,,If n=1 Then,,,,fac,=1,,Else,,,fac,=n*fac(n-1),,End If,,End Function,,Private Sub Command1_Click(),,Print “fac(4)=“; fac(4),,End Sub,递归调用,演示,,§8.4,递归过程,1,、求阶乘。,n!=n*(n-1)!,,2,、,求菲波那契数列前,10,项。,F(1)=1,,,F(2)=1,,,后面各项满 足:,F(n)=F(n-1)+F(n-2),
5、,3,、,,求两个数的最大公约数。,,4,、,逆转输出一个字符串。,,,5,、,汉诺塔游戏。,,相关习题:,,§,8.5,变量的作用域,变量的作用域,过程的作用域,静态变量,同名变量,,,§8.5,,变量的作用域,,应用程序,,(.,vbp,文件,),类,模块,(.,cls,),文件,一个或若干个窗体,,模块,(*.,frm,),文件,用户自定义子过程,(Sub),,用户自定义函数过程,(Function),事件过程,(Sub),,用户自定义子过程,(Sub),,用户自定义函数过程,(Function),一个或若干个标准,,模块,(*.bas),文件,全局级,模块级,过程级,,§8.5.1,变
6、量的作用域,1.,局部变量,,作用域为定义的过程内。指在,过程内,用,Dim,语句声明的变量(或不加声明直接使用的变量),只能在本过程中使用,,别的过程不可访问,。局部变量随过程的调用而分配存储单元,并进行变量的初始化,一旦该过程体结束,变量的内容,自动消失,,占用的存储单元释放。不同的过程中,可有相同名称的变量,,彼此互不相干。使用局部变量有利于程序的调试,,如,Dim b as string,,§8.5.1,变量的作用域,2.,窗体,/,模块级变量,作用域为定义的窗体,/,模块内。指在一个窗体,/,,,模块的任何过程外,即在,“通用声明”,段中用,Dim,语句,,,或用,Private,语
7、句声明的变量,可被本窗体,/,模块的,,,任何过程访问。,,如,Dim c as string,,§8.5.1,变量的作用域,3.,全局变量,作用域为,整个应用程序,内。指在窗体或标准模块的任何过程或函数外,即在“通用声明”段中用,Public,语句声明的变量,可被应用程序的任何过程或函数访问。全局变量的值在整个应用程序中始终不会消失和重新初始化,只有当整个应用程序结束时,才会消失。,4,、例题,如,Dim a as string,,§8.5.1,变量的作用域,,演示,,§8.5.2,过程的作用域,1.,窗体,/,模块级,指在某个窗体或标准模块内定义的过程,,,定义子过程或函数时前加,Priv
8、ate,关键字,,,过程只能被本窗体或本标准模块中的过程调用,,§8.5.2,过程的作用域,2,、全局级,指在窗体或标准模块中定义的过程,,,其默认是全局的,,,也可加,Public,进行说明。全局级过程可供该应用程序的所有窗体和所有标准模块调用,调用方式有如下两种:,,在窗体定义的过程,外部过程调用时,必须加窗体名,,在标准模块定义的过程,外部过程均可调用,但过程名必须唯一,否则要加标准模块名,,§8.5.3,静态变量,,每次调用过程时,用,Static,说明的变量保持原来的值,而用,Dim,说明的变量,每次调用过程时,都重新初始化。,,,形式如下:,,Static,变量名,[As,类型,]
9、,,Static Function,函数名,([,参数列表,])[As,类型,],,Static Sub,过程名,[(,参数列表,)],,,§8.5.3,静态变量,Private Sub Command1_Click(),,Dim k As Integer,,k = 5,,Call,ss(k,),,Print k,:,k = 5,,Call,ss(k,),,Print k,,End Sub,,,Private Sub,ss(ByRef,n As Integer),,Static,sta,As Integer,,,sta,= n +,sta,,:,n = n +,sta,,End Sub,,,运
10、行结果:,,,第一次调用:,,K=10,,,第二次调用:,,K=15,,演 示,,§8.5.4,同名变量,变量的作用域不同时,名字可以相同,但在使用时如果不在本模块内,则必须加上变量所在模块的模块名。,,,同名变量的引用,,,a.,不同模块的全局变量同名:,,在本模块中:直接用变量名引用。,,在外模块中:模块名,.,变量名,,,b.,同一模块的全局变量与局部变量同名:,,在过程内:只能引用局部变量(用变量名)。,,在过程外:只能引用全局变量(用变量名)。,,c.,同一模块的模块级变量与局部变量同名,,在过程内:用变量名引用局部变量,,在过程外:用变量名引用模块级变量。,,§,8.6,程序示例,
11、逆序输出,求,反正弦,最大公约数,直接插入,运动员名次,示例,,实 验,,1,、实验指导书,P,93,实验,11-1,,2,、实验指导书,P,101,实验,11-6,,3,、实验指导书,P,101,实验,11-8,,4,、实验指导书,P,101,实验,11-9,,5,、实验指导书,P,104,实验,12-1,,6,、实验指导书,P,107,实验,12-3,,7,、实验指导书,P,110,实验,12-6,,8,、求方程,ax,2,+bx+c=0,的根,用,3,个函数分别求当,b-4ac,大于,0,、等于,0,和小于,0,时的根,并输出结果,要求从主函数输入,a,、,b,、,c,的值。,,实 验,,综合实验,,,写几个函数:,,,1,)、输入,10,个学生的姓名和学号;,,,2,)、可增加、删除学生;,,,3,)、按学号从小到大排序,姓名顺序也随之调整;,,,4,)、输入一个学号,可显示姓名;,,要求从主函数中输入学号,输出姓名,,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。