VFO程序设计复习.doc

上传人:夺命阿水 文档编号:15835 上传时间:2022-06-30 格式:DOC 页数:26 大小:149.50KB
返回 下载 相关 举报
VFO程序设计复习.doc_第1页
第1页 / 共26页
VFO程序设计复习.doc_第2页
第2页 / 共26页
VFO程序设计复习.doc_第3页
第3页 / 共26页
VFO程序设计复习.doc_第4页
第4页 / 共26页
VFO程序设计复习.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《VFO程序设计复习.doc》由会员分享,可在线阅读,更多相关《VFO程序设计复习.doc(26页珍藏版)》请在课桌文档上搜索。

1、VFO程序设计复习1程序设计概述一、程序的概念概念:具有一定功能的计算机能执行的指令的集合。例1:显示表XSDA可编写成如下命令序SET DEFA TO F:表USE XSDALISTCLOSE ALL例2:求a=3,b=2,c=5 求a+b-c=?程序test.prg 代码如下:a=3b=2c=5x=a+b-c?x二、常见的程序设计方法1、 结构化程序设计模块化结构化程序设计是一个面向过程的概念。把一个实际问题分为两局部,即数据和过程。通过动态的程序执行过程来对静态的数据进展处理,得出正确的结果。由VFP命令和程序设计命令的组合,需编制和调试;2、 面向对象的程序设计3、结构化程序设计它是面

2、向过程程序设计的另一种描述,面向过程程序设计有如下特点:整个程序分为假如干个模块,模块之间相衔接,且相对独立。第个模块只有一个入口和一个出口。第个模块都能单独执行,且在有限时间内执行完。采用自顶向下、逐步求精的方法。三、程序三大根本结构1、顺序结构:执行是按命令出现的先后顺序执行。2、分支结构:按给定的条件成立与否来决定程序起向,分单向选择分支、双向选择分支和多路分支。有以下两种 IF 语句DO CASEENDIFENDCASE3、循环结构:程序的执行发生了自下而上的往复,某一程序段将重复执行。有以下三种Do WhileForSCANENDDOENDFORENDSCAN四、算法和流程图算法:解

3、决某一问题的方法与步骤。见教材例。流程图:算法的描述,除用自然语言描述外,计算机领域常用流程图ANSI图和NS图描述。见教材例。例如:某某到某某怎么去?1、 解一元二次方程的算法。Ax2+bx+c=0, 求x2、 求出1-100之间的质数。 X / = 2 到 SQRT(X )2程序的建立和执行一、程序的扩展名:PRG实质:文本文件ASCII编码执行时,会产生编译文件FXP后让计算机执行。二、程序文件的建立和编辑1、命令方式:MODI M 程序名.PRG .PRG可省2、菜单方式;文件 = 新建 = 程序3、项目管理器中建立的方法:建立项目管理器 = 新建程序4、其他方法:其它可编辑文本的软件

4、: 记事本写字板WORD其它程序编辑器注意:希望编写程序之前事先设置好默认目录set defa to 然后我们编写的程序就会自动存储在那个目录中。例如:set defa to d:ksmodi m Test(相当于是:modi m D:kstest.prg) 三、 程序的执行1、命令方式命令格式:DO盘符路径程序名2、菜单方式:“程序菜单-“运行命令在“运行窗口中输入被运行的程序文件名,即可运行程序。四、VFP程序的分类:数学类程序、涉与到表操作的程序如果本程序是涉与到表操作的程序,那么:1、在程序开始局部可以先加语句CLEAR 和 CLOSE ALL2、程序最后可以使用命令CLOSE ALL

5、 3、然后使用RETURN或CANCEL或QUIT 例:找出并显示所有三好生CLEAR CLOSE ALL USE 学生LOCATE FOR 三好生DO WHILE NOT EOF() DISPCONTINUE ENDDO CLOSE ALL RETUREN3顺序程序设计与常用语句一、程序设计中的常用语句1、输入命令1赋值命令命令一:STORE TO 命令二:= 2交互式输入命令注意:输入数据是在程序执行的时候INPUT 提示信息 TO ACCEPT 提示信息 TO WAIT 提示信息 TO TIMEOUT 说明: 提示信息是C型, 它会在屏幕上原样输出 .WAIT命令的功能:暂停程序执行,显

6、示提示信息等待用户按键。Wait命令中输入的只能是一个字符C型。 Input 适用于全部类型内存变量,输入时需要加定界符 Accept只适用于C型,并且C型不加定界符注意:Input和accept在编写程序时语句都一样,只是执行程序do时,主屏幕上要求输入的类型和格式不同。例1:输入a、b、c的值,对2ax+b=c 求 x的值。ClearInput “现在计算2ax+b=c,请输入a的值: to aInput “请输入b的值: to bInput “请输入c的值: to cx=(c-b)/(2*a)?x的值为:,x &比拟使用? x的值为:+str(x,3)有何区别return 例2、查找学生

7、.dbf中的指定记录clearclose alluse 学生listaccept “请输入您想查找的某某: to xmLocate for 某某=XM&或命令 SEEK XMif found()DISPelse ?对不起,没有找到此人endiflistclose allReturn思考:如果accept换成input,输入的时候该怎么输入?例3、删除学生.dbf中的指定记录clearclose alluse 学生listinput “请输入您想删除的记录号: to xdele reco xwait “你想彻底删除这条记录吗?(y/n) to ask if ask=Y or ask=ypacke

8、ndiflistclose all注意区分交换方式和程序方式:有的命令可以在两种状态下执行例如:刚刚的输入命令,但有些命令只能在程序方式下执行例如:循环语句和分支语句3格式输入命令格式一:行,列 say 提示信息格式二:行,列 say 提示信息 get 变量 READ格式三:行,列 say 提示信息 get 变量 default常量功能:在屏幕指定的坐标位置上显示提示信息,然后通过READ命令激活GET子句的变量值。说明:GET后的变量可以是内存变量或当前打开的数据文件中的字段变量,假如是内存变量,应在执行该命令前对内存变量赋值,否如此就必须使用default参数赋初值。输入的值类型应该与初值

9、类型一样。READ命令与GET命令必须配合使用。多个GET命令可以只用一个READ命令配合。如果没有read如此表示只显示内容,不输入值。CLEARUSE 学生APPEND BLANK5,20 SAY “学号 GET 学号5,40 SAY “某某 GET 某某7,20 SAY “性别 GET 性别7,40 SAY “出生年月 GET 出生年月9,20 SAY “入校总分 GET 入校总分9,40 SAY “三好生 GET 三好生READCLEARLISTCLOSE ALLRETURN例2:编程求长方形的面积。CLEAR X=0 &X为内存变量,赋初值Y=0 1,5 SAY “计算长方形的面积2

10、,5 SAY “输入长方形的长: GET X &第2行5列显示提示信息并等待输入3,5 SAY “输入长方形的宽: GET Y &第3行5列显示提示信息并等待输入READ &从键盘输入X,Y的值S=X*Y &计算长方形的面积 ? “长方形的面积:,S &显示长方形的面积 CANCEL思考题1:如将上述例1程序改为按照指定学号来修改记录应该怎样做?(答案见课件后)3、输出命令:非格式输出命令?和?:格式化输出命令行,列 say 表达式说明:行和列都可以是表达式,常常可以使用函数ROW( ) 和 COL( )ROW( )表示返回当前行的行号 COL( )表示返回当前列的列号例1:N=1CH=“VF

11、程序设计N,26 SAY SPACE(60)N+1,26 SAY CH例2:循环输入值cleardime xh(10)store 0 to xh10,10 say 请输入数字: get xh(1)i=2do while i=10row()+1,10 say 请输入数字: get xh(i) i=i+1enddoreadlist memo like xh4、其他程序运行命令1终止程序执行命令 CANCEL 、QUIT 和 RETURNQUIT: 退出程序运行并且退出 Visual FoxproCANCEL : 退出程序运行RETURN: 返回上级程序调用点,如果是主程序就表示退出程序。主程序可缺

12、省此命令返回完毕,即默认使用了return 注意:上述命令执行完后都会自动clear memory。但是如果有数据库和表打开不会自动关闭,所以使用数据库和表后在程序完毕时我们常常需要加命令: close all2清屏命令CLEAR3注释命令 NOTE 、* 和 &注释的含义:程序员对程序语句功能的说明,执行程序的时候不执行注释中的内容,注释只起到一个对语句说明的目的。一般复杂程序中应有30%以上的注释。4TEXT语句:原样输出参考书143例4.155系统设置命令set on/off 或者是set to 1、设置会话状态SET TALK ON/OFF2、设置跟踪状态SET ECHO ON/OFF

13、3、设置打印状态SET PRINTER ON/OFF4、设置定向输出状态SET DEVICE TO SCREEN5、设置准确比拟状态SET EXACT TO ON/OFF6、设置日期格式SET DATE ANSI 7、色绘制系统提供的保护状态SET SAFETY ON/OFF8、设置删除记录标记状态掌握SET DELETED ON/OFF功能:屏蔽或处理有删除标记的记录说明:在命令格式中选择ON时,各命令当不对有删除标记的记录进展操作,但索引除外。系统默认值为OFF思考题1答案:CLEARUSE 学生ACCEPT 请输入需修改记录的学号: TO NUMLOCATE FOR 学号=NUM5,20

14、 SAY 学号 GET 学号5,40 SAY 某某 GET 某某7,20 SAY 性别 GET 性别7,40 SAY 出生年月 GET 出生年月9,20 SAY 入校总分 GET 入校总分9,40 SAY 三好生 GET 三好生READCLEARLISTCLOSE ALLRETURN4顺序结构和分支结构一、顺序结构例1:求圆的面积公式S=R2CLEARINPUT “请输入半径R的值: TO RS=3.1416*R*R?圆面积为: ,SCANCEL二、分支结构选择结构1、IF语句1单向选择:双向选择:IF 条件 IF 条件执行语句执行语句ENDIF ELSE执行语句ENDIF(2)单向选择分支例

15、如:求任意一个数值的绝对值CLEARSET TALK OFFINPUT “请输入数值: TO NIF N=a AND STR1=A AND STR1=Z?SPACE(40)+STR1ELSE ?您输入的不是英文字母 ENDIFENDIF2、多向选择DO CASE CASE CASE OTHERWISE &其它情况ENDCASE说明:OTHERWISE 可以没有.例1:比拟A、B的大小CLEARINPUT “请输入A的值: TO AINPUT “请输入B的值: TO BDO CASE CASE AB ?A 大于BCASE AB?A 小于BCASE A=B?A等于BENDCASE例2:邮局负责邮购

16、小物品规如此如下:50公里与以内收取额外金额5元,50-100公里收取10元,100-200公里收取20元,200-500公里收取40元,其余一律收取50元。CLEARINPUT “请输入您想邮购物品的路程公里数: TO XDO CASE CASE X50 AND X100 AND X200 AND X=500Y=40OTHERWISE Y=50ENDCASE?对不起, 您需要付款: ,Y,元人民币5循环程序设计1、条件循环格式一:DO WHILE 条件命令序列 ENDDO格式二: DO WHILE 条件语句序列LOOP 语句序列EXIT语句序列 ENDDO 要退出循环,需要条件为假的时候条件

17、=.F.时说明:1 LOOP和EXIT 命令一般放在IF条件中,也可以出现在循环体内的任何位置。假如执行循环体时遇到LOOP命令,如此直接返回执行DO命令,测试条件以决定是否继续循环。假如遇到EXIT命令,如此不执行下面的命令序列,直接跳出循环,执行ENDDO后面的命令。2条件表达式的值确定了循环是否继续,当条件表达式的值始终为真即永真循环,如此应使用EXIT命令来控制循环完毕例1:将字符“欢迎进入某某师X学院从屏幕的顶部移至底部CLEARCH=“欢迎进入某某师X学院N=1DO WHILE N=23N,26 SAY SPACE(60)N+1,26 SAY CH T=INKEY(0.2)&等待秒

18、N=N+1ENDDORETURN注:INKEY 功能:等待用户按键或鼠标输入,等待时间由数值表达式确定(单位为秒)返回由按键而产生的一个整数值.例2:实现显示出全部的男生CLEARCLOSE ALLUSE 学生DO WHILE NOT EOF()IF 性别=男DISPENDIFSKIPENDDOCLOSE ALL LOOP循环实例例1:I=0DO WHILE I0 IF Y0 EXIT QUITENDIF ENDIFENDDO ENDDO如果Y0,如此退出本循环如果Y0,如此退出程序,退出VFDO WHILE .T. DO WHILE .T.IF Y0 IF Y0 RETURN CANCELE

19、NDIF ENDIFENDDO ENDDO如果Y0,如此退出程序返回上层如果Y0,如此退出程序,回到VF中上述语句LOOP、EXIT、QUIT、RETURN、CANCEL等也可以在后面讲的其它循环语句中使用。例1:通过键盘输入三角形的边长,假如边长正确,立即在屏幕上显示三角形的面积,假如边长不正确,重新输入边长,假如输入的边长中任意一边为0如此程序立即完毕。CLEAR?现在计算三角型的面积,如果想退出程序请输入0。DO WHILE .T.INPUT “请输入边长a: TO AINPUT “请输入边长b: TO BINPUT “请输入边长c: TO CIF A=0 OR B=0 OR C=0?完

20、毕 RETURNENDIFIF A+B=C OR A+C=B OR B+C=A?错误的三角型,请重新输入!LOOPENDIFS=(A+B+C)/2AREA=SQRT(S*(S-A)*(S-B)*(S-C)?该三角型的面积是:,areaENDDO例2:有如下表:book(书名 C(20),作者 C(8),出版日期 D,内容简介 M)编写程序:查询关于 foxpro 的图书.USE BOOKLOCATE FOR foxpro $ 书名IF ! FOUND()?没有关于foxpro的图书ELSEDO WHILE ! EOF()CLEAR?书名,作者,出版日期?内容介绍 WAIT “是否继续查找?(Y

21、/N) TO MIF M$nNEXITENDIFCONTINUEENDDO?全部显示完成ENDIF2、计数循环FOR 循环变量=初值 TO 终值 STEP 步长语句序列ENDFOR说明: (1)当省略步长值时,系统默认步长值为1.当初值小于终止值时,步长值为正值,当初值大于终值时,步长值为负值.步长值不能为0,否如此会造成死循环. (2)可在循环体内嵌入LOOP和EXIT命令,功能和用法与条件循环中该命令的用法一样.例1:求1100的和SUM=0FOR n=1 TO 100SUM=SUM+nENDFOR?1100的总和为:,SUM使用DO WHILE 实现:SUM=0n=1DO WHILE n

22、 INT(SQRT(I)?I,是质数ENDIF特别: 2是个质数.综上所表示: 完成程序为:CLEAR?2是质数FOR I=3 TO 10FOR J=2 TO INT(SQRT(I)IF MOD(I,J)=0EXITENDIFENDFORIF J INT(SQRT(I)?I,是质数ENDIFENDFOR3、库文件扫描循环SCAN X围 FOR/WHILE 条件语句序列ENDSCAN例1:查询所有入校总分在570以上的人.CLEARCLOSE ALLUSE 学生SCAN FOR 入校总分570DISPENDSCANCLOSE ALL例2:用户可以循环输入并查找入校总分,直到输入的是负数就退出.C

23、LEARCLOSE ALLUSE 学生INPUT “请输入你要查找的入校总分,输入负数如此退出: TO XDO WHILE X=0SCAN FOR 入校总分=XDISPENDSCANINPUT “请输入你要查找的入校总分: TO XENDDO例3:编写程序,对于学生.dbf能够在程序末尾循环插入新记录掌握CLEARCLOSE ALLUSE 学生DO WHILE .T.APPE BLANK5,20 SAY 学号 GET 学号5,40 SAY 某某 GET 某某7,20 SAY 性别 GET 性别7,30 SAY 出生年月 GET 出生年月9,20 SAY 入校总分 GET 入校总分READWAI

24、T 你想继续插入新记录吗?(Y/N) : TO XIF X=N OR X=nEXITENDIFCLEARENDDOCLEARLISTCLOSE ALL例4:编写程序,该程序能够顺序修改表学生.DBF中的所有数据。掌握要求:必须使用 行,列 say . get . 进展数据修改CLEARCLOSE ALLUSE 学生DO WHILE .T. if eof() exitendif5,20 SAY 学号 GET 学号5,40 SAY 某某 GET 某某7,20 SAY 性别 GET 性别7,30 SAY 出生年月 GET 出生年月9,20 SAY 入校总分 GET 入校总分READWAIT 你想继续

25、修改记录吗?(Y/N) : TO XIF X=N OR X=nEXITENDIFCLEARSKIPENDDOCLEARLISTCLOSE ALL4、多重循环例1:输入n的值,求1+1/2!+1/3!+1/4!+.+1/n! 阶乘 n!=1*2*3*4.*(n-1)*n CLEARSUM=0MUL=1INPUT 请输入n的值: TO NFOR i=1 TO N FOR j=1 TO i MUL=MUL*J ENDFOR SUM= SUM+1/MUL ENDFOR?求得的总和为: ,SUM例2:打印九九表方法一:CLEAR FOR A=1 T0 9 FOR B=1 TO A T=A*B?STR(B

26、,1)+“*+STR(A,1)+“=+STR(T,2)+“ ENDFOR? “ENDFORRETURN方法二:CLEAR 1,1 say *for a=1 to 9a+1,1say str(a,1)nextfor b=1 to 9 1,b*3 say str(b,1)for c=1 to b p=c*b b+1,c*3 say str(p,2) next nextcancel例3:图形打印CLEAR for a=1 to 5内循环外循环for c=1 to a?“*next ?nextCancel说明:打印图形时,一般外循环控制打印行数,内循环控制每一行打印图形个数。6数组的应用一、数组的定义

27、DIMENTION 数组名(数值表达式1,数组表达式2.)定义后单元默认值为.F.二、一维数组1、定义一个一维数组:dime a(10) -定义一个10数组,且所有单元默认值为.F.2、赋值:例如:a=a(1)=20 a(3)=2002/09/23a(7)=.T.循环赋值:dime a(10)i=1do while ia(i+1) t=a(i+1) a(i+1)=a(j) a(j)=t endif endforendforlist memo like a例2:将1、2、3、10顺序输入一维数组,实现顺序输出和逆序输出。DIME A10FOR I=1 TO 10AI=IENDFORFOR I=1

28、 TO 10 ?AIENDFORFOR J=10 TO 1 STEP 1?AJENDFOR例3:排序问题 (要求:不一定能编写,但是重点地方能填空,根本方法要能理解)输入5 个数,将它们按照从大到小的顺序排列算法:软件技术支持第263页稳定的算法:插入法排序将一个数据插入到已经排列好的序列中冒泡排序比拟每次产生最大数归并排序两两合并 不稳定的算法:一样数据位置可能交换选择排序通过交换位置,最小的放在第一,次小的第二实现算法:冒泡排序(1) n个数要比拟n-1趟(2) (3) 每趟要比拟的次数为 : n-趟数(4)(3)每次比拟:如果当前数 a(j)大于后一个数 a(j+1) 那么就交换,否如此

29、不交换clear dime a(5)?输入5个数: for i=1 to 5input 请输入: to a(i)endforfor i=1 to 4& 外循环是行(趟数), 内循环是列(比拟次数)for j=1 to 5-Iif a(j)a(j+1)t=a(j+1)a(j+1)=a(j)a(j)=tendifendforendforFOR I=1 TO 5 ?A(I)ENDFOR对N个数排序从小到大clearinput 请问你想对多少个数进展排序? to ndime a(n)?请输入,n,个数: for i=1 to ninput 请输入: to a(i)endforfor i=1 to n-

30、1for j=1 to n-iifa(j)a(j+1)t=a(j+1)a(j+1)=a(j)a(j)=tendifendforendfor算法二:每次比拟将当前数和最后一个数据比clearinput “请问你想对多少个数进展排序? to ndime a(n) ?请输入,n,个数: for i=1 to ninput 请输入: to a(i)endforfor i=1 to n-1for j=1 to n-iif a(j)a(n-i+1)t= a(n-i+1)a(n-i+1)=a(j)a(j)=tendifendforendforlist memo like a算法三:clearinput “请

31、问你想对多少个数进展排序? to ndime a(n)?请输入,n,个数: for i=1 to ninput 请输入: to a(i)endforfor i=1 to n-1for j=1 to n-iif a(j)a(n-i+1)t= a(n-i+1)a(n-i+1)=a(j)a(j)=tendifendforendforlist memo like a7子程序、过程和自定义函数一、子程序a1.prg ?* ? ?$ do a2 do a3 return?# ?999 return思考:以上程序运行后结果是什么? *$999# 说明:1、如果将或者的return语句改成cancel,那么程序当执行到cancel的时候就会完毕,不返回2、如果将的return语句改成return to master想想结果会怎么样呢?请先看看书 P169页二、变量的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号