第6章-3 过程与函数_第1页
第6章-3 过程与函数_第2页
第6章-3 过程与函数_第3页
第6章-3 过程与函数_第4页
第6章-3 过程与函数_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、主要内容:主要内容:1、子程序、过程文件的创建。、子程序、过程文件的创建。2、子程序、过程文件的调用、参数传递。、子程序、过程文件的调用、参数传递。3、自定义函数的定义。、自定义函数的定义。4、自定义函数的调用。、自定义函数的调用。5、变量的作用域:全局变量、局部变量、本地变量。、变量的作用域:全局变量、局部变量、本地变量。子程序、过程和函数子程序、过程和函数子程序、过程和函数子程序、过程和函数问题提出:问题提出:设计一个程序完成下面计算:设计一个程序完成下面计算:其中,其中,m m、n n为正整数,为正整数,mnmn,该程序如何设计更有效?该程序如何设计更有效?)!*(!nmnmcnm例:编

2、程求例:编程求 *求组合数程序求组合数程序zhs1.prginput 请输入请输入n= to ninput 请输入请输入m= to msn=1sm=1smn=1for i=1 to n sn=sn*iendforfor i=1 to m sm=sm*iendfor)!*(!nmnmcnmfor i=1 to m-n smn=smn*iendfor? n!=,sn? m!=,sm? (m-n)!=,smn?Cmn=,sm/(sn*smn)return将需要重复执行的语句序列或独立的功能子模块定义将需要重复执行的语句序列或独立的功能子模块定义成子程序、过程或用户自定义函数,需要执行时只需调用成子程

3、序、过程或用户自定义函数,需要执行时只需调用它即可。它即可。子程序、过程和函数子程序、过程和函数主程序、子程序、过程、函数的概念:主程序、子程序、过程、函数的概念:l主程序:主程序:指只调用其他程序的程序。指只调用其他程序的程序。l子程序:子程序:具有相对的独立性、能完成某一功能、能被其他具有相对的独立性、能完成某一功能、能被其他程序调用的程序。程序调用的程序。l过程:过程:是指程序文件中的一个子程序模块。是指程序文件中的一个子程序模块。l自定义函数:自定义函数:与过程的区别在于返回语句带有返回值。与过程的区别在于返回语句带有返回值。子程序子程序1. 子程序的创建子程序的创建格式:格式: pa

4、rameters return to master功能:创建子程序文件。功能:创建子程序文件。2. 子程序的调用子程序的调用格式:格式:do with 功能:调用一个指定的子程序,若调用的是有参数的子程序,则要功能:调用一个指定的子程序,若调用的是有参数的子程序,则要用用with子句向被调用的子程序传递参数。子句向被调用的子程序传递参数。 do sub1 主程序主程序 main.prg do sub2 return子程序子程序1 sub1.prg if return endif return to master子程序子程序2 sub2.prg子程序子程序1. 子程序的创建子程序的创建格式:格式

5、: parameters return to master功能:创建子程序文件。功能:创建子程序文件。2. 子程序的调用子程序的调用格式:格式:do with 功能:调用一个指定的子程序,若调用的是有参数的子程序,则要功能:调用一个指定的子程序,若调用的是有参数的子程序,则要 用用with子句向被调用的子程序传递参数。子句向被调用的子程序传递参数。3. 参数传递参数传递 参数传递有两种方式:参数传递有两种方式:值传递值传递和和地址传递地址传递。 如果实参是如果实参是常量常量或或表达式表达式或或括号括起来的变量括号括起来的变量,默认的传递方式,默认的传递方式是是值传递值传递,此时子程序中形参的变

6、化不会影响到调用程序中的实参。,此时子程序中形参的变化不会影响到调用程序中的实参。 如果实参是如果实参是没有用括号括起来的变量没有用括号括起来的变量,默认的传递方式是按,默认的传递方式是按地址地址传递传递,此时形参的值发生改变,实参也随之改变。,此时形参的值发生改变,实参也随之改变。例例1:1:观察下列程序中的两种子程序调用,比较按值传递与按地观察下列程序中的两种子程序调用,比较按值传递与按地址传递的区别。址传递的区别。* *主程序文件主程序文件main1.prgmain1.prg clear a=3.14 do sub1 with a ? a * *子程序文件子程序文件sub1.prgsub

7、1.prg parameters b ? b b=2.72 return输出结果:输出结果:3.142.72a3.14b2.72例例1:1:观察下列程序中的两种子程序调用,比较按值传递与按地观察下列程序中的两种子程序调用,比较按值传递与按地址传递的区别。址传递的区别。* *主程序文件主程序文件main2.prgmain2.prg clear a=3.14 do sub1 with a ? a * *子程序文件子程序文件sub1.prgsub1.prg parameters b ? b b=2.72 return( )a3.14输出结果:输出结果:3.143.14b3.142.72例例2 2:用

8、子程序调用求:用子程序调用求 *主程序主程序zhs2.prginput 请输入请输入n= to ninput 请输入请输入m= to msn=1sm=1smn=1do jc with n,sndo jc with m,smdo jc with m-n,smn ? n!=,sn ? m!=,sm ? (m-n)!=,smn ? Cmn=,sm/(sn*smn) return)!*(!nmnmcnm*子程序文件子程序文件jc.prgparameters t, ss=1for i=1 to t s=s*iendforreturn运行结果:运行结果:请输入请输入n=请输入请输入m=n!= 6m!= 1

9、20(m-n)!= 2Cmn= 10.0000 3 5过程过程过程可以分为内部过程和外部过程。过程可以分为内部过程和外部过程。l内部过程内部过程:过程定义在主调程序文件中,一般将过程定义在程序:过程定义在主调程序文件中,一般将过程定义在程序后面。后面。l外部过程外部过程:过程定义在过程文件(:过程定义在过程文件(prg)中。一个过程文件可以)中。一个过程文件可以包含多个过程,每个过程仍然是独立的,可以单独调用包含多个过程,每个过程仍然是独立的,可以单独调用 。1. 过程的建立过程的建立 格式格式: procedure parameters return to master endproc 功能

10、功能: 将一个语句系列定义为以将一个语句系列定义为以为名的过程。为名的过程。在主程序或过程文件中创建过程在主程序或过程文件中创建过程2. 过程的调用过程的调用(1)内部过程:被调用的过程在主调程序中)内部过程:被调用的过程在主调程序中(后面后面) 。 格式:格式:do with (2)外部过程:被调用的过程在过程文件中。)外部过程:被调用的过程在过程文件中。 先打开过程文件,再调用过程先打开过程文件,再调用过程 格式:格式:set procedure to 功能:该命令打开一个过程文件。功能:该命令打开一个过程文件。 格式:格式:close procedure 或或set procedure

11、to 功能:该命令关闭当前过程文件。功能:该命令关闭当前过程文件。 直接用直接用do命令调用命令调用 do with in 3.参数传递参数传递 过程的参数传递和子程序的参数传递方式相同。过程的参数传递和子程序的参数传递方式相同。例:用主程序调用过程的方式编写程序,求任意边长的正方形的面积、周长。例:用主程序调用过程的方式编写程序,求任意边长的正方形的面积、周长。*主程序和过程在同一程序文件中主程序和过程在同一程序文件中clearinput 请输入正方形的边长请输入正方形的边长: to bmj=0zc=0do zmj with mj,bdo zzc with zc,b?正方形的面积为正方形的面

12、积为:,mj?正方形的周长为:正方形的周长为:,zc*定义求正方形的面积的过程定义求正方形的面积的过程procedure zmjparameters s,xs=x*xreturn*定义求正方形的周长的过程定义求正方形的周长的过程procedure zzcparameters c,xc=4*xreturn例:用主程序调用过程的方式编写程序,求任意边长的正方形的面积、周长。例:用主程序调用过程的方式编写程序,求任意边长的正方形的面积、周长。*主程序和过程不在同一程序文件中主程序和过程不在同一程序文件中*主程序主程序main3.prgclearinput 请输入正方形的边长请输入正方形的边长: to

13、 bmj=0zc=0do zmj with mj,b in proc1do zzc with zc,b in proc1?正方形的面积为正方形的面积为:,mj?正方形的周长为:正方形的周长为:,zc*过程文件过程文件proc1.prg*定义求正方形的面积的过程定义求正方形的面积的过程procedure zmjparameters s,xs=x*xreturn*定义求正方形的周长的过程定义求正方形的周长的过程procedure zzcparameters c,xc=4*xreturn自定义函数自定义函数 1. 自定义函数的定义自定义函数的定义格式:格式:function parameters r

14、eturn endfunc功能:用来定义一个函数,功能:用来定义一个函数, 是自定义函数的名字。是自定义函数的名字。说明:说明:return返回函数的值,如果省略返回函数的值,如果省略“表达式表达式”,则返回,则返回.t. 2. 自定义函数的调用自定义函数的调用格式:格式:()3、参数传递、参数传递在自定义函数中,默认的参数传递方式是值传递方式在自定义函数中,默认的参数传递方式是值传递方式例:编程求例:编程求 clearinput 请输入请输入n= to ninput 请输入请输入m= to msn=1sm=1smn=1sn=jc(n)sm=jc(m)smn=jc(m-n)? n!=,sn?

15、m!=,sm? (m-n)!=,smn?Cmn=,sm/(sn*smn)!*(!nmnmcnmfunction jcparameters ns=1for i=1 to n s=s*iendforreturn s变量的作用域变量的作用域 程序各模块之间的的数据传递可以通过两种方式来解决:程序各模块之间的的数据传递可以通过两种方式来解决:利用参数实现数据传递利用参数实现数据传递利用变量的作用域实现数据传递利用变量的作用域实现数据传递l变量作用域:变量作用域:内存变量的有效作用范围。内存变量的有效作用范围。如果一个变量在某个程序或过程或函数范围内是有效的,则如果一个变量在某个程序或过程或函数范围内是

16、有效的,则该程序或过程或函数为该变量的作用域,在此作用域内可以该程序或过程或函数为该变量的作用域,在此作用域内可以引用该变量。引用该变量。l根据作用域的不同,内存变量可分为根据作用域的不同,内存变量可分为全局变量、私有变量和全局变量、私有变量和局部变量局部变量三种类型。三种类型。变量的作用域变量的作用域 1. 全局变量(公共变量)全局变量(公共变量)全局变量是指声明后,程序中的任何模块都能使用的内存变量。全局变量是指声明后,程序中的任何模块都能使用的内存变量。(1)全局变量的定义全局变量的定义1)在命令窗口创建的变量和数组将自动成为全局变量。在命令窗口创建的变量和数组将自动成为全局变量。2)用

17、用public语句定义:语句定义:格式格式:public 内存变量名表内存变量名表/数组名表数组名表功能:定义全局内存变量或数组。功能:定义全局内存变量或数组。(2)说明说明程序结束时,全局变量不会自动释放,需要用程序结束时,全局变量不会自动释放,需要用clear all或或clear memory或或release等命令释放。等命令释放。变量的作用域变量的作用域2. 私有变量私有变量 只局限在定义它的程序模块以及下级模块(该模块所调用的模块)只局限在定义它的程序模块以及下级模块(该模块所调用的模块)中有效。当定义它的模块运行结束,它被自动释放。中有效。当定义它的模块运行结束,它被自动释放。(

18、1)局部变量的定义局部变量的定义在一个程序或过程中建立的内存变量,如果未加任何说明,在一个程序或过程中建立的内存变量,如果未加任何说明, 自动自动成为私有变量。成为私有变量。格式格式:private 内存变量名表内存变量名表/数组名表数组名表(2)说明:说明: 定义私有内存变量和数组,可以屏蔽来自上级模块中与当前局部定义私有内存变量和数组,可以屏蔽来自上级模块中与当前局部变量同名的变量,使在当前模块中对局部变量的操作,不影响上级模变量同名的变量,使在当前模块中对局部变量的操作,不影响上级模块中同名变量的值。块中同名变量的值。 即如果本模块的私有变量和上层模块中的变量重名即如果本模块的私有变量和

19、上层模块中的变量重名,则本模块的变则本模块的变量优先量优先,上层模块中的变量被屏蔽上层模块中的变量被屏蔽,直到本模块运行结束直到本模块运行结束,上层变量恢复上层变量恢复使用。使用。变量的作用域变量的作用域3.局部变量局部变量 只局限在定义它的程序模块中有效,一旦定义它的程序模只局限在定义它的程序模块中有效,一旦定义它的程序模块运行结束,它便自动被清除。块运行结束,它便自动被清除。(1)局部变量的定义局部变量的定义格式格式:local 内存变量名表内存变量名表/数组名表数组名表功能功能: 定义局部内存变量和数组,并屏蔽所有与它同名的变定义局部内存变量和数组,并屏蔽所有与它同名的变量,使在当前模块

20、中对局部变量的操作,不影响其它模块中量,使在当前模块中对局部变量的操作,不影响其它模块中同名变量的值。同名变量的值。说明:和前两种的不同在于,局部变量说明:和前两种的不同在于,局部变量只能在本程序模块中只能在本程序模块中使用使用,因此它不能负责在各个模块之间传递数据。,因此它不能负责在各个模块之间传递数据。全局变量、局部变量和私有变量的比较 全局变量全局变量(public) 私有变量私有变量(private)局部变量局部变量(local)作用作用域域整个系统的所有整个系统的所有程序。程序。当前程序模块当前程序模块变量变量寿命寿命即使所有程序运行即使所有程序运行结束,内存中也仍结束,内存中也仍然

21、保存该变量。然保存该变量。当前程序模块运行结束后,该变量被当前程序模块运行结束后,该变量被自动清除。自动清除。数据数据传递传递作用作用任意一对调用程任意一对调用程序与被调过程间序与被调过程间双向传递。双向传递。从调用程序到被从调用程序到被调过程双向传递。调过程双向传递。无无当前程序模块及当前程序模块及其下属程序模块。其下属程序模块。例例1:用变量作用域编写程序,求任意边长的正方形的面积、周长,:用变量作用域编写程序,求任意边长的正方形的面积、周长,面积和周长用过程实现。面积和周长用过程实现。*主程序和过程在同一程序文件中主程序和过程在同一程序文件中clearinput 请输入正方形的边长请输入

22、正方形的边长: to bmj=0zc=0do zmj with mj,bdo zzc with zc,b?正方形的面积为正方形的面积为:,mj?正方形的周长为:正方形的周长为:,zcreturn*定义求正方形的面积的过程定义求正方形的面积的过程procedure zmjparameters s,xs=x*xreturn*定义求正方形的周长的过程定义求正方形的周长的过程procedure zzcparameters c,xc=4*xreturn例例1:用变量作用域编写程序,求任意边长的正方形的面积、周长,:用变量作用域编写程序,求任意边长的正方形的面积、周长,面积和周长用过程实现。面积和周长用过

23、程实现。*主程序和过程在同一程序文件中主程序和过程在同一程序文件中clearpublic xinput 请输入正方形的边长请输入正方形的边长: to xmj=0zc=0do zmj with mjdo zzc?正方形的面积为正方形的面积为:,mj?正方形的周长为:正方形的周长为:,zcreturn*定义求正方形的面积的过程定义求正方形的面积的过程procedure zmjparameters ss=x*xreturn*定义求正方形的周长的过程定义求正方形的周长的过程procedure zzczc=4*xreturn例例1:用变量作用域编写程序,求任意边长的正方形的面积、周长,:用变量作用域编写

24、程序,求任意边长的正方形的面积、周长,面积和周长用过程实现。面积和周长用过程实现。*主程序和过程在同一程序文件中主程序和过程在同一程序文件中clearpublic xinput 请输入正方形的边长请输入正方形的边长: to xmj=0zc=0do zmj with mjdo zzc?正方形的面积为正方形的面积为:,mj?正方形的周长为:正方形的周长为:,zcreturn*定义求正方形的面积的过程定义求正方形的面积的过程procedure zmjparameters ss=x*xreturn*定义求正方形的周长的过程定义求正方形的周长的过程procedure zzcprivate zczc=4*

25、xreturn例例1:用变量作用域编写程序,求任意边长的正方形的面积、周长,:用变量作用域编写程序,求任意边长的正方形的面积、周长,面积和周长用过程实现。面积和周长用过程实现。*主程序和过程在同一程序文件中主程序和过程在同一程序文件中clearpublic xlocal zcinput 请输入正方形的边长请输入正方形的边长: to xmj=0zc=0do zmj with mjdo zzc?正方形的面积为正方形的面积为:,mj?正方形的周长为:正方形的周长为:,zcreturn*定义求正方形的面积的过程定义求正方形的面积的过程procedure zmjparameters ss=x*xreturn*定义求正方形的周长的过程定义求正方形的周长的过程procedure zzczc=4*xreturn有如下程序,程序执行后,有如下程序,程序执行后,b的值为的值为_。 b=5STORE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论