visual-foxpro程序设计案例教程(蔡莉)vf按章-第6章2

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

6.2程序控制结构程序结构是指程序中命令或语句执行的流程结构。在VFP系统的应用程序中,常见的程序控制结构有顺序结构、选择结构和循环结构三种。顺序结构是任何从简单到复杂的程序都离不开的主体基本结构,它按命令在程序中出现的先后次序依次执行。但是绝大多数问题仅用顺序结构是无法解决的,还要用到选择结构和循环结构。6.2.1选择结构程序设计选择结构是VFP系统程序的基本结构之一,又称分支结构。选择结构语句有三种基本形式。1、简单分支语句格式:IF〈条件表达式〉〈命令序列〉ENDIF语句功能:当条件为真时,执行IF和ENDIF之间的命令序列;当条件为假时,执行ENDIF后面的语句。条件为真?语句组ENDIF后面的语句YN例如:检查DA.DBF中有无工资低于650元的记录,如果有,则显示该记录的信息,然后显示全部记录。程序如下:SETTALKOFFUSEDALOCATEFOR工资650.00IF.NOT.EOF()DISPLAYENDIFLISTSETTALKON2、选择分支语句语句格式:IF条件表达式语句序列1ELSE语句序列2ENDIF语句功能:当条件为真时,先执行语句序列1,然后再去执行ENDIF后面的语句;当条件为假时,先执行语句组2,然后再转去执行ENDIF后面的语句。ENDIF后面的语句语句行条件为真?语句组1语句组2YN例如:铁路托运行李,假设每张车票可按每Kg0.5元托运50Kg以内的行李,如果超过50Kg时,超过的部分每Kg加价0.3元。计算公式为X=0.5×W(当W≤50Kg)X=0.5×50+0.8×(W-50)(当W50Kg)程序如下:SETTALKOFFINPUT“请输入行李的重量为:”TOWIFW=50X=0.5*WELSEX=0.5*50+0.8*(W-50)ENDIF?“行李的重量为”+STR(W,6,2)+“Kg,其运费为:”+STR(X,6,2)+“元”SETTALKONRETURNX=3、IF条件语句的嵌套语句格式:IF条件表达式1语句组1ELSEIF条件表达式2语句组2ELSEIF条件表达式3语句组3ELSE…ENDIFENDIFENDIF语句功能:此种嵌套语句可以对复杂情况进行各种判断。说明:在这种嵌套形式中,要求每一层的IF和ELSE及ENDIF必须一一对应。IF-ELSE-ENDIF每个命令各占一行,不能在同一行出现。4、多路分支语句语句格式:DOCASECASE条件表达式1语句组1CASE条件表达式2语句组2…[OTHERWISE][语句组n]ENDCASE语句功能:执行此命令时,系统从头依次查看每一个CASE的条件表达式,只要某一个条件表达式的值为真,就执行该条件下的语句组,其他条件下的语句组都跳过去,接下来执行ENDCASE后面的语句。OTHERWISE是一个可选项,若所有的条件都不成立,则执行OTHERWISE后面的语句;如果没有可选项OTHERWISE,则所有的条件都不成立,接着执行ENDCASE后面的语句。条件2条件1条件notherwise语句序列1语句序列2语句序列n语句序列EndCase后面的语句......例如:计算分段函数值:2x-1(x0)3x+5(0=x5)f(x)=x+1(3=x5)5x-3(5=x10)7x+2(x=10)程序代码如下:SETTALKOFFINPUT“输入X的值:”TOXDOCASECASEX0F=2*X-1CASEX=0ANDX3F=3*X+5CASEX=3ANDX5F=X+1CASEX=5ANDX10F=5*X-3OTHERWISEF=7*X+2ENDCASE??F(X)=,FSETTALKONRETURN6.2.2循环结构程序设计1、DOWHILE-ENDDO语句语句格式:DOWHILE条件表达式语句序列1[LOOP]语句序列2[EXIT]ENDDO语句功能:当条件表达式的值为真时,始终执行语句组;否则执行ENDDO后面的语句。执行ENDDO后面的语句执行循环体内各语句修正条件表达式的值条件为真?NY例如:以显示方式输出1-10的数字。SETTALKOFFCLEARI=1DOWHILEI=10?II=I+1ENDDO语句I=I+1就是用来修改循环条件的,如果没有这一句,I的值永远等于是,上述循环就成为一个死循环。例如:统计职工表ZGDA.DBF中,职称是讲师和副教授,年龄为45岁以下的教师人数。程序如下:SETTALKOFFSTORE0TOC,WUSEZGDADOWHILE.NOT.EOF()DOCASECASE(年龄45).and.职称=“讲师”W=W+1CASE(年龄45).and.职称=“副教授”C=C+1ENDCASESKIPENDDO?“讲师45岁以下的人数为:”,W?“副教授45岁以下的人数为:”,CSETTALKONRETURN(5)如果循环体中包含LOOP语句,则当遇到LOOP时,就结束循环体的本次执行,不再执行其后面的语句,而转到DOWHILE开始处重新判断条件。例如:在双重循环中,LOOP语句在内循环体中,当执行到LOOP语句时,它跳回到内循环的DOWHILE的开始处,重复对条件表达式2的判断。DOWHILE条件表达式1…DOWHILE条件表达式2…LOOP…ENDDO…ENDDO例如:将DA1.DBF表中凡是工资小于700元的增加100元。SETTALKOFFUSEDA2DOWHILE.NOT.EOF()IF工资=700SKIPLOOPENDIFREPLACE工资WITH工资+100SKIPENDDOSETTALKONRETURN例如:求0-100之间的奇数之和。SETTALKOFFX=0Y=0DOWHILEX100X=X+1IFINT(X/2)=X/2LOOPELSEY=Y+XENDIFENDDO?“0~100之间的奇数之和为:”,YSETTALKONCANCEL(6)如果循环体中包含EXIT语句,则当遇到EXIT时,就结束该循环的执行,转去执行ENDDO后面的语句。例如:计算1+2+3+…+100的和。SETTALKOFFS=0DOWHILE.T.IFN100EXITENDIFS=S+NN=N+1ENDDO?“1+2+3+…+100=”,SCANCEL运行结果为:1+2+3+…+100=50502、FOR-ENDFOR语句该语句通常用于实现循环次数已知情况下的循环结构。语句格式:FOR循环变量=初值TO终值[STEP步长]命令序列[LOOP][EXIT]ENDFOR例如:找出ZGDA表中年龄最大的记录号。SETTALKOFFUSEZGDAMAX=年龄J=RECCOUNT()FORI=1TOJIFMAX年龄MAX=年龄RSC=RECNO()ENDIFSKIPENDFORUSE?RSC例如:找出100-999之间的所有“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身(如153=13+53+33)。SETTALKOFFCLEARFORI=100TO999A=INT(I/100)B=INT((I-100*A)/10)C=I-INT(I/10)*10IFI=A^3+B^3+C^3?IENDIFENDFORSETTALKONRETURN例:从键盘输入10个数,找出其中的最大值和最小值。SETTALKOFFCLEARINPUT“请输入一个数:”TOASTOREATOMA,MIFORI=2TO10INPUT“请输入一个数:”TOAIFAMAMA=AENDIFIFAMIMI=AENDIFENDFOR?“最大值:”,MA?“最小值:”,MISETTALKONRETURN3、SCAN-ENDSCAN语句语句格式:SCAN[范围][FOR条件表达式]命令序列[LOOP][EXIT]ENDSCAN语句功能:SCAN的功能是执行时,记录指针自动、依次地在当前表中范围内满足条件的记录上移动,并对每一条记录执行命令序列。说明:范围的默认值是ALL。例如:统计职工科室代码(职工号的第1、2位)为02的男、女职工人数SETTALKOFFCLEARUSEZGDASTORE0TOM,WSCANFORSUB(职工号,1,2)=”02”IF性别=“男”M=M+1ELSEW=W+1ENDIFENDSCAN?“男职工人数:”,M?“女职工人数:”,WUSESETTALKONRETURN例如:在DA1.DBF表中,查找职称是“讲师”的记录,计算满足条件的记录个数和工资的总和。SETTALKOFFCLEARUSEDA1S=0N=0SCANFOR职称=“讲师”S=S+工资N=N+1ENDSCANUSE?“记录个数为:”,N?“工资和为:”,SSETTALKONRETURN

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功