第2章VFP程序设计基础.ppt
第第2 2章章 程序设计基础程序设计基础4.1 4.1 程序文件的建立与执行程序文件的建立与执行4.2 4.2 结构化程序设计结构化程序设计4.3 4.3 简单的输入、输出命令简单的输入、输出命令4.4 4.4 过程与过程调用过程与过程调用4.1 4.1 4.1 4.1 简单的输入、输出命令简单的输入、输出命令简单的输入、输出命令简单的输入、输出命令(1)input命令格式:格式:input“提示信息”to 功能:功能:接收任意类型的数据,输入数据时需要输入定界符。以回车符结束输入。(2)accept命令格式格式:accept“提示信息”to 功能:功能:只能接收字符型数据,输入数据时不需要输入定界符。以回车符结束输入。(3)wait命令格式:格式:waitto 功能:功能:接收单个字符。输入一个字符后,自动结束命令。4.2 4.2 4.2 4.2 程序文件的建立与执行程序文件的建立与执行程序文件的建立与执行程序文件的建立与执行(1)创建程序文件的格式:modify command(2)修改程序文件格式:modify command(3)执行程序文件格式:do 程序文件的扩展名是.prg1.Modify Command1.Modify Command命令建立的文件的默认扩展名是命令建立的文件的默认扩展名是 A)prgB)app C)cmd D)exe2.2.在在VFPVFP中,用于建立或修改程序文件的命令是中,用于建立或修改程序文件的命令是A)MODIFY B)MODIFYCOMMANDC)MODIFYPROCEDURE D)上面B和C都对3.3.欲执行程序欲执行程序temp.prgtemp.prg,应该执行的命令是,应该执行的命令是A)DO PRG temp.prg B)DO temp.prgC)DO CMD temp.prg D)DO FORM temp.prg2.2 2.2 2.2 2.2 结构化程序设计结构化程序设计结构化程序设计结构化程序设计1.1.选择结构选择结构(1)条件语句 IFELSEENDIF(2)分支语句 DO CASEENDCASE2.2.循环结构循环结构(1)DO WHILEENDDO(2)FORNEXT|END FOR(3)SCANENDSCAN1.1.选择结构选择结构(1)条件语句 IFELSEENDIF语句序列ENDIF的下一条语句YN条件表达式命令序列1命令序列2ENDIF后面的语句条件表达式TF1 1.有下程序,请选择最后在屏幕显示的结果:SET EXACT ONs=ni+SPACE(2)IF s=ni IF s=ni?one ELSE?two ENDIFELSE IF s=ni?three ELSE?four ENDIFENDIFRETURNAone Btwo Cthree Dfour例:试编写一个用户登录程序,对用户密码进行校验,假设用户密码为1234,如果密码正确,显示当前日期时间,否则显示“密码错误”。CLEAR ACCEPT“请输入密码:”TO passwordIF password=1234?当前时间:,date(),time()ELSE?“密码错误!”ENDIF(2 2)分支语句)分支语句 DO CASEDO CASEEND CASEEND CASE功能:依次判断CASE后面的条件是否成立。当发现某个CASE后面的条件成立时,就执行它后面的命令序列,并结束DO CASE语句,继续执行ENDCASE后面的命令。DO CASE CASE条件表达式1 命令序列1 CASE条件表达式2 命令序列2 CASE条件表达式n 命令序列N OTHERWISE 命令序列N+1ENDCASE例:编程计算分段函数的值。例:编程计算分段函数的值。input 输入X的值 to xdo case case x0?2*x-1 case x=3?x+1 otherwise?5*x-3endcase有如下命令序列,其功能是根据输入的考试成绩显示相应的成绩等级。请编写程序,用DO CASE型分支结构实现该命令程序的功能。set talk offclearinput请输入考试成绩:to chjdj=iif(chj=90,“优秀”,”通过)?成绩等级+djset talk on(1)DO WHILEENDDO2.2.循环结构循环结构DO WHILE EXITLOOPENDDO EXIT:直接跳出循环,执行ENDDO后面的语句。LOOP:结束本次循环,返回到循环起始语句,重新判断循环条件。“EXIT”和“LOOP”命令可以放在循环体内的任意位置,而且这两个语句只能用只能用在循环体中在循环体中,不能单独使用,并且常与条件判断语句相结合。DO WHILE和ENDDO必须成对使用。例:试编写程序,求 的值。STORE 0 TO sumSTORE sum+1 TO sumSTORE sum+2 TO sum STORE sum+100 TO sumCLEARsum=0i=1DO WHILE i=100 sum=sum+i i=i+1ENDDO?sumRETURN4.下列程序显示的结果s=1i=0do while i0 y=x%10+y*10 x=int(x/10)ENDDO A)3456 B)34567 C)7654 D)76543 2.2.下列程序段执行以后,内存变量y的值是:CLEARX=12345Y=0DO WHILE X0y=y+x%10 x=int(x/10)ENDDO?yA54321 B12345 C51 D15 3.下列程序段执行以后,内存变量y的值是:x=76543 y=0DO WHILE x0 y=x%10+y*10 x=int(x/10)ENDDOA)3456 B)34567 C)7654 D)76543 5.执行下列程序,显示的结果是 one=WORK two=a=LEN(one)i=a DO WHILE i=1 two=two+SUBSTR(one,i,1)i=i-1 ENDDO?two(2 2 2 2)FORENDFOR|NEXTFORENDFOR|NEXTFORENDFOR|NEXTFORENDFOR|NEXT格式:FOR=TO STEP ENDFOR|NEXT例:例:采用采用FORFOR循环语句,计算循环语句,计算 的值。的值。SET TALK OFFCLEARsum=0FOR i=1 TO 100 sum=sum+i ENDFOR?”sum=”,sumSET TALK ONRETURN思考:1.编程计算,100以内偶数的和,即 2+4+6+8+100的值。2.编程计算,100以内奇数的和,即 1+3+5+100的值。1.下列程序段执行时在屏幕上显示的结果是 DIMEa(6)a(1)=1a(2)=1fori=3to6a(i)=a(i-1)+a(i-2)next?a(6)A)5B)6C)7D)8(3 3 3 3)SCANENDSCANSCANENDSCANSCANENDSCANSCANENDSCANSCAN SCAN FOR FOR条件表达式条件表达式 命令组 LOOP EXIT ENDSCANENDSCAN记录指针自动、依次地在当前表的指定范围内满足条件的记录上移动,对每一条记录执行循环体内的命令。rest:从当前记录开始到表尾的所有记录。next:从当前记录开始的连续n条记录。record 记录号为n的一条记录。all:缺省值,所有记录。1.在Visual FoxPro中,如果希望跳出SCAN ENDSCAN循环体、执行ENDSCAN后面的语句,应使用()。A)LOOP语句 B)EXIT语句C)BREAK语句D)RETURN语句2.在Visual FoxPro中,可以使用 【8】语句跳出SCAN.ENDSCAN 循环体外执行ENDSCAN 后面的语句。3.在命令窗口输入并执行命令“LIST名称”后在主窗口中显示:下列程序段的输出结果是()。GO 2SCAN NEXT 4 FOR LEFT(名称,2)=电IF RIGHT(名称,2)=线LOOPENDIF?名称ENDSCANA)电话线B)电冰箱C)电冰箱电线D)电视机电冰记录名名称1电视机2计算机3电话线4电冰箱5电线4.在命令窗口输入并执行命令“LIST名称”后在主窗口中显示:下列程序段的输出结果是记录号名称1电视机2计算机3电话线4电冰箱5电线GO 2SCAN NEXT 4 FOR LEFT(名称,2)=电 IF RIGHT(名称,2)=线EXIT ENDIFENDSCAN?名称 A)电话线B)电冰箱C)电冰箱电线D)电视机电冰3.下面程序计算一个整数的各位数字之和。在下划线处应填写的语句SET TALK OFF INPUT”x=”TO x s=0 DO WHILE x!=0 s=s+MOD(x,10)ENDDO?s SET TALK ON A)x=int(x/10)B)x=int(x%10)C)x=x-int(x/10)D)x=x-int(x%10)4.4 模块与模块调用模块与模块调用(1 1)过程的定义)过程的定义过程说明语句的格式:PROCEDURE|FUNCTION RETURNENDPROC|ENDFUNCRETURN:终止程序、过程或函数的运行,返回调用程序并返回表达式的值。若return命令不带表达式,则返回逻辑真.T.接收参数命令格式:接收参数命令格式:PARAMETERS PARAMETERS 被其他模块调用的模块称为子程序。子程序。调用其他模块而没有被其他模块调用的模块称为主程序主程序。VFP中模块可以是命令文件,也可以是过程。格式格式1:1:DODO|WITHWITH 说明:实参是变量,按说明:实参是变量,按引用引用传递参数。传递参数。(2 2)模块的调用)模块的调用格式格式2:2:|()说明:说明:默认为按值值传递参数。改变参数传递方式的命令:SET UDFPARMS TO VALUE|REFERENCE SET UDFPARMS TO VALUE|REFERENCE提示:用括号括号括起来括起来的实参都是按值值传递。过程调用需要它所在的文件处于打开状态。下列程序段执行以后,内存变量A和B的值是 CLEAR A=10 B=20 SET UDFPARMS TO REFERENCE DO SQ WITH(A),B?A,B PROCEDURE SQ PARAMETERS X1,Y1 X1=X1*X1 Y1=2*X1 ENDPROC A)10 200 B)100 200 C)100 20 D)10 20 下列程序段执行以后,内存变量X和Y的值是CLEARSTORE 3 TO XSTORE 5 TO YPLUS(X),Y)?X,YPROCEDURE PLUSPARAMETERS A1,A2A1=A1+A2A2=A1+A2ENDPROCA8 13 B3 13 C3 5 D8 5 下列程序段执行的结果是:X1=20X2=30SETUDFPARMSTOvalueDOtestWITHx1,x2?x1,x2PROCEDUREtestPARAMETERSa,bX=aa=bb=xENDPROA)3020B)3020C)2020D)2030变量的作用域指变量的有效范围。VFP中变量按作用域分为:公共变量(全局变量)、私有变量、局部变量。公共变量(public):在任何模块中都可以使用。公共变量一旦建立就一直有效,只有当执行clear memory、release、quit等命令后才被释放。私有变量(private):可以在建立它的模块和下层模块中使用。建立它的模块程序运行结束后,自动清除。局部变量(local):只能在建立它的模块中使用。用命令建立变量后,为变量赋值逻辑假.F.。(3 3)变量的作用域)变量的作用域在VisualFoxPro中,有如下程序:*程序名:TEST.PRGSETTALKOFFPRIVATEX,YX=数据库Y=管理系统DOsub1?X+YRETURN*子程序:sub1LOCALXX=应用Y=系统X=X+YRETURN执行命令DOTEST后,屏幕显示的结果应是