1、江苏省计算机等级考试VFP第三章归纳第 四 讲程 序 设 计考点1:程序文件的建立与执行 程序的建立或修改:modify command 程序文件的扩展名为.prg 程序文件的运行: do 运行程序文件时,系统会对程序文件(.prg)进行编译,生成“伪编译”程序(.fxp),执行程序实际上是执行.fxp文件 程序执行过程中,遇到以下命令作用: CANCEL:终止程序运行,清除所有私有变量,返回到命令窗口 DO:转去执行另一个程序 数据输入输出命令 : 格式1:INPUT 字符表达式 TO 内存变量功能:该命令等待用户从键盘输入数据,当用户回车后,系统将表达式的值存入指定的内存变量注:输入的数据
2、可以是常量、变量,也可以是表达式,但不能不输入任何内容直接按回车键。输入字符串时必须加定界符,输入逻辑型常量时要用圆点定界(如.T. ,.F.),则输入日期时间型常量时要用大括号(如2001-03-01)。例:INPUT 输入二次项系数: TO a INPUT “X= TO x 格式2:ACCEPT 字符表达式 TO 内存变量功能:该命令等待用户从键盘输入字符串,当用户回车后,系统将表达式的值存入指定的内存变量。注:该命令只能接收字符串。用户在输入字符串时不需要加定界符;否则,系统会把定界符作为字符串本身的一部分。如果不输入任何内容而直接按回车键,系统会把空串赋给指定的内存变量。例:ACCEP
3、TTOA 格式3:WAIT 字符表达式 TO 内存变量 WINDOW TIMEOUT 数值表达式功能:该命令显示字符表达式的值作为提示信息,暂停程序的执行,直到用户按任意键或单击鼠标时继续程序运行。注:用来保存用户输入的字符,其类型为字符型。TIMEOUT子句用来设定等待时间(秒)例:WAIT “输入无效,请重输” WINDOW TIMEOUT 5:在VFP主窗口显示一提示窗口,显示信息“输入无效,请重输”,之后程序暂停输入,5秒后或按任意键提示窗口关闭,程序继续执行。考点2:程序基本结构 顺序结构 选择|分支结构 If else endif Do case case OtherwiseEnd
4、Case 循环结构 For .EndFor Do while EndDo Scan.EndScan IF else endif 当条件为.T.时,先执行语句序列1,再执行语句序列3;当条件为.F.时,先执行语句序列2,再执行语句序列3; IF语句可以嵌套,但不能交叉,即最先出现的if和最后出现的endif成对,最后出现的if和最先出现的endif成对例1:下列程序段的输出结果是ACCEPTTOAIFA=123456S=0ENDIFS=1?SRETURNA0 B1 C由A的值决定 D程序出错例2:下列程序运行后,x的值为 30 ,y的值为 -2 。CLEARx=26y=0IF INT(x/2)=
5、x/2 y=mod(x,3) x=x+4ENDIF IF INT(x/3)=x/3 y=mod(x,-4) ENDIF ?x ?y例3:下程序最后在屏幕显示的结果是:Aone Btwo Cthree DfourSET EXACT ONs=“ni”+SPACE(2)IF s=“ni”IF s=“ni”?“one”ELSE?“two”ENDIFELSEIF s=“ni”?“three”ELSE?“four”ENDIFENDIFRETURN DO CASE CASE CASE CASE OTHERWISE ENDCASE 依次判断CASE后的条件是否成立,若某个CASE后的条件成立,则执行其后的语句
6、序列,然后执行ENDCASE后的语句序列;若所有CASE后的条件都不成立,则执行OTHERWISE后的语句序列,然后执行ENDCASE后的语句序列。 只有最先成立的CASE条件后的语句序列被执行 DO CASE和ENDCASE必须成对使用例:执行下列程序后,输出到屏幕上的结果为:ClearStore 5 to a,bStore 1 to c,dd=b2-4*a*cDo case case d0 d=300 ENDCASE ?d DO WHILE LOOP EXIT ENDDO 循环体: 先判断DO WHILE后的条件是否成立,若为.T.则执行循环体,执行到ENDDO时返回DO WHILE重新判
7、断条件是否成立,若为.T.则继续执行循环体;若为.F.则结束循环,转去执行ENDDO后的语句。 LOOP:结束循环体的本次执行,转去DO WHILE重新判断循环条件是否成立 EXIT:结束循环体的执行,转去执行ENDDO后的语句。例1:如下程序显示的结果是 【13】 。 s=1 i=0 do while i=1twotwoSUBSTR(one,i,1)ii1ENDDO?two例3:执行以下程序,屏幕显示为: 10 15 x=8DO WHILE .T. x=x+1 IF x=INT(X/4)*5 ?x ELSE LOOP ENDIF IF x10 EXIT ENDIFENDDO例4:完善下列程序
8、,使其产生10个随机的大写英文字母:CLEARi=1DO WHILE i=65 AND k0y=y+x%10x=int(x/10)ENDDO?yA54321 B12345 C51 D15考点2:程序基本结构FOR 循环变量=初值 to 终值 STEP 步长 循环体 LOOP EXIT ENDFOR循环条件:循环变量=终值 (步长为负) 若循环条件成立,则执行循环体;每执行循环体,循环变量会增加一步长值,并再次判断循环条件是否成立,成立则继续执行循环体,不成立则执行ENDFOR后的语句序列。 步长值可正可负,默认为1. LOOP:结束循环体的本次执行,循环变量增加一个步长值,再次判断循环条件是否
9、成立。 语句序列例1:运行下列程序后显示结果为: 南大信管系 CLEAR C=”南京大学信息管理系” FOR I=1 TO LEN(C)/2 IF I%20 ?SUBS(C,2*I-1,2) ENDIF ENDFOR例2:完善下列程序以显示7 1000以内能被7整除、且含有数字5的所有整数(例如35、56、105等)。FOR n=7 TO 1000 step 7 ch= allt(str(n) IF “5” $ ch ?n ENDIFENDFOR例3:) 完善下列程序,使程序的运行结果如右图所示。CLEARFOR i=1 TO 9 FOR j=1 TO 9 IF i=j ?STR(i,1)+*
10、+STR(j,1)+=+ STR(i*j,2) +SPACE(2) ENDIF ENDFOR ? ENDFOR例4:下列程序用来计算数列2/1,3/2,5/3,155/18,173/19,192/20,的前20项之和。CLEARm=2s=0FOR i=1 to 20 s=s+m/i m= m+i ENDFOR?s 例5:执行下列程序后,输出到屏幕上的结果为:3CLEARcstring=“VisualFoxPro”nresult=0m=len(cstring)FOR n=1 to m c=SUBSTR(cstring,n,1) IF !BETWEEN(ASC(c), ASC(“A”), ASC(
11、“Z”) LOOP ENDIF nresult=nresult+1ENDFOR? nresult考点3:过程或自定义函数 过程定义PROCEDURE 过程名PARAMETERS 形式参数列表 RETURN ENDPROC 形式参数最多27个 RETURN:指定过程的返回值 RETURN:返回值为.T.自定义函数:FUNCTION 函数名PARAMETERS 形式参数列表 RETURN ENDFUNC 过程或自定义函数的调用与执行 格式1: DO 过程名 with 实参1,实参2, 格式2: 过程名(实参1,实参2,) 参数个数和数据类型必须和过程或自定义函数中所定义的参数个数及数据类型一致。
12、打开过程文件的命令: set procedure to 过程名 参数传递的2种方式:按值传递和引用传递 格式如果实参是变量名,地址传递. 实参是常量,值传递. 格式默认按值传递 Set udfparms to value/reference改变格式参数的传递方式,但对格式不起作用 Set udfparms to value 按值传递,形参的改变不会影响实参的取值 Set udfparms to reference 按引用传递,形参改变时实参也随之改变 无论哪种格式,一个参数用()括号括起后,就按照值传递. 无论哪种格式,一个参数前加就按照引用传递. 从变量的作用域划分,内存变量分为全局变量,私
13、有变量,局部变量. 全局变量(PUBLIC) 在任何模块中均可使用,又称公共变量 先定义后使用 例: public x, y 定义后未赋值前其初值为.F. 在命令窗口中直接使用的变量是全局变量 私有变量(private) 在建立它的模块及其下属模块中使用 先定义后使用 例: private x, y 没有通过public和local声明在程序中直接使用的变量是私有变量 局部变量(local) 在建立它的模块中使用,不能在上层或下层模块使用 先定义后使用 例: local x, y 定义后未赋值前其初值为.F.例1:下列程序段执行以后,内存变量 A 和 B 的值是()。CLEARA=10B=20
14、SET UDFPARMS TO REFERENCEDO SQ WITH(A),B &参数是值传送,B 是引用传送?A,BPROCEDURE SQPARAMETERS X1,Y1X1=X1*X1Y1=2*X1ENDPROCA10 200 B100 200 C100 20 D10 20例2:在Visual FoxPro中,有如下程序:*程序名:TEST.PRG *子程序:SUB1 SET TALK OFF PROCEDURE SUB1 PRIVATE X,Y LOCAL X X=数据库 X=应用 Y=管理系统 Y=系统 DO SUB1 X=X+Y? X+ Y RETURN RETURN 执行命令D
15、O TEST后,屏幕显示的结果应是 数据库系统 例3:下列程序段执行以后,内存变量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例4:完善下列自定义函数STR_RV(),要求其功能为将一个字符串进行“反序”。例如STR_RV(“ABCD”)的返回值为“DCBA”FUNCTION STR_RV() PARAMETERS C p=SPACE(0) DO WHILE LEN(C)0 x=ASC( left(C,1) ) IF x127 p=LEFT(c,2)+p c=SUBSTR(c,3) ELSE p=LEFT(c,1)+p c=SUBSTR(C,2 ) ENDIF ENDDO return pENDFUNCTION例5:执行下列主程序后,输出结果为:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1