第6章程序设计基础6.
1程序文件的建立与运行6.
2结构化程序设计初步6.
3顺序结构程序设计6.
4程序的选择结构6.
5循环结构6.
6多模块程序设计6.
7参数传递与变量作用域[教学目的]了解面向过程的程序设计方法,结构化程序设计的三种基本结构,子程序和过程的使用方法.
[基本要求]通过对三种结构的学习,可以进行简单的程序设计[教学要点]循环嵌套,模块调用,变量的作用域.
6.
1程序文件的建立与运行程序:为完成某一特定任务而组织编写的一系列命令和语句.
程序文件:程序以文件的形式存放于磁盘上,这个文件就称为程序文件.
(1)命令方式:MODIFYCOMMAND或MODIFYfile[|]6.
1.
2VFP程序文件的建立与执行1.
程序文件的建立(默认扩展名为.
PRG)①第一条命令中,文件的默认扩展名为.
PRG,可省略,第二条命令中,建立程序文件时文件扩展名.
PRG必须同时输入,不能省略.
②在文件名前可直接指明该文件保存的路径.
③用^END(即CTRL+END键,以下类似)或^W将编辑结果存盘,或执行"文件"菜单中的"保存"命令存盘;用^Q或ESC键放弃存盘,并退出编辑程序.
执行该命令后,VFP将打开一个用于输入和编辑修改程序的窗口,窗口的标题栏所显示的就是该命令中的文件名,如图所示.
(2)菜单方式:"文件""新建"弹出"新建"的对话框"文件类型"框里选择"程序"单击按钮"新建文件"弹出文本编辑窗口,在这个窗口中就可以输入命令和语句了,最后,选择系统菜单"文件"里的菜单项"保存",按照系统提示将输入窗口中的程序保存起来.
(3)在"项目管理器"对话框中选择"代码"选项卡中的"程序项",再单击"新建"按钮.
(4)利用其它编辑软件建立和编辑命令文件由于FoxPro的命令文件属于文本文件,因此可在Windows操作系统下利用WORD、WPS等编辑软件或DOS操作系统下利用EDIT等编辑软件来建立和编辑命令文件.
示例:建立应用程序L1.
PRG,功能为:打开表文件"学生.
dbf",根据键入的学生姓名在该表文件中查找并输出该学生的基本情况,关闭文件,返回.
命令窗口:MODICOMMVFP\L1.
PRG编辑窗口:*L1.
PRGSETTALKOFFUSEVFP\学生.
DBFACCEPT"请输入学生姓名:"TOXMLOCATEFOR姓名=XM学号,姓名,性别,班级USESETTALKOFFRETURN2.
程序文件的修改(1)利用系统菜单,操作与建立程序文件相同.
(2)在命令方式下,其操作与建立程序文件相同,但必须带文件名或"".
(3)若程序包含在一个项目中,可以在"项目管理器"对话框中选定它,再单击"修改"命令按钮.
3.
程序文件的执行方法一、在命令方式下执行命令文件DO〈程序文件名〉[WITH]方法二、使用系统菜单执行命令文件"程序""运行(D)…",然后在弹出的"运行"对话框中,选择"程序列表"中要执行的程序文件名,再单击"运行"按钮,程序就可以执行.
方法三、若程序包含在一个项目中,则可以在"项目管理器"对话框中选定它,再单击"运行"按钮.
4.
程序书写规则(1)命令分行程序中每行命令都以回车键结束,一行只能写一条命令.
若命令需分行书写,应在一行终了时健入继行符";",然后按回车键,继续在下一行输入.
(2)命令注释程序中可插入注释,以提高程序的可读性.
注释行以符号"*"开头,它是一条非执行命令,仅在程序中显示.
命令行的后面也可添加注释,这种注释以符号"&&"开头.
例如,*本程序用于修改表的指定纪录SETDATAUSA&&日期格式置为MM-DD-YY6.
1.
3、常使用的命令.
命令⒈settalk命令格式:settalkon/off功能:该命令控制其它命令执行的结果输出/不输出到屏幕上命令⒉setprint命令格式:setprintoff/on功能:该命令控制输出结果不输出/输出到打印机打印输出命令⒊文本输出命令格式1:text〈文本信息〉endtext功能:此命令把〈文本信息〉内容显示出来,允许文本信息出现多行,它只能在程序工作方式中使用,而且TEXT与ENDTEXT必须成对出现.
格式2:功能:能将一行文本信息的内容按书写形式的原样显示出来.
\与\\的区别在于前者是在下一行的第一列开始输出,而后者则不换行,在当前光标位置处开始显示.
命令5:清屏命令格式:clear功能:清屏,常将此命令用于程序开始,保持屏幕整洁.
命令4注释语句格式一:note〈注释字符〉格式二:*〈注释字符〉格式三:&&〈注释〉功能:格式一、格式二一般对程序作注释.
格式三注释某命令语句,只用在被注释的命令行之后.
命令6:返回命令格式:return[tomaster]功能:⑴return在一个主程序中用于结束此程序的运行并返回命令窗口;在子程序中用于结束子程序并返回到调用此过程中的下一语句⑵returntomaster将过程的调用直接返回主程序.
⒎中止程序执行命令格式:CANCEL功能:中止FoxPro程序的执行.
说明:当FoxPro程序运行到该语句时,将不再执行其后面的所有语句,而直接退出程序,返回到命令窗口,同时关闭所有已打开的文件.
命令8.
非格式化交互式命令⑴单字符接收命令(即等待命令)格式:WAIT[][TO][WINDOW[AT,][NOWAIT]][CLEAR|NOCLEAR][TIMEOUT]功能:暂停程序的执行,等待用户输入一个字符或按任一键.
也可只用于输出一条提示信息.
说明①WAIT命令使用VFP程序暂停运行,等用户按任意键(或回车)后,程序继续执行.
②用于输出一条提示信息.
如缺省,则执行命令后屏幕显示"按任意键继续…",提示用户按任意键,系统将继续运行.
③用于保存从键盘键入的字符,如果不选TO子句,则输入的数据不予保存.
④Windows子句可使主屏幕上出现一个WAIT提示窗口,用于输出提示信息,该窗口的位置由AT选项的,来指定,若缺省AT选项,在主屏幕右上角显示.
⑤若使用NOWAIT选项,系统将不等用户按键,立即往下执行.
⑵字符串接收命令格式:ACCEPT[]TO〈内存变量>功能:暂停程序的执行,等待用户输入字符串数据.
⑶任意类型数据接收命令格式:INPUT[]TO功能:暂停程序的执行,等待用户输入数据.
①系统执行该语句时,暂停正在运行着的程序,并显示提示信息,然后等待用户从键盘输入数据,它允许用户输入多个字符直至输入回车为止.
并将输入的信息以字符串的形式存储在内存变量中,故常用于输入字符型的数据.
②WAIT和ACCEPT的相同点是:它们接收的均是字符型数据,故两者所接收的字符型数据都无需用单、双引号或方括号括起来.
③WAIT和ACCEPT的最大区别是:WAIT只接收单个字符,并且不需要输入回车键,而ACCEPT可接收多个字符,且必须用回车键来结束字符串的输入.
说明:①WAIT和ACCEPT只能满足字符型变量的赋值,而INPUT能满足字符、数值、日期、逻辑型变量的赋值,可用于输入各种类型的数据.
使用INPUT语句若给变量赋的值是字符型,需加定界符,否则系统会把它当成一个变量名处理;若给变量赋的值是逻辑型常量,需用定界符(.
)括住;输入日期型常量两端须加花括号{};输入数值型常量,则直接输入整数或实数,也可以输入一个表达式.
②提示信息的内容同WAIT和ACCEPT语句.
9.
格式化输入输出命令⑴格式化输出语句:@…SAY格式:@〈行,列〉SAY〈表达式〉功能:在指定的行和列输出表达式的值.
说明:①〈行,列〉确定光标的位置.
把显示屏看作是由行和列组成的二维坐标系,其坐标系为25行*80列,规定行值取值范围是整数0~24,列值取值范围是整数0~79.
那么,屏幕最左上角字符的坐标就为(0,0),最右下角字符的坐标就为(24,79).
例如:@5,30SAY"ABCD"执行结果将在屏幕的第5行第30列位置开始显示字符串ABCD⑵格式化输入语句:格式:@[SAYGETREAD功能:定位显示GET变量的值;READ命令激活当前未被激活的所有GET变量,用户就可对这些GET变量进行编辑.
说明:①@…GET…READ给变量赋值的方式为全屏幕操作.
开始执行时光标停在GET变量显示区的第一个位置上,利用方向键可在显示区内上下左右移动光标.
当光标在最后一个GET变量的显示位置时,按下回车键则数据存入变量,且全屏幕编辑结束.
接着就执行READ的后继命令.
②若缺省SAY子句,GET变量值从由指定的坐标开始显示;含有SAY子句时先显示其表达式值,然后隔一个字符接着显示GET变量的值.
④GET变量必须具有初值,除变量的类型遵照初值外,其长度也将由初值决定.
故使用前必须先定义.
6.
2结构化程序设计初步1.
算法及流程图(1)算法的概念:根据问题要求拟定用计算机求解的策略和步骤,并把它用某种工具描述出来,称之为"算法设计"2)算法的流程图描述:用一些简单的几何框图表示各种类型的操作,然后用带箭头的有向流线将各个框图连结起来,以表示其执行的先后顺序,这种框图称为"流程图".
2.
结构化程序设计方法结构化程序指整个程序由顺序、选择、循环三种基本结构组成.
1)自顶向下逐步求精:从全局出发,通盘考虑,把问题的整体分解成若干个相对独立的小问题,然后再把小问题分解为若干个相对独立的更小的问题,直到能表示成程序为止.
2)模块化设计:由一个大问题分解成若干个相对独立的小问题,每个小问题实现一定的功能,称为功能模块.
对大的功能模块,采用自顶向下逐步求精的方法划分为更小的功能模块.
各功能模块的程序可单独编写和调试,这样便于多人协助完成较大型的程序设计.
3.
程序设计的步骤(1)分析问题主要是分析待编程序要解决什么问题,需要输入什么数据,需要做哪些处理,需要输出什么数据等等.
(2)画流程图用流程图来描述处理问题的过程.
(3)编写程序根据程序流程图,将所需要的VFP的命令、语句组织在一起.
(4)调试通过运行程序对程序进行正确性检验和测试.
符号名称功能起止框描述流程图的开始和结束处理框代表一个处理过程,其特征是一个入口,一个出口判断框为选出几条路线中的一条而进行的判断(条件转移操作)输入输出框表示输入输出↓→流程线表示信息流动的通道→①①→连接符一个流程图在一页纸上画不下时,用该符号连接4.
流程图介绍(1)绘制流程图时所用到的基本符号说明:①处理框中含有一个语句功能或一段程序,一般用自然语言或数学表达式描述,尽量简明扼要.
②流向线要清晰明确,不能相互交叉,不能出现死循环流向线.
③无论框图描述的处理过程如何,所画框图总是只有一个入口,最后汇集到一个出口.
例:计算1+2+3+……+100.
SETTALKOFFS=0FORN=1TO100S=S+NENDF"1+2+3+……+100=",SRETURN算法流程图2)举例:用框图描述求一元二次方程ax2+bx+c=0的实根的过程分析:首先输入a,b,c的值,其次,计算判断求一元二次方程实根的条件b*b-4*a*c的值,最后判断b*b-4*a*c的值是否满足实根存在的条件,若不满足,则输出方程无实根,若满足则方程有二个实根,输出两实根x1,x2:x1=(-b+sqrt(b*b-4*a*c))/(2*a)x2=(-b-sqrt(b*b-4*a*c))/(2*a)6.
3顺序结构程序设计1.
顺序结构程序运行时,按照命令(语句)的排列顺序逐条执行,这种结构就称为顺序结构.
2.
简单的输入输出语句(1)数据输入语句:INPUT1)格式:INPUT[]TO2)功能:暂停程序运行,显示提示信息,等待用户从键盘上输入数据,用户可以输入任意合法的表达式.
2)单字符输入语句:WAIT1)格式:WAIT[][TO][WINDOWS]2)功能:暂停程序运行,显示提示信息,等待用户键入任何一个键,然后继续执行程序.
3)简单输出语句:1)格式:/2)功能:依次计算并显示表达式表中各表达式的值,所显示的值与值之间间隔一个空格.
4)信息显示函数:MESSAGEBOX(1)格式:MESSAGEBOX([,][,2)功能:暂停程序运行,在对话框中显示提示信息,等待用户单击按钮,并返回一个整数表示单击的是哪个按钮.
按钮类型>由三个数码相加产生,即:++例:MESSAGEBOX函数举例MESSAGEBOX("继续执行吗",3,"请确认")MESSAGEBOX("删除记录",1+48+256)MESSAGEBOX("欢迎使用本系统!
")对话框图示MESSAGEBOX函数举例3.
环境设置语句环境设置语句:SET设置系统环境和状态的语句为SET语句,SET语句实际上是一个语句组,分为两种格式:格式ⅠSETON/OFF格式ⅡSETTO常用的几个SET语句:SETDEFAULTTO功能:设置默认的工作目录.
2)SETPATHTO功能:设置搜索路径.
(3)SETTALKON/OFF功能:控制是否使某些命令产生屏幕显示(4)SETPRINTON/OFF功能:控制屏幕上的输出内容是否同时送打印机打印.
4.
注释(1)注释语句1)格式*/NOTE2)功能注释语句是非执行语句,它们不对计算机产生任何操作,仅仅对程序起注解作用.
2)行末注释行末注释用在语句(命令)末尾,以"&&"起头,后跟本行的注释内容.
6.
3.
1顺序结构程序设计1.
概念顺序结构程序:自始至终严格按照程序中语句的先后顺序逐条执行,是最基本、最普遍的结构形式.
顺序结构的流程图:顺序结构ABc例:编程,根据输入的半径值,计算出相应的圆的周长.
SETTALKOFFCLEARINPUT"请输入圆的半径:"TORL=2*3.
1416*R@5,5SAY"圆的周长是:"+STR(L,6,3)SETTALKON6.
4程序的选择结构定义:分支结构:就是按照一定的条件由判断语句或选择语句构成的双重或多重走向的程序.
语句行条件表达式语句行序列ENDIF后面的语句YN简单分支结构的流程图1)简单分支格式:IF语句行序列>ENDIF注:IF和ENDIF必须成对出现说明:(1)IF.
.
.
ENDIF配对组成一条语句,缺一不可.
(2)IF.
.
.
ENDIF语句只能在程序中使用,不能使用于交互式状态.
(3)该语句的执行过程是:首先对逻辑表达式进行判断,然后根据逻辑表达式的取值确定是否执行.
当的值为"真"时,顺序执行IF与ENDIF之间的语句序列,然后再执行ENDIF后的语句;当逻辑表达式的值为"假"时,不执行IF与ENDIF之间的语句而直接执行ENDIF后面的语句.
逻辑表达式也称为条件,故以后叙述中逻辑表达式也简称为条件.
例:从键盘接收两个数,在屏幕输出大数.
INPUT"X="TOXINPUT"Y="TOYIFX语句行序列1>ELSEENDIF条件成立语句序列1语句序列2Endif后的语句YN双边分支的流程图说明:该语句执行过程是:首先判断逻辑表达式的值是否为真,若为真,执行,而不执行,并从ENDIF后面的语句开始继续执行;若为假,则不执行,而执行,然后再执行ENDIF后面的语句.
例:编一个程序,输入一个教工号,在STAFF表中查找,若查到就给该教师增加100元基本工资,并在信息窗口提示相应的信息;若查不到则提示"查无此人!
".
OPENDATABASE教学管理&&打开"教学管理"库作为当前库USESTAFF&&打开当前库中STAFF表CLEARINPUT"请输入教工号:"TOJGHLOCATEALLFOR教工号=JGHIFFOUND(REPLACE基本工资WITH基本工资+100=MESSAGEBOX("该教师的基本工资已增加100元")ELSE=MESSAGEBOX("查无此人!
")ENDIFCLOSEDATABASE&&关闭当前库RETURNIF语句多重嵌套一般格式:IF语句行序列1>ELSEIF语句行序列2>ELSEIF语句行序列3>ELSEENDIFENDIFENDIF3)多分支结构注:(1)IF、ELSE(可不选)、ENDIF必须成对使用(2)最好采用缩格(锯齿形)的书写方式多分支程序用于解决要根据多种条件,从各种情况中选择一种进行处理的问题.
条件n条件2条件1语句序列1语句序列n+1语句序列n语句序列2ENDCASE的下一语句情况判断语句格式:DOCASE分支程序用于解决要根据多种条件,从各种情况中选择一种进CASE语句行序列1>CASE语句行序列2>CASE语句行序列2>OTHERWISE]ENDCASE说明:①DOCASE和ENDCASE须成对出现②在情况语句中,如果逻辑表达式的值为真的情况多于一个,则仅执行第一个逻辑表达式值为真的语句系列.
③DOCASE语句之间可以嵌套使用,DOCASE语句和IF语句也可以嵌套使用DOCASE语句和DOWHILE也可以嵌套使用.
例:显示当前季节程序.
M=MONTH(DATE(获取当前月份DOCASECASEM=3ANDM=6ANDM=9ANDMLOOP]EXIT]ENDDO条件成立……[loop][exit]……ENDDO后面的语句YN1、条件循环备注例:用DOWHILE语句编写程序,实现例6.
2算法.
S=0&&存放累加和的变量S初值为0N=1&&取第一个自然数DOWHILENDOWHILEEXITLOOPENDDOENDDO(3)EXIT语句的一个典型应用EXIT语句常用在下列控制结构中,用于控制循环次数不确定时的循环退出.
DOWHILE.
T.
&&循环条件为永真EXITENDIFENDDO例:从键盘输入若干个非零的数值,当输入数值"0"时结束输入,统计有效数值的个数和它们的平均值.
CLEARS=0&&存放累加和N=0&&存放数值个数DOWHILE.
T.
这是一个永真循环INPUT"请输入数值,[输入零时结束]"TOSZIFSZ=0EXITENDIFS=S+SZN=N+1ENDDO"共输入有效数值个数:",N"平均值是:",S/NRETURN2、计数循环格式:FOR=TO[STEP语句序列1>LOOP]语句序列2>EXIT]语句序列3>ENDFOR|NEXT(注:步长可为正值和负值)备注例:裝有100只鸡蛋的蛋箱,运输过程中打碎了若干鸡蛋.
货主开箱取鸡蛋,若5只5只的取,最后剩下一只;若6只6只的取,最后也剩一只;若7只7只的取;最后刚好取完;请问有多少只好鸡蛋clearfori=1to100ifmod(i,5)=1andmod(i,6)=1andmod(i,7)=0i,endifendfreturn3、表扫描循环结构格式:SCAN[][FOR][WHILE语句序列1>LOOP]语句序列2>EXIT]语句序列3>ENDSCAN备注SCAN循环专用于控制对数据表中记录进行逐条操作.
功能针对当前表中指定范围内满足条件的每条记录,逐一执行SCAN与ENDSCAN之间的语句序列.
例:用SCAN循环实现对STAFF表中出生于50年代的教师增加100元工资.
OPENDATABASE教学管理USESTAFFIN0SCANFOR出生日期={^1950/01/01}REPLACE基本工资WITH基本工资+100ENDSCANCLOSEDATABASERETURN4、多重循环格式(以当型循环结构为例):DOWHILE〈条件表达式1〉语句序列1〉DOWHILE〈条件表达式2〉语句序列2〉DOWHILE〈条件表达式3〉语句序列3〉ENDDO〈语句序列4〉ENDDO〈语句序列5〉ENDDO4.
循环的嵌套例:某学生食堂采购员带1000元钱去市场买鸡,已知每只小鸡5元,每只公鸡20元,每只母鸡30元,现在要求1000元钱正好买100只鸡且品种齐全,请编程序帮助采购员制订采购方案.
CLEARFORI=1TO33&&最多可以买33只母鸡FORJ=1TO50&&最多可以买50只公鸡FORK=1TO100&&最多可以买100只小鸡IF30*I+20*J+5*K=1000ANDI+J+K=100I,J,KENDIENDFENDFENDF循环语句与IF语句和DOCASE语句的相互嵌套循环语句与IF语句和DOCASE语句的相互嵌套有如下几种形式.
形式一:DOWHILEIFELSEENDIF…ENDDO形式二:ifdowhile循环语句>enddoendif注意:在嵌套使用时,不能互相交叉.
形式四:docasecasedowhileenddocaseendcase形式三:dowhiledocasecaseendcaseenddo6.
6.
1子程序6.
6.
2自定义函数6.
6.
3过程6.
6多模块程序设计应用程序一般都是多模块程序,可包含多个程序模块.
模块是可以命名的一个程序段,可指主程序、子程序和自定义函数.
本节介绍模块的构成及调用方法,多模块程序中变量的作用域,程序调用方法以及结构化程序设计等.
6.
6.
1子程序一、调用与返回对于两个具有调用关系的程序文件,常称调用程序为主程序,被调用的程序为子程序.
主程序执行时遇到DO命令,执行就转向子程序,称为调用子程序.
子程序执行到RETURN语句,就会返回到主程序中调用命令处的下一语句继续执行程序,称为从子程序中返回,简称返回.
2.
带参数子程序的调用与返回DO命令允许带一个WITH子句,用来进行参数传递.
格式:DO[][IN]说明:(1)中的参数可以是表达式,但若为内存变量必须具有初值.
(2)当是IN子句中的一个过程时,DO命令调用该过程.
调用子程序时参数表中的参数值要传送给子程序,子程序中必须设置相应的参数接收语句接收传递来的参数值.
VFP用PARAMETERS命令接收参数值和回送参数值.
格式:PARAMETERS功能:指定内存变量以接收DO命令发送的参数值,返回主程序时把内存变量值返回给主程序中相应的内存变量.
说明:(1)PARAMETERS必须是被调用程序的第一个语句.
(2)命令中的参数被VFP默认为私有变量,返主时回送参数值之后即被清除.
(3)命令中的参数依次与调用命令WITH子句中的参数相对应,故两者参数个数必须相同.
ymj=0@5,10SAY"请输入半径:"GETbjDEFAULT0READDOjsWITHbj,ymj&&调用子程序"ymj=",ymj&&显示圆面积RETURN子程序js.
PRG如下:PARAMETERSr,ss=PI()*r*r&&VFP的PI函数返回π值RETURN&&返回主程序在调用子程序前,调用语句中的参数变量都赋了值;在调用子程序时,调用语句的bj值传送给子程序的参数r,子程序计算面积后返回主程序时变量s的值回送给参变量ymj.
例6.
26设计一个计算圆面积的子程序,并要求在主程序中带参数调用它.
程序如下:格式:RETURN[TOMASTER|TO格式中的TOMASTER选项,使返回主调程序时直接返回到最外层主程序;选项TO强制返回到指定的程序文件.
3.
子程序嵌套主程序与子程序的概念是相对的,子程序还可调用它自己的子程序,即子程序可以嵌套调用.
VFP的返回命令包含了因嵌套而引出的多种返回方式.
6.
6.
2自定义函数1.
自定义函数的建立格式:[FUNCTION][PATAMETERS][RETURN](1)若使用FUNCTION来指出函数名,表示该函数包含在调用程序中.
若缺省表示此函数是一独立文件,函数名将在建立文件时确定,其扩展名默认为.
PRG,并可使用MODIFYCOMMAND来建立或编辑该自定义函数.
还需注意,自定义函数的函数名不能和VFP系统函数同名,也不能和内存变量同名.
(2)为函数体,用于进行各种处理;简单函数的函数体也可为空.
(3)RETURN语句用于返回函数值,其中的值就是函数值.
若缺省该语句,则返回的函数值为.
T.
.
(4)自定义函数与系统函数调用方法相同,其形式为:函数名([])例用自定义函数编写一个计算阶乘的程序.
该例题是典型的函数递归调用.
程序如下:SETTALKOFFINPUT"请输入一个正整数:"TOintfactorial(int)SETTALKONRETURN函数如下:FUNCTIONfactorialPARAMETERnIFn=0r=1ELSEr=n*factorial(n-1)ENDIFRETURNr6.
6.
3过程过程就是由"PROCEDURE"为开始标志,以"RETURN"语句结束的一个子程序段.
它通常是包含在调用程序文件中,作为主程序的一部分出现的一个子程序段,是程序文件的一个组成部分.
我们习惯上把过程写在程序的最后.
一个程序文件可以包含多个过程.
引入过程的主要目的是减少同时打开文件的个数以及访问磁盘的次数.
1.
过程的定义过程的定义是用PROCEDURE命令开始的一个命令序列,基本结构如下:PROCEDURE〈过程名〉〈过程的全部语句序列〉RETURN过程名由1~8个字符组成,无扩展名.
过程以RETURN命令结束.
2.
过程的调用格式:DO[WITH][IN〈过程文件〉]说明:DO语句出现在主程序中,当主程序执行DO语句时,将指明的程序调入内存中,并转入该过程运行,当遇到RETURN语句时,返回主程序,继续执行调用语句的下一条语句.
WITH子句是用来向被调用过程传递参数的,不包含WITH子句的调用称为无参调用,包含了WITH子句的调用称为有参调用.
IN子句指定过程所在的过程文件.
DO…∶∶∶RETURN主程序过程3.
过程文件一个复杂的应用系统,通常有许多过程.
将多个过程存放在同一个文件中,这个文件称为过程文件.
一个过程文件允许存放128个过程.
一旦过程文件打开,系统认为只打开一个文件,就能根据过程文件执行其中的过程,从而能够减少访问磁盘次数,加快过程执行速度.
如果一个过程是作为一个独立文件存放在磁盘上的,我们称它为外部过程,把过程文件中的过程称为内部过程.
过程文件的内容形式如下:procedure过程1全部语句>Returnprocedure过程2全部语句>Returnprocedure过程N全部语句>Return4.
过程文件的打开、关闭和内部过程的调用(1)过程文件的打开格式:setprocedureto〈过程文件名〉说明:①过程文件必须打开后,其中所包含的过程才能被其它过程所调用.
②调用内部过程仍使用DO语句,DO语句中的文件名是由procedure指明的过程名.
③VFP规定,任何时候只能打开一个过程文件,当打开一个新的过程文件后,前面被打开的过程文件将被自动关闭.
(2)过程文件的关闭格式一:setprocedureto格式二:closeprocedure说明:①过程文件被关闭后,此过程文件中的内部过程也同时被停止调用.
②对于不再使用的过程文件应及时关闭,以便为系统调用其它程序或读取数据提供更大的内存空间(3)内部过程调用的主程序setprocedureto…do…doCloseprocedure…6.
7参数传递与变量作用域1.
参数的传递1.
格式传递参数语句格式:DOWITH接收参数语句格式:PARAMETERS2.
规则(1)DO语句可以用在调用程序中的任何位置,而PARAMETERS语句必须放在过程的第一个可执行语句之前.
2)调用过程时系统会将实参按排列顺序一一传递给对应的形参.
(3)形参形式上同内存变量,而实参可以是常量、内存变量或表达式.
3.
两种传递机制(1)按值传递实参形参(2)按地址传递实参形参例:分析下列程序的执行结果.
CLEARSTORE"BOYS!
"TOX,Y"调用前:",X+YDOSUB1WITHX,(Y)"调用后:",X+YRETURNPROCSUB1PARAX1,Y1"过程中:",X1+Y1STORE"GIRLS!
"TOX1,Y1RETURNENDP分析:这是一个主程序调用一个内部过程SUB1,内存变量X、Y为实参,调用SUB1时X按地址传递到X1,Y按值传递给Y1,故在SUB1中输出X1+Y1结果仍是"BOYS!
BOYS!
",随后在SUB1中把X1、Y1的值改为"GIRLS!
",实参X的值也就改成"GIRLS!
",实参Y不受影响;所以返回主程序后输出X+Y结果是"GIRLS!
BOYS!
".
2.
变量作用域及其定义1.
变量作用域的含义内存变量的有效作用范围称为内存变量的作用域.
根据作用域的不同,内存变量可分为全局变量、私有变量和局部变量三种类.
2.
含作用域的变量定义(1)全局变量的定义1)在命令窗口创建的变量和数组将自动成为全局变量2)用PUBLIC语句定义:格式:PUBLIC功能:定义全局内存变量和数组.
参数说明:逐一列出作为全局变量的内存变量和数组,其中数组用数组名或数组说明均可.
若用数组说明,其格式如下:数组名([,]).
(2)局部变量的定义局部变量只能用LOCAL语句定义.
格式:LOCAL功能:定义局部内存变量和数组,并屏蔽来自上级过程(含主程序)中与当前局部变量同名的全局或私有变量,使在当前过程中对局部变量的操作,不影响上级过程中同名变量的值.
3)私有变量的定义1)在一个程序或过程中建立的内存变量,如果未加任何说明,默认为私有变量.
2)用PRIVATE语句定义:格式Ⅰ:PRIVATE格式Ⅱ:PRIVATEALL[LIKE/EXCEPT功能:定义私有内存变量和数组,并屏蔽来自上级过程(含主程序)中与当前私有变量同名的全局或私有变量,使在当前过程中对私有变量的操作,不影响上级过程中同名变量的值.
格式Ⅱ中的参数说明:ALL:表示当前所有的内存变量均为私有变量.
ALLLIKE:表示所有与相匹配的变量均为私有变量.
ALLEXCEPT:表示所有不与相匹配的变量均为私有变量.
例:若有程序文件如下:CLEARPUBLICAPRIVATEBLOCALCSTORE10TOA,B,CDOSUB1A,B,CRETURNPROCSUB1A,BA=A+5B=B+10RETURN本例中,全局变量A和私有变量B在主程序和内部过程SUB1之间双向传递数据,局部变量C的作用域是主程序本身,不能传递数据.
如果在内部过程SUB1中增加C语句,程序执行时就会报错,因为在SUB1中找不到变量C.
无忧云怎么样?无忧云值不值得购买?无忧云,无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,主要销售国内、中国香港、国外服务器产品,线路有腾讯云国外线路、自营香港CN2线路等,都是中国大陆直连线路,非常适合免备案建站业务需求和各种负载较高的项目,同时国内服务器也有多个BGP以及高防节点。目前,四川雅安机房,4...
最近AS9929线路比较火,联通A网,对标电信CN2,HostYun也推出了走联通AS9929线路的VPS主机,基于KVM架构,开设在洛杉矶机房,采用SSD硬盘,分为入门和高带宽型,最高提供500Mbps带宽,可使用9折优惠码,最低每月仅18元起。这是一家成立于2008年的VPS主机品牌,原主机分享组织(hostshare.cn),商家以提供低端廉价VPS产品而广为人知,是小成本投入学习练手首选。...
搬瓦工vps(bandwagonhost)现在面向中国大陆有3条顶级线路:美国 cn2 gia,香港 cn2 gia,日本软银(softbank)。详细带宽是:美国cn2 gia、日本软银,都是2.5Gbps~10Gbps带宽,香港 cn2 gia为1Gbps带宽,搬瓦工是目前为止,全球所有提供这三种带宽的VPS(云服务器)商家里面带宽最大的,成本最高的,没有第二家了! 官方网站:https...