企管-第五章程序设计基础_第1页
企管-第五章程序设计基础_第2页
企管-第五章程序设计基础_第3页
企管-第五章程序设计基础_第4页
企管-第五章程序设计基础_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

第五章程序设计根底§5、1程序设计概述一、程序的概念程序:完成一定任务的一组命令的有序集合。程序设计:计算机用户将解决某一实际问题所用的命令按一定的逻辑顺序编制成程序,并以文件的形式存放于磁盘的过程。优点:〔1〕可以利用编辑器,方便的输入、修改、保存文件。〔2〕可用多种方式,屡次运行程序。〔3〕可在一个程序中调用另一个程序。VisualFoxPro的工作方式{{程序文件方式交互式方式单命令方式菜单方式菜单方式、命令方式、程序方式、工具方式1.单命令方式单命令方式:输入一条命令,完成一个操作的工作方式。注:〔1〕VFP单命令方式:利用Command窗口来实现的。〔2〕Command窗口不仅是VFP命令的执行窗口,也是VFP命令文件的编辑窗口。2.菜单方式通过翻开不同的菜单项选择择并完成不同的操作。3.程序文件方式程序文件〔简称程序〕也叫做命令文件。命令方式:通过程序文件中的命令完成不同的操作。二、程序文件的建立、执行与编辑说明:程序由命令语句、函数、过程等程序代码组成;通过调用系统内置的文本编辑器进行建立和修改;程序文件的扩展名为.prg1、建立程序文件A、菜单方式B、工程管理器中创立C、命令方式格式:MODIFYCOMMAND[<文件名>]|?2、保存程序3、编辑、修改程序文件格式:MODIFYCOMMAND<程序名>|?4、运行程序格式:DO<程序名>[WITH<实参表>]5、使用VFP设计工具编写代码三、程序文件的注释命令与程序结束命令1、注释命令格式:NOTE|*|&&[<注释内容>]注释行:以*、NOTE开头的命令行〔独成一行〕且只能出现在一行的开始命令行后的注释:&&〔在其他命令行之后〕2、程序结束命令格式:CANCEL

说明:执行CANCEL将释放所有私有内存变量

程序中的常用命令程序开头常用命令:CLEARSETTALKOFF程序末尾常用命令:RETURNCANCELSETTALKONQUIT输入输出命令〔1〕标题部:通常由注释语句组成,说明程序的名称,功能,作者等。〔2〕初始化部:通常由各种SET命令及CLEAR命令等组成,用于设定程序运行时的初始环境。〔3〕程序主体:为完成特定任务所需的命令的有序集合。〔4〕结束返回部:由关闭文件命令,恢复程序运行前的环境的SET命令及RETURN,QUIT等返回语句组成。程序的几个局部(1)、首先遵守命令的根本书写规那么;(2)、命令分行书写,一行只能写一条命令,假设命令较长需分行书写,要在一行结束时输入‘;’程序中每条命令都以回车键结尾;(3)、擅长使用注释语句,提高程序的可读性。程序书写规那么§5、2根本输入输出命令

一、交互式输入命令交互式输入:根据屏幕的提示,通过键盘等输入设备输入数据。1、INPUT命令格式:INPUT[<字符型表达式>]TO<内存变量>说明:〔1〕以表达式的值作为提示信息〔2〕[<提示信息>]可以是含有变量的字符型表达式〔3〕内存变量可接受任何类型的表达式的值〔4〕不能不输入任何内容按回车键〔5〕输入字符串时,必须加定界符L常量要加圆点定界符T型常量要用大括号2、ACCEPT命令格式:ACCEPT[<字符型表达式>]TO<内存变量>功能:等待用户从键盘输入字符串说明:〔1〕在输入字符串时不需要加定界符,〔2〕可以不输入任何内容直接按回车键。3、WAIT命令格式:WAIT[<字符型表达式>][TO<内存变量>][WINDOW[AT<行>,<列>]][NOWAIT][CLEAR|NOCLEAR][TIMEOUT<数值表达式>]说明:该命令只接收字符型数据说明:〔1〕假设字符串表达式为空,不会显示任何提示信息;假设没有指定字符串表达式,那么默认为‘按任意键继续…’〔2〕假设用户按的是Enter键或单击了鼠标,内存变量中保存空串;假设没有TO<内存变量>项,输入的单字符不保存。〔3〕WAIT提示窗口〔默认在主窗口的右上角〕〔4〕同时选用NOWAIT短语和WINDOWS子句,系统不等待用户按键,直接往下执行4、INKEY函数格式:INKEY([<数值表达式>][,<功能字符>])功能:等待用户输入内容,等待时间由数值表达式确定〔单位为秒〕,返回由按键而产生的一个整数值。说明:〔1〕INKEY函数只能返回用户按键的ASCII码值,还能接受键盘上各种不可打印的控制键、功能键等。〔2〕关于等待时间:超过预定的等待时间用户仍未按键,那么返回0;数值表达式为0,那么无限期等待,直到用户按键为止;格式中缺少可选项,那么不等待,直接返回0。〔3〕功能字符:S、H、M控制光标的显示或隐藏,检查鼠标器按钮的状态。

二、一般输出命令1、文本行输出命令格式:\|\\<文本行>

功能:将<文本行>信息的内容按原样显示出来。说明:?/??<表达式>2、文本输出命令格式:TEXT<文本信息>ENDTEXT

说明:该命令只能在程序设计中用,不能在命名窗口中用;屏幕画面;

<文本信息>中允许出现变量、函数、表达式,

本命令能识别他们不显示其值,但需事先设定状态SETTEXTMERGEON,并用<<和>>将其括起来,以区别其他一般的文本信息。三、格式化输入输出命令格式:@<行,列>SAY<字符表达式>如:@6,8SAY“请输入查询条件:〞格式:@<行,列>[SAY<提示信息>]GET<变量>[DEFAULT<表达式>]说明:变量必须事先赋初值〔类型、长度〕;GET<变量>必须要READ命令激活;READ命令的格式:READ[SAVE]例:SETTALKOFFUSERCDAACCEPT“请输入编号:〞TOBHLOCATEFOR编号=BH?“工资:〞+STR〔工资〕INPUT“请输入工资:〞TOGZLOCATEFOR工资=GZ??‘姓名:’+姓名@4,10SAY“工资为1000的人的编号为:〞@4,25SAYBHUSESETTALKONRETURN§

5、3程序设计的控制结构程序结构:程序中命令或语句执行的流程结构。VisualFoxPro系统的程序有两个特点:一是程序控制流模式,由顺序、分支〔选择〕、循环三种根本结构构成。二是面向对象可视化的结构程序模块,在每个模块的内部也是由程序控制流组成。常见的控制结构如下:1.顺序结构顺序结构:在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。2.分支结构分支结构:在程序执行时,根据不同的条件,选择执行不同的程序语句,用来解决有选择、有转移的诸多问题。3.循环结构循环结构:能够使某些语句或程序段重复执行假设干次。如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。4.过程结构〔可读性、模块化〕过程:具有独立功能而且可以被其它程序调用的程序序列在许多应用程序中,有一些程序段需要反复执行屡次,这些程序段不在一个固定的位置上,而是分散在程序的许多位置上重复执行,可将其与嵌入它的程序分开,形成独立的程序序列,待使用时再调入程序中,以实现不同位置上的重复操作。一、顺序结构

例:程序A1.PRGSETTALKOFFZ=0INPUT“输入X的值:〞TOXINPUT“输入Y的值:〞TOYZ=X+Y?‘Z=’,ZSETTALKONRETURN二、选择结构支持选择结构的语句:条件语句、分支语句1、条件语句〔单分支、双分支〕格式:IF<条件><语句序列1>[ELSE<语句序列2>]ENDIF真条件语句序列1ENDIF后面语句假条件语句序列2ENDIF后面语句假真语句序列1有ELSE的选择语句无ELSE的选择语句例:A2.PRGSETTALKOFFZ=0INPUT“输入X的值:〞TOXINPUT“输入Y的值:〞TOYIFX>YZ=X+YENDIF?‘Z=’,ZRETURN例:A3.PRGSETTALKOFFZ=0INPUT“输入X的值:〞TOXINPUT“输入Y的值:〞TOYIFX>YZ=X+YELSEZ=X*YENDIF?‘Z=’,ZRETURN2、分支语句

DOCASECASE〈条件表达式1〉〈命令行序列1〉[CASE〈条件表达式2〉〈命令行序列2〉……CASE〈条件表达式N〉〈命令行序列N〉][OTHERWISE〈命令行序列N+1〉]

ENDCASE条件1条件2OTHERWISE条件n…语句序列1语句序列2语句序列3语句序列4…ENDCASE后面的语句例:A4.PRG

设X代表货物重量,Y代表运费,其关系如下式:

X*15X<=50X*1050<X<=100Y=X*8100<X<=1000X*5X>1000{SETTALKOFFINPUT“输入货物重量:〞TOXIFX<=50Y=X*15ELSEIFX<=100Y=X*10ELSEIFX<=1000Y=X*8ELSEY=X*5ENDIFENDIFENDIF?〞运费为:〞+STR(Y,8,2)RETURNSETTALKOFFINPUT“输入货物重量:〞TOXDOCASECASEX<=50Y=X*15CASEX>50.AND.X<=100Y=X*10CASEX>100.AND.X<=1000Y=X*8CASEX>1000Y=X*5ENDCASE?“运费为:〞+STR(Y,8,2)RETURN例:A5、PRG求一元二次方程AX2+BX+C=0的实根。SETTALKOFFINPUT“请输入二次项系数:〞TOAINPUT“请输入一次项系数:〞TOBINPUTTO“请输入常数项:〞CK=B*B-4*A*CS=IIF(K>0,SQRT(K),0)DOCASECASEA=0?“唯一实根:〞,-C/BCASEA<>0.AND.K=0?“两个相等实根:〞,B/(2*A)CASEA<>0.AND.K>0?“第一个实根:〞,(-B+S)/(2*A)?“第二个实根:〞,(-B-S)/(2*A)OTHERWISE?“本方程无实根!〞ENDCASE使用分支语句应注意的问题:〔1〕IF……ENDIF和DOCASE……ENDCASE必须配对使用,DOCASE与第一个CASE〈条件表达式〉之间不应有任何命令。〔2〕〈条件表达式〉可以是各种表达式或函数的组合,其值必须是逻辑值。〔3〕〈命令行序列〉可以由一个或多个命令组成,可以是条件控制语句组成的嵌套结构。〔4〕DOCASE……ENDCASE命令,每次最多只能执行一个〈命令行序列〉。在多个CASE项的〈条件表达式〉值为真时,只执行第一个〈条件表达式〉值为真的〈命令行序列〉,然后执行ENDCASE的后面的第一条命令。三、循环结构〔重复结构〕

1、DOWHILE…ENDDO语句(“当〞循环、条件循环)根据条件表达式的值,决定循环体内语句的执行次数。格式:DOWHILE<条件><语句序列1>[LOOP]<语句序列2>[EXIT]<语句序列3>ENDDO条件循环体ENDDO后面的语句假真条件LOOPEXITENDDO后面的语句真假说明:〔1〕假设第一次判断条件为假,循环体一次都不执行〔2〕假设循环体中包含LOOP命令,遇到LOOP时,结束循环体的本次执行,不再执行其后面的语句,而是转回DOWHILE处重新判断条件〔3〕假设循环体中包含EXIT命令,遇到EXIT时,结束该语句的执行,转去执行ENDDO后面的语句例:SETTALKOFF?“开始跑步〞N=0DOWHILEN<=10?〞开始的圈数是:〞,NN=N+1ENDDO?〞你可以休息了!〞?〞呼呼…累死人了!!!〞例:SETTALKOFFSTORE0TOS,N

DOWHILE.T.N=N+1S=S+N

IFN>=10EXITENDIF

ENDDO?’S=‘+STR(S,2)RETURNSETTALKOFFINPUT‘请输入一个大于1的自然数’

TONK=0&&K=0表示输入的数为质数,K=1不是质数

J=2DOWHILEJ<N

IFMOD(N,J)<>0J=J+1

LOOP

ELSEK=1

EXIT

ENDIFENDDO

IFK=0?N,’是质数‘ENDIFSETTALKONRETURN2、FOR…ENDFOR语句〔“计数〞循环、步长循环〕根据用户设置的循环变量的初值、终值和步长,决定循环体内语句的执行次数据。格式:FOR<循环变量>=<初值>TO<终值>[STEP<步长>]<循环体>ENDFOR|NEXT注:〔1〕当无STEP语句时,默认步长为1。〔2〕初值、终值、步长都可以是数值表达式,却仅在循环语句执行开始时被计算一次。〔3〕可在循环体内改变循环变量的值,但会影响循环体的执行次数〔4〕步长为零时,FOR循环为死循环,步长可以是正值,也可以是负值。〔5〕步长是正值时,超过的含义是大于步长是负值时,超过的含义是小于。〔6〕ENDFOR可以换成NEXT。〔7〕LOOP、EXIT例:对给定的自然数K,求不大于K的奇数之和

SETTALKOFFCLEARINPUT‘请输入一个自然数:’TOKS=0FORI=1TOKSTEP2S=S+IENDFOR

?‘S=’,SSETTALKONRETURN3、SCAN…ENDSCANE语句〔“指针〞型循环控制语句〕根据用户设置的表中的当前记录指针,决定循环体内语句的执行次数据。格式:SCAN[<范围>][FOR<条件1>][WHILE<条件2>]<循环体>ENDSCAN执行该语句时,记录指针自动、依次地在制定范围内满足条件的记录上移动,对每一条记录执行循环体内的命令。注:〔1〕SCAN···ENDSCAN循环结构隐含EOF〔〕和SKIP处理。〔2〕无范围选项那么默认值为所有记录ALL。〔3〕如使用WHILE选项,遇到该选项的条件为假时,便结束循环。〔4〕LOOP和EXIT选项可以在该循环中使用,使用方法同DO循环。使用循环语句时应注意的几点〔1〕DOWHILE和ENDDO、FOR和ENDFOR、SCAN和ENDSCAN必须配对使用。〔2〕〈命令行序列〉可以是任何FoxPro命令或语句,也可以是循环语句,即可以为多重循环。〔3〕〈循环变量〉应是数值型的内存变量或数组元素。〔4〕EXIT和LOOP命令嵌入在循环体内,可以改变循环次数,但是不能单独使用。EXIT:跳出循环,转去执行ENDDO、ENDFOR、ENDSCAN后面的第一条命令;LOOP:转回到循环的开始处,重新对“条件〞进行判断,相当于执行了一次ENDDO、ENDFOR、ENDSCAN命令,可改变〈命令行序列〉中局部命令的执行次数。EXIT、LOOP可以出现在〈命令行序列〉的任意位置。四、编程实例B1.PRG**a,b,c从大到小排序settalkoffClearinput"请输入数值a:"toainput"请输入数值b:"tobinput"请输入数值c:"tocifa<btemp=aa=bb=tempendififa<ctemp=aa=cc=tempendif

ifb<ctemp=bb=cc=tempendifsettalkon?a,b,creturnB2.PRG**求n个数中的最大数settalkoffclearinput"请输入要比较的数值个数n:"tondimensiona(n)fori=1toninput"请输入数值:"toa(i)endforfori=2tonifa(1)<a(i)temp=a(1)a(1)=a(i)a(i)=tempendifendfor?"最大数为:"??a(1)return例:B3、PRG求0---10之间奇数之和。SETTALKOFFI=0&&用于表示数值大小S=0&&用于求和DOWHILEI〈10I=I+1IFINT〔I/2〕=I/2&&MOD(I,2)=0I为偶数LOOPELSES=S+IENDIFENDDO?“S=〞,SRETURN

例:B4、PRGSETTALKOFFSTORE0TOX,YDOWHILE.T.X=X+1DOCASECASEMOD〔X,2〕<>0&&奇数?XY=Y+X&&奇数之和CASEX>=10EXITOTHERWISE&&不是10以内的奇数LOOP&&10以内的偶数ENDCASEENDDO?“Y=〞??YSETTALKONRETURN例:B5.PRG求4!SETTALKOFFCLEARJ=1R=1DOWHILEJ<=4R=R*J&&求阶乘J=J+1&&改变数值的大小ENDDO?“R=〞,RRETU例21:A21·PRG求1!+2!+3!+4!+5!的和。SETPROCTOPROC1SETTALKOFFI=1S=0DOWHILEI<=5Y=1

DOSUBWITHI,YS=S+YI=I+1ENDDORETU**PROC1·PRG**PROCSUB&&J的阶乘PARAP,RJ=1DOWHILEJ<=PR=R*JJ=J+1ENDDORETU例:B6.PRG用户从键盘上任意输入一个字符串,并以相反顺序显示出来

settalkoffclearaccept"任意输入一字符串:"tozfs=0dowhiles<len(zf)a=substr(zf,len(zf)-s,1)@4,ssayas=s+1enddoreturn方法2:CLEAACCEPT“请输入字符串:〞TOZFFORI=LEN〔ZF〕TO1STEP-1A=SUBS〔A,I,1〕@8,LEN〔ZF〕-ISAYAENDFOR

SETTALKOFFUSERCDAI=0DOWHILE.NOT.EOF()IF性别=‘男’

I=I+1ENDIFSKIPENDDO?‘I=’,IUSERETURNSETTALKOFFUSERCDACOUNTALLTONGOTOPM=0FORI=1TONIF性别=‘男’

M=M+1ENDIFSKIPENDFOR?‘M=’,MUSERETURN例:B7、PRG统计‘RCDA’数据表中男性人数。〔3种方法〕例:B8·PRG用FOR语句改写例B7.PRG。SETTALKOFFUSERCDAS=0SCANALL

FOR性别=‘男’

S=S+1ENDSCAN@4,5SAY‘男性人数为:’@4,20saysUseretu例:B9·PRG在‘RCDA’数据表中,对60年以后出生的女职工,输出其编号,姓名。SETTALKOFFCLEARUSERCDASCANFOR出生日期>CTOD〔“01/01/60〞〕IF性别=‘女’?编号,姓名ELSELOOPENDIFENDSCANRETU例:B10·PRG翻开‘RCDA’表,只显示3位男性的记录。SETTALKOFFCLEARUSERCDAN=0SCANFOR性别=‘男’WHILEN<3?编号,姓名N=N+1ENDSCANUSERETU§5、4模块化程序设计应用程序一般是多模块程序,包含多个模块程序。模块:一个相对独立的程序段。可以是主程序、子程序、过程或自定义函数。VFP中,模块可以是命令文件,也可以是过程。主程序:调用其他程序而自身不被其它程序调用的程序。子程序:被调用的以·PRG为扩展名的独立的程序文件。

是有相对独立性、通用性的程序。子程序与主程序的区别〔1〕子程序的第一条语句可以是PARAMETERS命令,用来实现参数的传递,主程序中不包含此语句。〔2〕主程序里必须包含调用子程序的语句。子程序的大致结构PARA<参数表><命令序列>RETURN|RETRY一、子程序和参数传递1、子程序的建立、调用和返回建立:MODIFYCOMMAND<程序文件名>|?调用:DO<程序1>[WITH<参数表>][<程序2>]返回:RETURN[<表达式>|TO<程序名>|TOMASTER]2、子程序调用中的参数传递说明:当调用命令含参数时,子程序中一定要有参数说明语句发送数据命令:主程序、调用程序DO<子程序名>WITH<参数表>DO<文件名>|<过程名>(<实参1>,[<实参2>,…])

默认按值传递如果实参是变量,可通过命令重新设置参数传递的方式

SETUDFPARMSTOVALUE|REFERENCE接收数据命令:子程序、被调用程序PARAMETERS<形参变量1>[,<形参变量2>,…]〔私有变量〕LPARAMETERS<形参变量1>[,<形参变量2>,…]〔局部变量〕以上两条命令都是模块程序的第一条可执行命令。〔1〕PARAMETERS出现在它定义的参数被使用前,先定义,后使用〔2〕参数的位置、个数、类型实参类型:常量、变量、一般格式的表达式形参的数目不能少于实参的数目〔3〕主程序中的参数是单个变量:按地址传递表达式或常量:按值传递。主程序:Parameterssonv?sonvSonv=‘son’returnMainv=‘main’Dosonwithmainv?mainvCancel子程序:二、自定义函数和过程1、自定义函数的设计〔1〕定义[FUNCTION<函数名>][PARAMETERS<参数表>]<命令行序列>RETURN<表达式>ENDFUNC说明:如果用一个独立文件形式存储,FUNCTION<过程名>语句可省略;函数名就是程序文件名。说明:〔1〕假设无ENDFUNC,过程结束于下一条PROCEDURE|FUNCTION命令或文件结尾处。〔2〕执行到RETURN语句,那么返回到调用程序〔或命令窗口〕假设缺省RETURN命令,那么在过程结束处自动执行一条隐含的RETURN命令。假设RETURN命令不带<表达式>,那么返回逻辑真.T.〔2〕调用函数名〔参数表〕说明:A、自定义函数能以一个独立的文件存储,也可包含在调用它的程序中作为它的一局部出现;B、自定义函数名不能与VFP的系统函数同名,也不能与内存变量同名;最多由10个字符组成,以字母或下划线开头,可含字母、数字和下划线。2、过程的设计[PROCEDURE<过程名>][PARAMETERS<参数表>]<命令行序列>ENDPROC例:SETTALKOFFCLEA?’这是主程序’DOPROC1RETURNPROCDUREPROC1?’调用过程PROC1’ENDPROCSETTALKON过程返回语句:返回过程的调用处

(1)语句格式:

RETURN[TOMASTER|TO过程]|RETRY(2)语句功能:将控制返回到调用程序中调用命令的下一语句。RETURNTOMASTER:执行到该语句时控制返回到最高层命令文件—主程序。RETURNTO<过程>:使控制返回到指定的过程。RETRY:使控制返回到调用语句本身。3、存放为单独文件的函数与过程的调用过程:VFP中,程序是独立存放在磁盘上的程序文件,使用时用户通过文件名调用并执行。为实现用户的某种目的,很可能要由多个程序完成。〔1〕过程可放在程序文件代码的后面,也可保存在称为过程文件的单独文件里。〔2〕过程文件建立的命令〔.PRG〕:MODIFYCOMMAND〔3〕在调用过程文件中的过程之前先要翻开过程文件翻开过程文件语句VFP系统规定,任何时刻只能翻开一个过程文件,当新的过程文件翻开时,自动关闭原来翻开的过程文件。〔1〕语句格式SETPROCEDURETO<过程文件1>[,<过程文件2>,…][ADDITIVE]〔2〕语句功能翻开一个以过程文件名为名的过程文件。模块调用的格式:调用过程语句:执行已有的过程格式一:使用DO命令:DO〈过程名〉|<过程名>[WITH<参数表>]注:WITH中参数与PARAMETERS中的参数一致。格式二:在名字后加一对小括号<文件名>|<过程名>()说明:格式二可作为命令使用〔返回值被忽略〕,也可作为函数出现在表达式里。这里,<文件名>不能包含扩展名关闭过程文件语句关闭过程文件语句,就是将已翻开的过程文件关闭。〔1〕语句格式CLOSEPROCEDURE或SETPROCEDURETO〔2〕语句功能关闭当前翻开的过程文件。关闭所有翻开的过程文件:SETPROCEDURETO关闭个别过程文件:RELEASEPROCEDURE<过程文件1>[,<过程文件2>,…]4、过程和函数的参数传递过程和函数都是子程序数组在传递时是按地址传递,传递的是数组的首地址。5、接收函数的返回值说明:函数默认返回值是.T.,可通过RETURN命令返回任意值。例:

FUNCTIONPLUS3PARANUMRETURNNUM+3ENDFUNCM=PLUS(33)?PLUS(33)?M

子程序与过程的区别*子程序必须独立于调用程序,以.PRG文件存盘。过程是存放在过程文件〔·PRG〕中。*过程的第一条语句必须是以PROC<过程名>语句开头。*子程序的调用同过程的调用**主程序main.prgsettalkoffpublica,b,cstore1toa,b,c

setproceduretoproc1

dopc1?a

dopc2?b,c

closeprocsettalkonreturn**proc1.prgprocedurepc1a=a*2+1returnprocedurepc2b=b*4+1c=a*2+1dopc3returnprocedurepc3c=c*2+5return

例2:A2·PRGS=0FORI=1TO5K=1

DOBSUBS=S+KENDFOR?‘S=’,SRETU**BSUB·PRG**FORJ=1TOIK=K*J

&&I的阶乘ENDFORRETU

三、变量的作用域变量的属性:类型、取值、作用域变量的作用域:变量在什么范围内是有效或能够被访问的。VFP中,根据变量的作用域分内存变量可分为:公共变量、私有变量、局部变量1、公共变量〔全局变量〕定义格式:PUBLIC<内存变量表>初始值:.F.内存变量:简单变量、数组变量功能:变量的作用域贯穿整个程序,即使程序执行完毕返回到命令窗口它仍然存在。只有当执行CLEARMEMORY、RELEASE、QUIT等命令后,公共变量才被释放。说明:公共变量要先建立后使用命令窗口中直接使用而由系统自动隐含建立的变量是公共变量2、私有变量〔局部变量〕在程序中直接使用〔没有通过PUBLIC和LOCAL命令事先声明)而由系统自动隐含建立的变量是私有变量。功能:作用域是建立它的模块及其下属的各层模块,一旦建立它的模块程序运行结束,私有变量将被删除。3、局部变量〔本地变量〕格式:LOCAL<内存变量表>功能:变量的作用域局限于建立它的模块,不能在上层或下层模块中使用。一旦建立它的程序执行完毕,它也自动地被系统删除说明:局部变量要先建立后使用4、变量屏蔽私有变量和上级程序的变量可以同名。当同名时,在定义私有变量的程序内,将隐藏上级程序的同名变量;返回上级程序时,恢复隐藏的上级同名变量。变量屏蔽语句:PRIVATE<内存变量表>PRIVATEALL[LIKE|EXCEPT<通配符>]功能:隐藏当前程序中某些与上层调用程序中同名的变量,使这些变量的作用范围局限在当前程序内。说明:*局部变量既可用PRIVATE定义,也可不用PRIVATE定义。*假设局部变量不用PRIVATE定义,下层中和上层中同名的变量的操作结果将会带回到上层。5、有关全局变量和局部变量问题〔1〕定义局部变量的好处:节约内存空间,防止重名变量被修改其内容〔2〕PUBLIC屏蔽变量命令例:A25·PRGSTETALKOFFCLEARPUBLICXX=7Y=6Z=5DOCSUB?“X=〞,X,“Y=〞,Y,“Z=〞,Z**7,6,10RETU**CSUB·PRG**PRIVATEX,YX=0X=X+3Y=X+1Z=Z+5?“X=〞,X,“Y=〞,Y,“Z=〞,Z**3,4,10RETU例:A26·PRGSETTALKOFFCLEAR

SETPROCTOPROC3PUBLICX,Y,MSTORE1TOX,YM=0

DOSUB1

?M,X,Y324Z=1

DOSUB2

?X,Y,Z

SETPROCRETU

**PROC3·PRG**PROCSUB1M=1DOWHILEM<=2X=X*M12Y=Y+M24

DOSUB3M=M+1ENDDORETU

PROCSUB2X=X*MY=Y+MRETUPROCSUB3PRIVATEZZ=X+Y?“Z=〞,Z36RETUSETTALKOFFSETSAFETYOFFCLEARPUBLICA,B,CA=1B=2C=3DOSUB1WITHA,B?A,B,C3203RETURNSUB1.PRGPARAMETERSA1,B1B1=10*B120A1=A1+23DOSUB2WITHA1,B1RETURNSUB2.PRGPARAMETERSX,Y

A=4+X7

B=5+Y25?A,B725WAITRETURN

**MAIN.PRGSETTALKOFFCLEARA=1B=2C=3D0SUB1WITHA,B?A,B,C3203RETURN**SUB1.PRGPARAA1,B1B1=10*B120A1=A1+23C1=A1*B160DOSUB2?A1,B1,C1

32018RETURN

**SUB2.PRGPRIVATEA1,B1A1=4B1=5C1=9+A1+B1?A1,B1,C14518RETURNSETPROCTOPROC2SETTALKOFFCLEARST=“0123456789〞STT=“〞DOSUB1WITHST,STTDOSUB2WITHSTT,5SETPROCTORETU**PROC2·PRG**PROCSUB1PARAX,YK=LEN〔X〕DOWHILEK>0Y=Y+SUBSTR(X,K,1)K=K-1ENDDO?YRETUPROCSUB2K=LEN(XX)I=0?DOWHILEK>NSTART=I*N+1??SUBSTR(XX,START,N)I=I+1K=K-NENDDOSTART=I*N+1??SUBSTR(XX,START)RETU例22:A22·PRG

SETTALKOFFPUBLICX1X1=‘中国’Y1=‘反对’Z=‘’DOSUB1WITHZ?X1+’人’+ZSETTALKONRETURN

*SUB1.PRGPARAYPRIVATEX1X1=‘中国共产党’X3=‘台独’Y=X2+X3?X1+YRETURN设有如下主程序和子程序段,请写出N=2,A分别为2和5时的结果

温馨提示

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

评论

0/150

提交评论