1、VF第讲循环结构第讲循环结构第五讲第五讲 程序设计基础(三)程序设计基础(三)程序设计基础(程序设计基础(Visual FoxProVisual FoxPro)杨劲 副教授电话:VF第讲循环结构第讲循环结构本本 讲讲 要要 点点q 程序文件的建立与编辑程序文件的建立与编辑q 程序文件的执行程序文件的执行 q 程序文件中常用的命令程序文件中常用的命令q 程序的基本结构控制程序的基本结构控制VF第讲循环结构第讲循环结构常见的循环结构有:常见的循环结构有:1)条件循环)条件循环2)步长循环)步长循环3)扫描循环)扫描循环循环结构则能够使某些语句或程序段重复执行若干次。如果某些语句或程序段需要在一个固
2、定的位置上重复操作在一个固定的位置上重复操作,使用循环是最好的选择。程序的循环结构程序的循环结构VF第讲循环结构第讲循环结构1、条件循环(、条件循环(DO WHILEENDDO)格式格式:DO WHILE LOOP EXIT ENDDO 说明:说明:1、循环结构从DO WHILE开始,到ENDDO结束,两者必须成对出现;5、循环结构能自身嵌套,还能与选择结构的各种形式嵌套。2、循环是否继续取决于条件的当前取值,一般情况下循环体中应含有改变条件取值的命令或跳改变条件取值的命令或跳出循环的出循环的EXIT语句,语句,否则将造成死循环。3、EXIT:将控制权交给紧接在ENDDO后面的命令。4、LOO
3、P:将控制权直接交给DO WHILE子句,不再执行LOOP与ENDDO之间的语句。DO WHILE ENDDOENDDO语句序列语句序列.F.T.VF第讲循环结构第讲循环结构DO WHILE 流程图流程图DO WHILE 语句序列语句序列ENDDOENDDO语句序列语句序列LOOP条件分支条件分支语句序列语句序列.T.F.DO WHILE 语句序列语句序列ENDDOENDDOEXIT条件分支条件分支语句序列语句序列.T.F.VF第讲循环结构第讲循环结构第第 1 1 步,步,计算计算 0+10+1;第第 2 2 步,步,计算计算 (0+1)+2(0+1)+2;第第 3 3 步,步,计算计算 (0
4、+1+2)+3(0+1+2)+3;第第 i i 步,步,计算计算 (0+1+i-1)+i(0+1+i-1)+i;.第第 100 100 步,计算步,计算 (0+1+99)+100(0+1+99)+100;递归递归算法算法EXM6EXM6:计算:计算s=1+2+3+100s=1+2+3+100前前i-1次累加和次累加和第第i次累加项次累加项VF第讲循环结构第讲循环结构递推公式递推公式s=1+2+3+100s=1+2+3+100VF第讲循环结构第讲循环结构 i=100s=s+i i=i+1s=0,i=1开始开始结束结束输出输出sYN循环变量赋初值循环变量赋初值循环条件(循环条件(i大于大于100就
5、结束)就结束)循环变量的变化趋势循环变量的变化趋势从从1变到变到100VF第讲循环结构第讲循环结构cleacleas=0s=0i=1i=1do while i=100do while i=100s=s+is=s+ii=i+1i=i+1enddoenddo?1+2+3+.+100=,s?1+2+3+.+100=,sreturnreturn循环体循环体VF第讲循环结构第讲循环结构程序及运行结果程序及运行结果VF第讲循环结构第讲循环结构*程序例程序例21.PRGSET TALK OFFCLEARi=0DO WHILE i10 i=i+1?iENDDOSET TALK ONSET TALK OFFCL
6、EAR i=0 DO WHILE i10?iENDDOSET TALK ON死循环死循环SET TALK OFFCLEARi=0DO WHILE i10 i=i+1?iENDDOSET TALK ON无效循环无效循环SET TALK OFFCLEAR i=0 DO WHILE i i=i+1?iENDDOSET TALK ON语法错误语法错误*程序例程序例21-1.PRGSET TALK OFFCLEARi=0DO WHILE i10?i i=i+1ENDDOSET TALK ON*程序例程序例21-2.PRGSET TALK OFFCLEARi=0DO WHILE i10 i=i+1ENDD
7、O?iSET TALK ON逻辑值或逻辑表达式VF第讲循环结构第讲循环结构SET TALK OFFCLEAR i=0 DO WHILE .T.i=i+1?iENDDOSET TALK ONSET TALK OFFCLEAR i=0 DO WHILE .T.i=i+1?i IF i=10 EXIT ENDIFENDDOSET TALK ON死循环死循环SET TALK OFFCLEAR i=0 DO WHILE .T.i=i+1?i ACCEPT 是否继续是否继续 TO A IF UPPER(A)Y EXIT ENDIFENDDOSET TALK ON定数循环定数循环用户控制循环用户控制循环VF
8、第讲循环结构第讲循环结构基本方法基本方法:属于属于“累加(乘)器累加(乘)器”类型问题类型问题 (1 1)在进入循环前先给累加(乘)器赋初值)在进入循环前先给累加(乘)器赋初值 累加一般为累加一般为0 0,累乘一般为,累乘一般为1 1(2 2)用循环语句实现累加(乘)用循环语句实现累加(乘)循环变量(计数器)赋初值;循环条件;循环变量(计数器)赋初值;循环条件;循环变量的改变规律循环变量的改变规律(3 3)循环体语句的设计)循环体语句的设计 累加器当前值累加器当前值=累加器原值累加器原值+循环变量当前值循环变量当前值 累乘器当前值累乘器当前值=累乘器原值累乘器原值*循环变量当前值循环变量当前值
9、VF第讲循环结构第讲循环结构EXM7EXM7:计算:计算s=1+2+3+ns=1+2+3+n。(P59例例3-8)VF第讲循环结构第讲循环结构“计算计算”命令按钮的命令按钮的“click”事件代码:事件代码:n=thisform.text1.value s=0 x=1do while x=ns=s+xx=x+1enddothisform.text2.value=s VF第讲循环结构第讲循环结构 提示:提示:循环结构循环结构。循环是否继续取决于循环条件的当前循环是否继续取决于循环条件的当前取值,一般情况下循环体中应含有取值,一般情况下循环体中应含有,否则将造成,否则将造成死循环。死循环。循环结构
10、能循环结构能,还,还能与选择结构的各种形式嵌套。能与选择结构的各种形式嵌套。VF第讲循环结构第讲循环结构2、计数循环(、计数循环(FORENDFOR)格式:格式:FOR=TO STEP LOOP EXITENDFOR/NEXT 说明:1、:指定作为循环计数器的内存变量或数组元素,用于控制循环的次数。在执行FORENDFOR语句之前,此内存变量不一定存在。2、TO:是计数器的初始值,而是计数器的终止值。3、STEP:是计数器递增或递减的步长。步长可正可负,缺省为1。4、循环体中一般不包含改变循环变量值的命令,否则循环次数将随之改变。流程图:流程图:FOR i=a TO i=b STEP c语句序
11、列语句序列ENDFORENDFOR语句序列语句序列LOOP条件分支条件分支语句序列语句序列ibi=i+cFOR i=a TO i=b STEP cENDFORENDFOR语句序列语句序列ibi=bi=i+cFOR i=a TO i=b STEP c语句序列语句序列ENDFORENDFOREXIT条件分支条件分支语句序列语句序列ibi=i+cVF第讲循环结构第讲循环结构计算计算s=1+2+3+100s=1+2+3+100cleacleas=0s=0for i=1 to 100 for i=1 to 100 s=s+is=s+iendforendfor?1+2+3+.+100=,s?1+2+3+.
12、+100=,sreturnreturnstep 1VF第讲循环结构第讲循环结构(教材教材P60)P60)【例例3-93-9】设计如图所示表单,在文本框设计如图所示表单,在文本框text1text1中输入中输入N N的值,求的值,求N!N!。VF第讲循环结构第讲循环结构输入输入n ni=1i=1,fac=1fac=1 i=n i=1 n=1 fac=fac fac=fac*n n n=n-1 n=n-1 输出输出facfac 求求n n!的!的N-SN-S图图VF第讲循环结构第讲循环结构“计算计算”命令按钮的命令按钮的“Click”事件代码:事件代码:p=1for i=1 to thisform
13、.text1.valuep=p*iendforthisform.text2.value=p VF第讲循环结构第讲循环结构关于步长循环的提示关于步长循环的提示:步长可正可负,缺省为步长可正可负,缺省为1 1。循环体中循环体中,否则循环次数将随之,否则循环次数将随之改变改变。如果循环次数可以通过如果循环次数可以通过来控制,则计数循环较为简洁。来控制,则计数循环较为简洁。VF第讲循环结构第讲循环结构a=0FOR i=2 TO 100 STEP 2a=a+iENDFOR?aRETURN提示:计数循环完全可以使用条件循环替代,提示:计数循环完全可以使用条件循环替代,不过前者更为简洁。不过前者更为简洁。例
14、:求例:求1到到100中偶数的和中偶数的和a=0i=2DO WHILE i=100a=a+i i=i+2ENDDO?aRETURNVF第讲循环结构第讲循环结构 input“input“请输入终值:请输入终值:”to nto n input“input“请输入步长:请输入步长:”to kto k i=1 for i=1 to n step k i=1 for i=1 to n step k do while i=n do while i=n endfor|next endfor|next i=i+k i=i+k endddo endddoVF第讲循环结构第讲循环结构EXM8EXM8:求:求100
15、100以内的奇数和。以内的奇数和。A=1+3+5+99A=1+3+5+99循环变量循环变量初值初值x=1循环条件循环条件x100循环变量的变化循环变量的变化趋势趋势x=x+2请同学们自请同学们自己写出程序己写出程序循环体累加语句:循环体累加语句:A=A+xVF第讲循环结构第讲循环结构222.21nKEXM9EXM9:求:求循环变量循环变量初值初值x=1循环条件循环条件x8“Av56:YijB8基本思路:基本思路:从右到左逐个取出从右到左逐个取出,操作次数为操作次数为len(x)len(x)次。次。A Av v5 56 6:Y Yi ij jB B 8 8 11 10 9 8 7 6 5 4 3
16、 2 1 计数器计数器i(i(循环变量循环变量):):len(x)=11 len(x)=11c=c+c=c+substr(x,i,1)substr(x,i,1)8BjiY:65vA8BjiY:65vA substr(x,i,1)substr(x,i,1)VF第讲循环结构第讲循环结构确定变量:确定变量:x x:操作对象:操作对象 x=Av56:YijB8Av56:YijB8 i i:计数器:计数器 len(x)len(x)到到1 1c c:累加器:累加器 c=c+substr(x,i,1)c=c+substr(x,i,1),初值为,初值为“”“”确定算法:用循环在原字符串中从右到左逐个确定算法:
17、用循环在原字符串中从右到左逐个截取字符,重新组装成逆序字符串截取字符,重新组装成逆序字符串确定循环三要素:确定循环三要素:循环变量循环变量 :i(i:i(i初值为初值为len(x),len(x),终值为终值为1)1)循环条件循环条件:i=1:i=1循环条件改变:循环条件改变:i=i-1(i=i-1(从右到左截取从右到左截取)VF第讲循环结构第讲循环结构例:例:如图所示一程序界面。文本框如图所示一程序界面。文本框TEXT1TEXT1已经输入一已经输入一串文字,单击串文字,单击“转换转换”命令按钮后,文本框的值将变命令按钮后,文本框的值将变为什么?为什么?“转换转换”命令按钮的命令按钮的CLICK
18、 CLICK 事件代码:事件代码:N=LEN(THISFORM.TEXT1.VALUE)N=LEN(THISFORM.TEXT1.VALUE)Y=Y=DO WHILE N0DO WHILE N0 X=SUBSTR(THISFORM.TEXT1.VALUE,N,1)X=SUBSTR(THISFORM.TEXT1.VALUE,N,1)IF ASC(X)=ASC(a)IF ASC(X)=ASC(a)X=UPPER(X)X=UPPER(X)ELSE ELSE X=LOWER(X)X=LOWER(X)ENDIFENDIF Y=X+Y Y=X+YN=N-1N=N-1ENDDOENDDOTHISFORM.T
19、EXT1.VALUE=YTHISFORM.TEXT1.VALUE=YtHIS IS A cpu.VF第讲循环结构第讲循环结构例:输入一串例:输入一串ASCIIASCII字符,显示数字字符串。字符,显示数字字符串。假设输入:假设输入:Av56:YijB8 Av56:YijB8 显示:显示:568568。操作方法:操作方法:1 1、从左到右逐个取出字符存入、从左到右逐个取出字符存入x x变量中;变量中;2 2、对、对X X变量中的字符进行判断,满足条件变量中的字符进行判断,满足条件的连接到字符串累加器上。的连接到字符串累加器上。判断判断x x是数字字符的条件:是数字字符的条件:或者:或者:x=0 and x=0 and x=9 x=0 and x8 Av56:YijB8 显示:显示:568568。VF第讲循环结构第讲循环结构例:例:表单程序,输入一串表单程序,输入一串ASCIIASCII字符,字符,显示大写字母串或小写字符串。显示大写字母串或小写字符串。例如,输入例如,输入“Av56:YijB8”Av56:YijB8”,点击,点击“筛选大写字母筛选大写字母”按钮,显示按钮,显示“AYB”AYB”;点击点击“筛选小写字母筛选小写字母”按钮,显示按钮,显示“vij”vij”。请同学们自请同学们自己写出程序己写出程序