《程序设计基础(vfp)第五章程序设计基础.ppt》由会员分享,可在线阅读,更多相关《程序设计基础(vfp)第五章程序设计基础.ppt(54页珍藏版)》请在三一办公上搜索。
1、第 五 章 程序设计基础,5.2 结构化程序设计基础,程序的定义:指将完成某一种功能的一组命令按照一定的逻辑结构和语法规则编写成的一个完整的命令序列。VFP的程序是建立在程序文件里,并存储在磁盘中,执行时将程序文件调入内存。一个结构化程序就是用高级语言表示的结构化算法。程序方式具有自动和连续处理的特点,结构化程序设计基础,一个程序一般包括以下几方面内容:对数据的描述:指定数据的类型和组织形式,即数据结构;(加工对象)对操作的描述:即操作步骤,就是算法;(灵魂)程序设计方法:语言工具和环境。算法是解决“做什么”和“怎样做”的问题,程序中的语句是算法的体现。显然,不了解算法就谈不上程序设计。数据结
2、构+算法+程序设计方法+语言工具和环境程序,建立和编辑程序文件,建立和编辑程序文件可在任何文本编辑软件中进行。但是VFP也提供了文本编辑器,可以建立和编辑程序文件。1菜单方式(新建和打开)选择文件菜单中的新建命令,或选择工具栏中的新建按钮,弹出新建对话框。选择“程序”项,再单击“新建文件”按钮,即打开编辑窗口。新建文件时,默认文件名是“程序1”,扩展名是PRG,存储文件时可重命名文件名,结束编辑可按关闭窗口按钮,或按ctrl+w。如果要打开已存在的程序文件重新编辑,则选择文件菜单的打开命令,或按工具栏中的打开按钮,找到要打开的文件,即可打开。,建立和编辑程序文件,2命令方式 格式一MODIFY
3、 COMMAND 程序文件名|?格式二MODIFY FILE 文本文件名|?说明:两个命令均打开文本编辑器。格式一,默认编辑.PRG程序文件;格式二,编辑任何文本文件,无默认扩展名,可编辑TXT文本文件。选择?时,出现打开对话框,从中选择要打开的文件。可以同时打开多个文本编辑器,同时编辑多个文件,而且可以在文件之间“剪切”、“复制”、“粘贴”。用编辑器编辑的文本格式的PRG 程序文件,称VFP源程序。,建立和编辑程序文件,程序的保存与放弃存盘程序代码输入、编辑后应以文件形式存入磁盘。选择文件菜单中的保存,或另存为命令,输入文件名后单击“保存”。也可以按CTRL+W键结束编辑保存文件。放弃本次编
4、辑,按ESC或CTRL+Q键。,建立和编辑程序文件,程序的运行输入、编辑完的PRG源程序是文本形式的高级语言程序,计算机还不能直接执行,计算机只能独立执行EXE或COM机器语言程序。为了提高程序的运行速度,VFP可以将PRG源程序编译成FXP伪编译程序。FXP程序进行了部分编译,运行时还需要VFP环境的支持。未经编译的PRG源程序,VFP是以解释方式运行。即边编译边运行,运行的同时将.prg文件编译成.fxp文件(磁盘中同时保留.prg和.fxp两种文件)。在PRG文件和FXP文件同时存在的情况下,优先执行FXP文件。,程 序 的 运 行,执行源程序执行PRG 源程序有多种方法:(1)选择程序
5、菜单中的运行命令,在运行对话框中选择要执行的程序文件,单击“运行”按钮。(2)执行当前打开编辑的程序文件,只需单击常用工具栏中的!按钮。(3)在命令窗口,执行运行命令“DO程序文件名”。在执行过程中程序有错误,系统会出现程序错误提示窗口,提示错误语句和错误原因。单击“取消”后,运行返回到程序编辑窗口,修改存盘后再运行。,程 序 的 运 行,编译源程序先在程序编辑窗口打开要编译的源程序。选择程序菜单的编译命令,开始编译。如有错误,出现编译对话框并指出错误类型。编译后生成FXP文件。执行程序时,若有FXP文件就立即执行;若没有FXP文件只有PRG源程序,则解释执行PRG源程序,并同时编译为FXP文
6、件。,5.2.2 程序的三种基本结构,程序设计的三种基本结构:顺序结构、分支结构和循环结构。所有的程序都可以利用这三种结构的组合来实现任何复杂问题的求解。,顺序结构,程序最基本的执行方式,就是按程序中语句的先后顺序依次执行每一条语句,这就是程序的顺序结构。,1辅助命令,注释语句 格式一NOTE 或*格式二&说明:注释语句是非执行语句,对程序注释,帮助阅读理解源程序。格式一,放在一行的开头,对前后程序段进行注释;格式二,放在某条语句的后面对本语句注释。系统初始化命令 格式 CLEAR ALL 说明:清除所有内存变量和数组,关闭所有打开的各类文件,选择1号工作区为当前工作区,使系统恢复到初始状态。
7、,清屏命令 格式CLEAR 说明:清除当前屏幕上所有信息,光标定位在屏幕左上角。信息显示控制命令 格式 SET TALK ON|OFF 说明:有些命令执行后,会在屏幕上返回有关信息,实现与用户“对话”(Talk)。程序中设置为 OFF将关闭对话,有程序控制信息的显示,默认为ON状态。,如:USE RSGZ.DBFbrowSUM 实发工资,基本工资*12 TO SFGZ,NJBGZAVERAGE 基本工资 TO JBGZ?实发工资=,SFGZ?基本工资*12=,NJBGZ?平均基本工资=,JBGZ USE,警告信息显示控制命令 格式 SET SAFETY ON|OFF 说明:为了安全,在执行一些
8、不能再恢复的操作前,系统在屏幕上显示“警告信息”提示谨慎操作。如ZAP命令删除记录,INDEX 命令是否覆盖文件等。设置OFF状态将不作提示直接操作,默认为ON状态。输出文本信息语句 格式 TEXT ENDTEXT 说明:在光标当前位置显示文本信息,TEXT ENDTEXT成对出现,缺一不可。相当于多个?语句,但能控制输出文本的位置。,终止程序执行命令格式 CANCEL 说明:该语句将中止正在运行的程序。在程序中一般与条件语句配合使用,有条件的中止程序执行。返回语句格式RETURN|TO MASTER|TO 说明:结束程序的执行。TO MASTER 直接返回到主程序,如果程序是被另一程序调用,
9、则返回到调用程序,否则返回到命令窗口。,2基本的输入、输出命令,输入命令输入一个字符命令(等待命令)格式:WAITTO WINDOW AT,NOWAITTIMEOUT 功能暂停程序执行,等待用户从键盘输入一键,并继续执行。说明:该命令只能从键盘接收一个字符,选TO短语将接收的字符赋值给内存变量。字符表达式为提示语,缺省为“按任意键继续”例如:wait to a,输 入 命 令,输入字符串命令格式 ACCEPT TO 功能 从键盘输入一个字符串常量赋给内存变量。说明:输入的字符串不用定界符括起来,若使用定界符则成为字符串的内容,输入完按回车结束。例如:accept“请输入姓名:”to name,
10、例:按姓名在xsda中查找职工信息,输 入 命 令,3输入任意类型数据命令格式 INPUT TO 功能 从键盘输入数值型、字符型、日期型、逻辑型、货币型数据给内存变量。说明:输入的常量必须用符号表示出数据类型,输入完按回车结束。如:3.1416”男”2000-10-01.T.$987.65,输入输出命令小结,WAIT 只输入一个字符给内存变量,不用打回车;ACCEPT输入一个字符串给内存变量,字符串不用定界符,回车结束;INPUT 可输入各种类型数据给内存变量,但要加定界符,输入字符时尽量用ACCEPT;这三个命令都是赋值给内存变量,光标位置不可控制。,顺序结构程序设计例子,求圆的面积,半径从
11、键盘输入。SET TALK OFFINPUT 请输入圆的半径值:TO RS=PI()*R*R?SSET TALK ONRETURN,例子:从键盘输入任意一个三位数,并求出其个、十、百位。,clearclear allinput 请输入一个三位数:to ng=n%10b=int(n/100)s=int(n-b*100-g)/10)?个位:,g?十位:,s?百位:,b,clearclear allinput 请输入一个三位数:to nc=str(n,3)g=substr(c,3,1)s=substr(c,2,1)b=substr(c,1,1)?个位:,g?十位:,s?百位:,b,例:两个数交换值,
12、CLEARINPUT 输入第一个数:TO XINPUT 输入第二个数:TO Y?X=,x,y=,YT=XX=YY=T?X=,x,y=,YRETURN,例子:从键盘输入姓名,在rsda中定位记录,并将其的职称改为“讲师”,SET TALK OFFCLEARUSE rsdaACCEPT 请输入要修改记录的姓名:TO xmLOCATE FOR 姓名=xmREPL 职称 WITH 讲师DISPCLOSE ALLSET TALK ONRETURN,5.2.4 分支结构程序设计,程序运行一般情况是顺序执行。但有时根据处理问题的实际情况,可能有两种或多种情况,要根据具体的条件选择其中的一种。对应于程序设计就
13、产生程序的分支结构。,1.单分支结构程序,.F.,格式:(IFENDIF)简单分支语句的格式:IF ENDIF功能说明:若条件为真则执行IF到ENDIF否则执行ENDIF之后的语句。,例5.1 从键盘上输入任意两个数据,请按照从大到小的顺序输出,SET TALK OFFCLEARINPUT 请输入第一个数据:TO AINPUT 请输入第二个数据:TO BIF AB&满足条件两个数据发生交换,否则不执行条件语句 T=A A=B B=TENDIF?A,BSET TALK ONRETURN,例5.2 从键盘输入两个数求最大值,SET TALK OFFclearINPUT 请输入第一个数:TO aIN
14、PUT 请输入第二个数:TO bmax=aif ab max=bendif?最大值为:,maxSET TALK ONRETURN,ab,.T.,Max=a,输入两个数a,b,例5.3 从键盘接收一个字符,如果是小写字母,将其以大写字母后输出,其他字符直接输出。,SET TALK OFFCLEARWAIT 请输入一个字符:TO LIF L=a AND L=z L=UPPER(L)ENDIF?LSET TALK ON,格式:IF ELSE ENDIF 功能说明:若条件为真,执行命令序列1,然后执行ENDIF的后继命令。如果条件为假,且有ELSE子句,执行命令序列2,然后执行ENDIF的后续命令,若
15、无ELSE子句,则直接转到ENDIF之后。,2双分支结构(IFELSEENDIF),注:(1)IF和ENDIF必须配对使用,而ELSE可选。(2)IF、ELSE、ENDIF必须各占一行。(3)可以为关系表达式、逻辑表达式。(4)在语句序列1和语句序列2中可以嵌套IF语句。,例5.4:用选择分支语句,重新编写上例的程序,SET TALK OFFclearINPUT 请输入第一个数:TO aINPUT 请输入第二个数:TO bif ab max=aElse max=bendif?最大值为:,maxSET TALK ONRETURN,例5.5:用选择分支语句,重新编写上例的程序,SET TALK O
16、FFCLEARWAIT 请输入一个字符:TO LIF L=a AND L=z?UPPER(L)ELSE?LENDIFSET TALK ON,use rsdaaccept 输入要查询职工的姓名:to namelocate for 姓名=nameIf found()disp else?查无此人!endifuse,例5.6:在rsda表中按姓名查找职工信息,找到了则显示,找不到给出提示。,3IIF()判断选择函数 IIF()函数具有简单条件分支IF语句的作用,在有些情况下使用更方便快捷。格式 IIF(,)说明:作用同IF语句,当的值为.T时,函数返回的值;否则函数返回的值。、的数据类型可以是字符型、
17、数值型、日期型、日期时间型、货币型、逻辑型,并允许两个表达式的数据类型不同。、也可以是IIF()函数,形成IIF()函数的嵌套。,SET TALK OFFINPUT“请输入所用电量:TO DLIF DL=50 DF=DL*0.5ELSE DF=50*0.5+(DL-50)*0.8ENDIF?“应缴电费为:”+LTRIM(STR(DF,10,2)+元SET TALK ONRETURN,SET TALK OFFINPUT 请输入所用电量:TO DLDF=IIF(DL=50,0.5*DL,0.5*50+0.8*(DL-50)?应缴电费为:+LTRIM(STR(DF,10,2)+元SET TALK O
18、NRETURN,例5.7 请用分支结构语句编程计算电费:不超过50度,每度0.5元;超过50度时,超出部分每度0.8元。,结论:条件函数IIF同样具有逻辑判断功能,SET TALK OFFINPUT 请输入行李重量:TO WIF 1 YF=0.22*W ELSE YF=0.22*40+1ENDIF?应交托运费为:+LTRIM(STR(YF,10,2)+元SET TALK ONRETURN,例5.8 火车托运行李:每人不超过40公斤,每公斤0.22元;超过40公斤时,超出部分每公斤0.40元。填空完成以下程序。,W 40,(W-40)*0.4,例 5.9 根据如下公式,从键盘上输入一个数值,然后
19、求该数的绝对值。,?a,的绝对值是:,bSET TALK ONRETURN,解法一CLEARSET TALK OFFINPUT 输入a的值:to aIF a=0 b=aELSE b=-aENDIF,解法二CLEARSET TALK OFFINPUT 输入a的值:to ab=aIF a0 b=-aENDIF?a,的绝对值是:,bSET TALK ONRETURN,例5.10 求三个数中的最大值的。算法设计:输入三个数:a,b,c;a和b比较,若ab,则max=a,否则max=b;max和c比较,若maxc,则max=c;输出max;结束。,求三个数中的最大值的算法流程图:,SET TALK OF
20、FCLEAR?请输入三个数:INPUT A=TO AINPUT B=TO BINPUT C=TO CIF AB Max=AELSE Max=BENDIFIF MAXC MAX=CENDIF?MAXSET TALK ONRETURN,If嵌套举例,格式:If if else endifElse if else endif Endif,分支结构举例,举例2:编写程序由键盘输入A,B,C三个数,按值的大小顺序显示出来。(三个数比较大小有六种情况,需要六个IF 语句;我们采用另一种算法。先比较任意两个数,并将其中的大数存入内存变量M,小数存入N。再将第三个数与M及N比较得到三个数的大小顺序。画流程图表
21、示此算法。),分支结构举例,*三个数排序.prgSET TALK OFFCLEAR?对三个数排序,请输入三个数:INPUT A=TO AINPUT B=TO BINPUT C=TO CIF ABM=AN=BELSEM=BN=AENDIF,IF CM?C,M,NELSEIF CN?M,N,CELSE?M,C,NENDIFENDIFSET TALK ON,A B C,M N,C,C,C,分支结构举例,SET TALK OFFCLEAR?对三个数排序,请输入三个数:INPUT A=TO AINPUT B=TO BINPUT C=TO CIF AA?C,A,BELSEIF CB?A,B,CELSE?A
22、,C,BENDIFENDIFSET TALK ON,例子,从键盘输入一个成绩,然后判断:不及格(90),CLEARSET TALK OFFINPUT 请输入学生的成绩:TO NIF N60?不及格 ELSE IF N75?及格 ELSE IF N90?良好ELSE?优秀ENDIF ENDIFENDIFSET TALK ONRETURN,多重分支条件语句,多分支结构可以利用 IF 语句的多重嵌套来实现,但程序结构复杂不易阅读。VFP提供了DO CASE语句,可很方便的实现多分支程序结构。格式 DO CASECASE CASE CASE OTHERWISE ENDCASE,DO CASE 语句说明
23、,依次判断每一个 CASE 后面的条件,当判断到一个条件满足,执行该条件下的语句序列,然后转到 ENDCASE 后面的语句执行。如果所有条件都不满足,并选择了OTHERWISE 语句,则执行其后的语句序列,否则不执行任何语句。若有多个条件成立,只能执行到第一个满足条件的语句序列,就转至ENDCASE后面执行。DO CASE语句本身可以嵌套,也可以与IF语句互相嵌套。条件表达式2包含着条件表达式1不成立。,DO CASE 语句举例,SET TALK OFFCLEARINPUT 请输入学生的成绩:TO NDO CASECASE N60?不及格CASE N75?及格CASE N90?良好OTHERWISE?优秀ENDCASESET TALK ONRETURN,程序XTCASE1.PRG,例2:若基本工资大于等于600元,增加工资20%,若小于600元大于等于400元,则增加工资15%,若小于400元则增加工资10%.请根据用户输入的工资,计算出增加后的工资.,程序XTCASE1.PRG,SET TALK OFFCLEARINPUT“基本工资:TO GZDO CASECASE GZ=600GZ=GZ*(1+0.2)CASE GZ=400GZ=GZ*(1+0.15)CASE GZ400GZ=GZ*(1+0.1)ENDCASE?GZSET TALK ONRETURN,