您好,欢迎访问三七文档
1当今世界上两大计算机程序设计的方法面向过程的结构化程序设计、面向对象程序设计本章节为VFP的重点与难点部分注重理解,掌握结构,灵活运用2目录7.1创建、修改和运行应用程序7.2VFP基本语法结构7.3数组7.4过程和用户自定义函数7.5变量的作用域7.6综合应用37.1创建、修改和运行应用程序7.1.1创建应用程序(3种方式)一、VFP系统菜单创建文件|新建|程序|创建新文件[注]创建的文件不在项目中二、项目管理器创建代码|程序|新建[注]创建的文件在项目中三、命令窗口直接输入方式Modifycommand[程序名][注]创建的文件在默认位置[注]程序的扩展名为:.PRG47.1.2修改程序(4种方式)一、VFP系统菜单文件|打开|选择程序二、项目管理器代码|选择程序|修改[注]该程序应在项目中三、命令窗口输入Modifycommand[程序名][注]该程序应在默认位置四、命令窗口输入Modifycommand?显示对话框57.1.3运行程序(3种方式)一、VFP系统菜单程序|运行|显示对话框,选择程序二、项目管理器代码|选择程序|运行[注]该程序应在项目中三、命令窗口输入DO文件名[注]如果不指明文件的位置,则执行默认位置的程序;如果程序不在默认位置,必须加路径。例如:Dod:\项目\p2.prg67.2VFP基本语法结构在程序设计语言中,程序控制是程序设计语言的精髓所在,在结构化程序设计中,程序一般采用3种结构组成:顺序结构条件分支结构循环结构77.2.1程序中常用的命令1、最常用的屏幕输出命令:??数据1,数据2,…&&输出前先换行??数据1,数据2,…&&接着上一行数据输出2、清除屏幕命令命令格式:CLEAR[ALL]命令功能:清除屏幕注:使用ALL将不清除屏幕,而是释放所有内存变量、数组、用户定义的菜单和窗口、关闭所有打开的表、索引等文件;83、注释命令命令格式一:NOTE注释内容命令格式二:*注释内容命令格式三:&&注释内容命令功能:注解,系统不对其作语法检查注:NOTE注释内容和*注释内容必须写在每一行的开头&&注释内容可以写在每一行的开头,也可以写在命令的后面94、运行中断和结束命令命令格式一:QUIT功能:关闭所有文件,并结束VFP系统的运行,返回到Windows桌面。命令格式二:CANCEL功能:终止程序的执行,返回到命令窗口。命令格式三:RETURN功能:结束所在程序的执行5、赋值命令命令格式:STORE表达式TO变量1,变量2……功能:将数据存入变量、数组、数组元素中。11程序交互命令1、等待命令WAIT格式:WAIT[提示信息][TO内存变量][WINDOW[AT行,列]][TIMEOUT秒]功能:程序执行到该命令时,显示[提示信息],然后等待用户从键盘上输入一个字符,并将该字符输入到指定的内存变量中。例:wait“按任意键继续”timeout6&&超过6秒系统终止该命令的执行,执行下面的命令。wait“按任意键继续“&&按任意键终止该命令的执行,执行下面的命令。wait“按任意键继续”window&&显示一个窗口,其中有提示信息。wait“按任意键继续”windowat5,10&&指定窗口的位置122、输入命令INPUT格式:input[提示信息]TO内存变量功能:暂停程序运行,等待键盘输入数据,当键入回车符后,继续执行下面的命令。可以输入数值型数据,也可以输入字符型数据,字符型数据必须加引号。例:input输入数据:tovname3、接受命令ACCEPTACCEPT[提示信息]TO内存变量只能接受字符型数据,输入时不需要加引号。137.2.2顺序结构程序设计按语句排列的先后顺序,依次逐条执行。例7-1,显示学生表中任意一个学生的姓名和系名ClearUsexsInput输入记录号:torGor?xh,xmusereturn14例7-2程序运行结果?inputentera:toainputenterb:tob?a=+ltrim(str(a)),b=+ltrim(str(b))c=aa=bb=c?a=+ltrim(str(a)),b=+ltrim(str(b))输入3给a,输入4给b显示:a=3b=4a=4b=3157.2.3分支结构程序设计条件分支根据条件的测试结果执行不同的操作。2种命令:IF…ELSE…ENDIFDOCASE…ENDCASE一、IF…ELSE…ENDIF格式:IF条件表达式命令组ENDIFIF条件表达式命令组1ELSE命令组2ENDIF当条件表达式结果为.T..时,执行命令组1。当条件表达式结果为.F.时,执行命令组2。执行完组1或组2后,执行ENDIF后面命令。通常,使用于只有两个分支的情况。当条件表达式结果为.T..时,执行命令组。执行完,执行ENDIF后面命令。当条件为.F.时,执行ENDIF后面命令。16例7-if:输出2个数中大的数inputentera:toainputenterb:tobifab?大的数是:,aelse?大的数是:,bendif17If嵌套IF条件表达式命令组1ELSE命令组2ENDIF这里的命令组还可以是if语句f(x)=1x00x=0-1x0编程计算分段函数:Input“enterx:“toxIfx0y=1elseifx=0y=0elsey=-1endifendif?y18二、DOCASE…ENDCASE格式:DOCASECASE条件表达式1命令序列1CASE条件表达式2命令序列2………………[OTHERWISE其他命令序列]ENDCASE•从第一个CASE开始,判断条件表达式的值是否为.T.•当遇到第一个结果为.T.的CASE表达式,就执行它后面的命令序列•然后执行ENDCASE后面的命令。•若所有CASE表达式都为.F.,则执行OTHERWISE后面的命令序列。•通常,用于多于两个分支的情况19DOCASEENDCASE条件1命令组1条件2命令组2条件n命令组n其他命令组20例7-case,根据分数输出等级。cj=90输出“优”75=cj90输出“良”60=cj75输出“合格”cj60输出“不合格”input输入成绩:tocjdocasecasecj=90?优casecj=75.and.cj90?良casecj=60.and.cj75?合格otherwise?不合格endcase21分支结构程序举例1、编写程序,实现功能为:判断一个数的奇偶性。INPUT请输入数据:TOCIFC%2=1?STR(C)+是奇数ELSE?STR(C)+是偶数ENDIF222、求一元二次方程的根。Inputa=?toaInputb=?tobInputc=?tocd=b^2-4*a*cIfd=0x1=(-b+sqrt(d))/2/ax2=(-b-sqrt(d))/2/a?该方程的解为:?x1=,x1,x2=,x2Else?该方程无实数解。Endifax2+bx+c=0判别式d=b2-4ac=0x1=x2=adb2adb2237.2.4循环结构程序设计循环是重复执行一组语句若干次,其中被循环执行的一组语句称为循环体。在VFP中,实现循环的语句主要有三种:FOR……ENDFORDOWHILE……ENDDOSCAN……ENDSCAN24一、FOR……ENDFOR语句格式:FOR循环变量=初值TO终值[STEP步长值]循环体ENDFORFOR循环的执行过程如下:①将初值赋给循环变量;②判断循环变量的值是否超出终值;③若超出终值,结束循环,执行ENDFOR后命令;④若未超出终值,执行语句组;⑤循环变量=循环变量+步长值;⑥转到②重复上述②~⑤步骤。25例计算1~100之间所有的自然数和。1+2+3+……+100s=0fori=1to100step1s=s+iendfor?s说明:该语句主要使用于给定次数的循环。循环开始语句为FOR,结束语句为ENDFOR。若“step步长”不写,默认步长为1;26多项式求和是基本算法例:1+3+5……+991!+2!+……+10!1+1/2+1/3+……1/1002/1+3/2+5/3+8/5+……前20项的和……sum=sum+?27例:计算一个字符串中包括多少个汉字。基本算法:从字符串中依次取一个字符,如果其ASCII码值大于127,则为一个汉字内码的第一个字节。clearcstring='学习VisualFoxPro数据库管理系统'ncount=0fori=1tolen(cstring)ifasc(substr(cstring,i,1))127ncount=ncount+1i=i+1endifendfor?'汉字个数为:',ncount28二、DOWHILE……ENDDO语句格式:DOWHILE条件表达式循环体ENDDO执行过程如下:先判断条件表达式,值为.T.则执行循环体,否则出循环,执行ENDDO下面语句说明:当循环次数未知,需根据某一条件决定是否循环时使用。循环体中一般须存在能改变循环条件的语句,用于能正常退出循环。29例计算10的阶乘。S=1N=1Dowhilen=10s=s*nn=n+1Enddo?s用for循环完成:s=1forn=1to10step1s=s*nendfor?s30例计算1~100的偶数和与奇数和cleareven=0odd=0i=1dowhilei=100ifi%2=0even=even+ielseodd=odd+iendifi=i+1enddo?'偶数和=',even?'基数和=',odd31例将十进制数转换成二进制数表示。算法:除2取余,先得到的余数是低位,后得到的余数是高位。cleard=int(rand()*100+1)?dbinary=space(0)dowhiled#0b=d%2binary=str(b,1)+binaryd=int(d/2)enddo?binary33例:分析程序运行的结果Fori=1to5forj=1to4??Str(i*j)endfor?endfor循环嵌套34Fori=1to5?Space(10-i)fork=1to2*i-1??'*'endfor?endfor例:输出菱形图案•控制每行的*个数•控制每行的*起始位置35三、基于表的循环命令SCAN……ENDSCAN格式:SCAN[NOOPTIMIZE][范围][FOR条件][WHILE条件]循环体ENDSCAN说明:该语句主要用于对表中记录进行处理;SCAN命令自动将记录指针移到下一条满足条件的记录,并执行循环体;[NOOPTIMIZE]禁用Rushmore技术(优化数据访问技术)[范围]可用ALL、NEXTn、RECORDn、REST等,限定扫描记录的范围;[FOR条件]限定对所有满足条件的记录进行操作;[WHILE条件]限定对所有连续满足条件的记录进行操作;36例7-9逐条显示xs表中的记录clearusexsscandispinkey(0.6)&&延时0.6秒endscan37例逐条显示cj表中成绩大于80分的记录clearusecjscanforcj80dispinkey(0.6)endscan39下列两段程序结果是否一致?Usexsn=0Scanalln=n+1skip1Endscan?nusexsn=0Dowhilenoteof()n=n+1skip1Enddo?n不同,Scan命令会自动将记录指针后移,Dowhilenoteof()不会移记录指针如果xs有16个记录,前者输出8,后者输出1640四、循环结构中的LOOP命令与EXIT命令1、如果在循环体中,执行到LOOP语句,将跳过LOOP语句与循环出口之间的所有语句,返回到循环入口的语句,进行下一次循环。2、如果在循环体中,执行到EXIT语句,则跳出循环。比较2个程序:fork=1to10ifk%2=0loopendif??kendforfork=1to10ifk%2=0exitendif?
本文标题:vfp程序设计基础
链接地址:https://www.777doc.com/doc-1284680 .html