您好,欢迎访问三七文档
第三章程序设计基础一、知识点:1、VFP命令的两种执行方式:交互方式和程序方式。2、程序与程序文件1)程序:完成某项指定的任务而须执行的命令序列。2)程序文件:以文件的形式存储在磁盘上的命令序列。3、结构化程序设计的三种基本结构.1)顺序结构:简单的输入语句(如INPUT、ACCEPT、WAIT)。赋值语句(=、STORE、REPLACE、SCATER、GATHER)。简单的输出语句(?、??)。辅助语句(CLEAR、SUSPEND、CONTINUE、CANCEL、NOTE|*、&&)。环境设置语句(如:、SETTALKON/OFF等)2)选择结构(IF~ENDIF、IF~ELSE~ENDIF、DOCASE~ENDCASE)3)循环结构(DOWHILE~[loop]~[exit]~ENDDO、SCAN~ENDSCAN、FOR~ENDFOR)4、多种结构嵌套的原则:只能包含,不能交叉。5、子程序:相对与主程序而言的一个独立的程序文件,其建立方法与建立程序文件的法相同。子程序的调用与返回:调用:DO文件名[WITH参数列表]返回:RETURN[TOMASTER][表达式]6、过程与过程文件1)过程:以PROCEDURE过程名开头,以ENDPROC结尾的子程序段。2)过程文件:由若干个过程或自定义函数组成,以文件形式保存在外存的.prg文件;使用时要打开该文件,然后选择其中的过程或函数调用,不用时要关闭。3)过程文件的打开:SETPROCEDURETO过程文件名4)过程文件的关闭:SETPROCEDURETO或CLOSEPROCEDURE7、参数的传递及作用域1)利用内存变量的属性传递参数内存变量的属性小结类型特点PUBLICPRIVATE(包括自然变量)LOCAL作用域(可见性)从定义处起有效从定义处起及下级子程序只在定义块中可见传递方向双向(向上、向下)单向(由主到子程序)不传递生存期整个应用系统(VFP环境中)从定义处起及下级子程序中随定义块执行结束而释放特殊作用用于参数传递或结果传递屏蔽上级程序中的同名变量屏蔽上级程序中的同名变量说明子程序中定义的全局变量,返回主程序时可见子程序中定义的自然变量,返回主程序时不可见只在本块中可见,上下级中均不可见2)利用DO文件名WITH参数表达式列表传递参数传递参数命令格式:DO文件名WITH参数表达式列表接收参数命令格式:PARAMETER变量列表参数传递与接收的规则:(1)接收参数的命令必须出现在被调用程序(子程序)中的第一行;(2)当WITH参数表达式列表中是简单内存变量列表时,称为传址或引用。这时,主调程序中的内存变量被隐含起来,其值随PARAMETER中对应变量的值的变化而变化;(3)当WITH参数表达式列表中是内存变量表达式列表或当个内存变量用圆括号括起来(即为明表达式)时,称为传值。这时,主调程序中的内存变量不被隐含,其值也不随PARAMETER中对应变量的值的变化而变化;(4)对过程而言,传址或传值不受SETUDFPARAMSTOVALUE/CONFERENCE的影响。因为它是针对自定义函数的。8、自定义函数1)定义自定义函数可以是一个独立的命令文件(.PRG),也可以放在一个过程文件中。2)建立FUNCTION自定义函数名[PARAMETER形式参数列表[语句序列]ENDFUNC与过程不同的是必须用RETURN表达式返回一个值。3)自定义函数的调用与参数传递调用形式:自定义函数名([〈参数表达式列表〉])参数传送:既可以用传值方式,也可以用引用方式。具体规则如下:(1)如果变量在〈参数表达式列表〉中是以表达式的形式出现,那么是传值方式;(2)如果变量在〈参数表达式列表〉中是以单变量的形式出现,那么取决于SETUDFPARAMSTOVALUE/CONFERENCE的设置(缺省为传值方式);(3)无论SETUDFPARAMSTO可以在单变量前冠以@,以强制传址。如:S(@A,B,C)二、要点与难点1、INPUT、ACCEPT与WAIT这三个与输入有关的命令有何不同?INPUT命令可接受数值型、字符型、日期型等数据类型的输入,在输入时应根据数据类型加相应的定界符。ACCEPT命令只能接受字符串的输入,在输入时不必加定界符。WAIT命令只能接受单字符的输入,常用于表示程序是否继续、是否中断或是否结束的语句。2、RETURN、RETRY、CANCEL和QUIT这四个命令有何不同?RETURN命令:指的是返回到调用行的下一行。RETRY命令:返回到调用行本身,可实现程序的重复调用。CANCEL命令:中断、异常结束。并返回到系统命令窗口。QUIT命令:返回到操作系统。3、SCATTER[FIELDS字段名列表]TO数组名4、GATHERFROM数组名5、常见的环境设置语句:SETDEFAULTTO文件路径:将文件路径设置为系统缺省的路径。SETCONSOLEON/OFF:激活或废止从程序中向VFP主窗口或活动的用户自定义窗口的输出。SETDELETEON/OFF:决定是否忽略表中已做过删除标记的记录。SETEXACTON/OFF:决定字符串比较运算符“=”两边内容是否必须完全匹配,缺省是不必完全匹配。SETTALKOFF/ON:关闭或打开系统交互对话显示方式。缺省为打开显示。SETFILTERTO条件:指定访问当前表中记录时必须满足的条件。6、FORI=XTOYSCAN语句系列与语句系列有何不同?ENDFORENDSCAN前者主要处理普通内存变量循环有关的程序;后者主要处理表中满足条件的记录循环有关的程序。7、内存变量的属性有那几种?它们间有何不同?参见上表。8、利用DO文件名WITH参数表达式列表传递参数与自定义函数中的参数传送有何不同。前者传递参数是在主程序与子程序之间进行调用和传递,可分为传值和引用两种方式:引用:WITH后的参数表达式列表是内存变量列表时,每个内存变量的值传给PARAMETERS中对应变量,调用程序中的变量被隐藏。当被调用的程序中形参的值发生改变时,调用程序中的变量也跟着发生相应的变化。传值:WITH后的参数表达式列表是内存变量表达式或用括号将单个变量括起来时,每个内存变量表达式的值传给PARAMETERS中对应变量,调用程序中的变量不被隐藏。当被调用的程序中形参的值发生改变时,调用程序中的变量不会跟着发生相应的变化。后者是在函数内部实行变量间的参数传送,也有传值和引用两种方式。它调用方式为:自定义函数名([参数表达式列表])若参数表达式列表中以表达式出现,则是以传值方式传送;若参数表达式列表中以内存变量的形式出现,则缺省采用传值方式,若要采用引用方式,需在参数变量前加@。9、程序设计中常用的函数有:(1)数值函数INT(X/Y)、MOD(X,Y)、X%Y、X-INT(X/Y)*Y(2)字符串函数SUBSTR(S,N1,N2)、LEN(S)(3)日期与时间函数:DATE()、DTOC(D)、YEAR(D)、MONTH(D)、DAY(D)、DOW(D)、CDOW(D)。(4)转换函数UPPER(C)、LOWER(C)、CTOD(S)、DTOC(D)、ASC(C)、CHR(N)、STR(N,N1,N2)、VAL(S)(5)数据库函数:FCOUNT()字段个数函数、FIELD()字段名函数、BOF()、EOF()、DELETED()、RECCOUNT()、RECSIZE()、RECNO()、(6)IIF(条件表达式,满足条件时所取的值、不满足条件时所取的值)(7)测试函数:FOUND()测试是否找到相应的记录。10、程序设计的常用算法:总原则:变量必须采用“先定义后使用”的原则,程序语句必须有输入和输出语句;函数采用有“先入口后出口”的原则。条件或循环语句必须配套使用,即IF…ENDIF、FOR…ENDFOR。1、累加:通常采用下列步骤(1)S=初值(2)循环开始:此时需定义一个循环变量,一般采用I或J,同时大多采用FOR……ENDFOR语句来完成。(3)S=S+A(4)循环结束(5)输出累加合计值2、累乘:通常采用下列步骤(1)T=初值(2)循环开始:此时需定义一个循环变量,一般采用I或J,同时大多采用FOR……ENDFOR语句来完成。(3)T=T*A(4)循环结束(5)输出累乘积值3、字符串的粘合:通常采用下列步骤(1)S=””或S=SPACE(0)(2)循环开始:此时需定义一个循环变量,一般采用I或J,同时大多采用FOR……ENDFOR语句来完成。(3)S=S+A或S=A+S前者采用字符串的顺序粘合,后者采用字符串的倒序粘合。(4)循环结束(5)输出字符串S4、自定义函数:通常采用下列步骤(1)PARAMETER形参数列表(2)程序语句(3)RETURN参数:参数省略表示不带参数返回。三、程序阅读题。阅读下列程序,写出运行结果。1、SETTALKOFFM=3DOWHILEM10N=2DOWHILENMIFINT(M/N)=M/NEXITENDIFN=N+1ENDDOIFN=M?MENDIFM=M+1ENDDOSETTALKON2、设N、P的输入值分别为6,3。注:字符”A”的ASCII码为65。SETTALKOFFCLEARINPUTN=TONINPUTP=TOPFORI=1TON?SPACE(NI+1)IFI=PFORJ=1TO2*I1??CHR(ASC(A)+J1)ENDFORELSEFORJ=1TO(2*I1)(IP)??CHR(ASC(A)+J1)ENDFORENDIFENDFORSETTALKON3、注:字符”A”的ASCII码为65。SETTALKOFFCLEARC=一二三四五六七八九十B=ABCDR=0L=LEN(B)FORI=1TOLW=SUBSTR(B,I,1)D=ASC(W)+R-65S=IFD10S=SUBSTR(C,2*D+1,2)ELSES=SUBSTR(C,2*MOD(D,10)+1,2)ENDIF?W+-----+SR=R+11ENDFORSETTALKON4、设M的值分别为:12345,205354,105075,123450SETTALKOFFS=0DOWHILE.T.CLEARINPUTM=TOMN=MDOWHILE.T.R=N-INT(N/10)*10IFR=0S=S+1ENDIFN=INT(N/10)IFN=0EXITENDIFENDDOIFS1EXITENDIFENDDO?SSETTALKON5、SETTALKOFFA=ABCDEFGHIJKLMNOPQRSTUVWXYZB=LEN(A)X=X-Y=Y-I=1DOWHILEI=BJ=IX=X+SUBSTR(A,I,1)IFI/2=INT(I/2)Y=Y+SUBSTR(A,I,1)I=I+1LOOPENDIFI=I+JENDDO?X?Y6、设M的值为:10SETTALKONCLEARINPUTM=TOMI=1S=0?DOWHILEI=MIFZS(I)IFI*2=M??STR(I*2,5)S=S+1ELSEEXITENDIFENDIFI=I+1ENDDO?S=+STR(S,3)SETTALKON****ZS.PRG****PARAXJ=2DOWHILEJXIFINT(X/J)=X/JEXITENDIFJ=J+1ENDDOIFJ=XRETURN.T.ELSERETURN.F.ENDIF7、设N,M的值分别为6,8。SETTALKOFFCLEARINPUTN=TONINPUTM=TOMX=MAX(N,M)FORI=XTOM*NIFMOD(I,M)=0ANDMOD(I,N)=0Y1=IEXITENDIFENDFOR?Y1=+ALLTRIM(STR(Y1,19))+,Y2=+ALLTRIM(STR(M*N/Y1,19))SETTALKON8、N值为4,字符”A”的AS
本文标题:VFP程序设计基础
链接地址:https://www.777doc.com/doc-3369397 .html