1、计算机教研室计算机教研室数据库应用数据库应用(VFP6.0)JCompany Logo第二节第二节 子程序与参数传递子程序与参数传递v什么叫子程序、过程和函数什么叫子程序、过程和函数?v为什么需要建立?为什么需要建立?v如何建立?如何建立?v参数是怎么样传递?参数是怎么样传递?利用参数的内存变量属性利用参数的内存变量属性在子程序、过程和函数之间传递在子程序、过程和函数之间传递为什么建立子程序、过程、函数?为什么建立子程序、过程、函数?v求M!+N!JCompany Logo&求m!+n!S1=1FOR I=1 TO M S1=S1*IENDFORS2=1FOR J=1 TO N S2=S2*J
2、ENDFOR?S1+S2太多重复代码!太多重复代码!&求m!+n!S1=F(M)S2=F(N)?S1+S2S=1FOR I=1 TO X S=S*IENDFOR子程序、过程、函数!子程序、过程、函数!主要内容主要内容v子程序定义调用与返回v过程定义建立、调用v函数定义建立、调用v参数传递及作用域子程序的基本概念子程序的基本概念v定义子程序是相对于主程序而言的一个独立的程序文件,其建立方法与建立程序文件的方法相同,扩展名为.PRG。v调用与返回 调用:DO WITH 返回:RETURN TO MASTERNotice:子程序执行时直到遇到以下情况时,自动结束返回:RETURN、RETRY、CAN
3、CEL、QUIT和子程序的末尾JCompany Logo主、子程序的调用关系主、子程序的调用关系递接调用关系递接调用关系跨接调用关系跨接调用关系JCompany Logo*P1.PRGDO P2RETURN*P2.PRGDO P3RETURN*P3.PRGRETURN*P1.PRGDO P2RETURN*P2.PRGDO P3RETURN*P3.PRGRETURNDEMO-书书P163-图图4.16-4.17Return to master4.2.1子程序子程序v例题:例题:例例1:求三个数中的最大数。:求三个数中的最大数。(子程序例题子程序例题1.PRG)分析:本题由主程序分析:本题由主程序
4、子程序例题子程序例题1.PRG 与子程序与子程序SUB1.PRG 组成。组成。(1)子程序)子程序SUB1.PRG X 功能:求两个数中较大者。功能:求两个数中较大者。X 入口条件:变量入口条件:变量N1与与N2中存放待比较的两个数。中存放待比较的两个数。X 出口状态:变量出口状态:变量R中存放比较结果(较大者)。中存放比较结果(较大者)。(2)主程序)主程序(子程序例题子程序例题1.PRG)从键盘输入任意三个数从键盘输入任意三个数X1、X2、X3;调用调用SUB1.PRG 求出求出X1、X2中较大者,第二次再调用中较大者,第二次再调用SUB1.PRG 将此将此结果与结果与X3比较,即取得最大
5、数。比较,即取得最大数。4.2.1子程序子程序主程序代码:主程序代码:*求三个数中的最大数求三个数中的最大数SET TALK OFFINPUT 请输入第一个数请输入第一个数:TO X1INPUT 请输入第二个数请输入第二个数:TO X2INPUT 请输入第三个数请输入第三个数:TO X3N1=X1N2=X2R=0DO SUB1N1=RN2=X3DO SUB1?最大数为最大数为:,RSET TALK ON子程序子程序SUB1.PRG:*求两个数中的最大数求两个数中的最大数IF N1N2R=N1ELSER=N2ENDIFRETURN这里使用了自然属性变量实现,这里使用了自然属性变量实现,因此变量因
6、此变量N1、N2、R必须在主程必须在主程序里定义并置初始值。序里定义并置初始值。4.2.1子程序子程序例例2:求:求3200间的素数。间的素数。(子程序例题子程序例题2.PRG)分析:分析:此题通过主子程序来实现,主程序通过循环逐一取此题通过主子程序来实现,主程序通过循环逐一取3200间的奇数存入变量间的奇数存入变量M,然后调用子程序然后调用子程序SUB2.PRG,子程序子程序则判定主程序传送来的则判定主程序传送来的M值是否为素数,若是则将该素数显值是否为素数,若是则将该素数显示出来,否则直接返回主程序。示出来,否则直接返回主程序。4.2.1子程序子程序主程序代码:主程序代码:*求求3200间
7、的素数间的素数SET TALK OFFCLEARM=3DO WHILE M200I=2DO SUB2M=M+2ENDDOSET TALK ON子程序子程序SUB2.PRG:*判判M是否素数是否素数DO WHILE I=M-1IF INT(M/I)=M/IRETURNENDIFI=I+1ENDDO?MRETURN这里使用了使用自然属性变量这里使用了使用自然属性变量实现,因此实现,因此I必须在主程序里定必须在主程序里定义并置初始值。义并置初始值。过程过程-定义定义v1.过程与过程文件的定义v过程是一个由PROCEDURE开头,ENDPROC结尾的子程序段。过程可以将实现相对独立功能的常用代码集中在
8、一起,供应用程序在需要时调用。v过程文件:是由若干个过程构成的文件。PROCEDURE ENDPROCv 注意:v(1)过程必须存放在一个过程文件中。v(2)不能把可执行的主程序代码放在过程之后。子程序存在的问题:子程序存在的问题:系统打开的文件个数太多;系统打开的文件个数太多;调用子程序读磁盘的查找速度慢。调用子程序读磁盘的查找速度慢。过程的建立与调用过程的建立与调用v二、过程文件的建立过程文件建立方法有两种:与程序文件的创建方法相同,将过程文件的内容一行一行地输入。通过将分散的子程序加入项目管理器,再利用工具自动连编生成扩展名为APP或EXE的文件。v三、过程文件的调用打开打开:SET P
9、ROCEDURE TO 关闭关闭:SET PROCEDURE TO 或 CLOSE PROCEDURE调用调用:DO WITH 注意:调用过程文件之前必须要打开过程文件。调用结束后要关闭。DEMOvP164例题4.20set talk offclea?同学们!do p2?晚上好!set talk onproc p2?早上好!do p3?下午好!endprocproc p3?中午好!endprocJCompany Logo参数传递与作用域参数传递与作用域内存变量作用域内存变量作用域参数传递参数传递DO WITH 主程序与子程序之间或过程与过程之间通过互相传递参数来主程序与子程序之间或过程与过程之
10、间通过互相传递参数来完成整体上的操作(两种方式)完成整体上的操作(两种方式)1利用内存变量的作用域属性利用内存变量的作用域属性2利用利用DOWITH1.利用内存变量属性传递参数利用内存变量属性传递参数v利用内存变量属性传递参数利用内存变量属性传递参数内存变量内存变量自然属性自然属性私有属性私有属性本地属性本地属性公用属性公用属性定义格式定义格式作用范围作用范围传递方向传递方向变量寿命变量寿命自然属性自然属性 v含义是指在程序(.PRG)中出现的没有特别声明而只是通过赋值或数组定义的变量。v特点定义格式:STORE/=、DIMENSION、DECLARE、INPUT、SUM等。作用范围:该程序及
11、其调用的下属子程序。传递方向:单向。变量寿命:所在程序运行结束后,该变量被自动删除。自然属性自然属性P165例题例题T4.21自然属性变量变化说明自然属性变量变化说明自然属性变量的特点自然属性变量的特点在一个程序段里不能显示(使用在一个程序段里不能显示(使用LIST命令)在子程序里命令)在子程序里定义的自然属性的变量,也就是说,在子程序里定义的定义的自然属性的变量,也就是说,在子程序里定义的自然属性变量对父程序是不可见的。(这是因为自然属自然属性变量对父程序是不可见的。(这是因为自然属性变量当所在的程序运行完毕后,被自动删除了)性变量当所在的程序运行完毕后,被自动删除了)在子程序里可以修改父程
12、序里定义的自然属性变量的类在子程序里可以修改父程序里定义的自然属性变量的类型和数值。型和数值。公用属性公用属性 v含义是指能在所有的程序中使用,并通过这种方式共享的内存变量。公用属性的内存变量必须先特别声明和定义后方能使用。v公用属性的内存变量特点定义格式:PUBLIC作用范围:整个系统的所有程序。传递方向:双向(主程序主程序子程序子程序)变量寿命:程序运行结束后,内存中仍然保存该变量。公有属性公有属性Public P167例题例题T4.22公有属性公有属性Public变量变化变量变化DEMO从程序的运行结果理解公用属性变量的特点:从程序的运行结果理解公用属性变量的特点:在在一个程序段里可以显
13、示(使用在在一个程序段里可以显示(使用LIST命令)在命令)在子程序里定义的公用属性的变量,也就是说,在子程序里定义的公用属性的变量,也就是说,在子程序里定义的公用属性变量对父程序是可见的。子程序里定义的公用属性变量对父程序是可见的。在子程序里可以修改父程序里定义的公用属性变在子程序里可以修改父程序里定义的公用属性变量的类型和数值,在父程序里也可以修改子程序量的类型和数值,在父程序里也可以修改子程序里定义的公用属性变量的类型和数值。里定义的公用属性变量的类型和数值。私有属性私有属性 Privatev私有属性的内存变量含义:是指具有既类似自然属性又能屏蔽上级同名内存变量属性的内存变量。私有属性的
14、内存变量也必须先特别声明后方能使用。v私有属性的内存变量特点定义格式:PRIVATE/ALLLIKE/EXCEPT作用范围:该程序及其调用的下属子程序。类似自然属性传递方向:单向(主程序子程序)。类似自然属性变量寿命:程序运行结束后,该变量被自动删除。特殊作用:可屏蔽(隐藏)上级(主)程序中与当前程序同名的变量,即对当前程序中变量的操作,不影响上级(主)程序中与当前程序同名的变量值。私有属性私有属性Private P169例题例题T4.23私有属性私有属性Private变量变化变量变化DEMO本地属性本地属性Localv本地属性的内存变量含义:是指具有既类似私有属性又不影响下属子程序中同名内存
15、变量属性的内存变量。本地属性的内存变量必须先特别定义后方能使用。v本地属性的内存变量特点定义格式:LOCAL作用范围:该程序本身。传递方向:无。变量寿命:程序运行结束后,该变量被自动删除。特殊作用:可屏蔽(隐藏)上级(主)程序中与当前程序同名的变量,即对当前程序中变量的操作,不影响上级(主)程序中与当前程序同名的变量值。同时也不受下属子程序中同名内存变量值的影响。本地属性本地属性Local 例题例题P171 T4.24本地属性本地属性Local变量变化范围变量变化范围内存变量四种作用域属性比较内存变量四种作用域属性比较2.利用利用DOWITH传递参数传递参数v优点:在不受变量名限制的情况下能达
16、到传递参数的目的。v传递参数:DO WITH v接收参数:PARAMETERS 注:上述两个命令必须配对使用,不能单独使用。注:上述两个命令必须配对使用,不能单独使用。PARAMETERS命令中的命令中的必须以内存变量的形式出现,其中必须以内存变量的形式出现,其中的个数和位置与对应的的个数和位置与对应的DOWITH命令中命令中中的参数中的参数个数和位置相一致,都用逗号分隔。个数和位置相一致,都用逗号分隔。v规则传递参数命令在调用子程序处;接受参数命令在子程序第一行传递方式:引用引用:传递参数传递参数被隐含起来,但其值随着被调用程序中接受参接受参数数的变化而变化()传值传值:表达式列表或单个内存变量用圆括号,参数传递为传值方式。即传递参数传递参数不被隐含,其值也不随着被调用程序中接受接受参数参数的变化而变化 传递参数传递参数接受参数接受参数对应位置对应位置利用利用DOWITH传递参数传递参数例例1:引用方式传递参数。引用方式传递参数。利用利用DOWITH传递参数传递参数例例2传值方式传递参数。传值方式传递参数。利用利用DOWITH传递参数传递参数参数引用方式与传值方式比较参数引用方式与传
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1