250 likes | 362 Views
第七章程序设计基础. 主讲人 于洪奎. 7.2.2 循环结构( P165 ). 条件循环( DO WHILE--ENDDO ) 步长循环( FOR --ENDFOR ) 扫描循环( SCAN--ENDSCAN ) 循环辅助语句 ( LOOP/EXIT ). 条件循环. 语句格式: DO WHILE < 条件 > < 语句序列 1> [LOOP] < 语句序列 2> [EXIT] < 语句序列 3> ENDDO. 条件循环. 功能注释 : 1 、如果第一次判断条件时,条件即为假,则循环一次都不执行。
E N D
第七章程序设计基础 主讲人 于洪奎
7.2.2循环结构(P165) • 条件循环(DO WHILE--ENDDO) • 步长循环(FOR --ENDFOR) • 扫描循环(SCAN--ENDSCAN) • 循环辅助语句(LOOP/EXIT)
条件循环 • 语句格式: DO WHILE <条件> <语句序列1> [LOOP] <语句序列2> [EXIT] <语句序列3> ENDDO
条件循环 • 功能注释: 1、如果第一次判断条件时,条件即为假,则循环一次都不执行。 2、如果循环体包含LOOP命令,那么当遇到LOOP时,就结束循环体的本次执行,不再执行其后面的语句,而是转回DO WHILE 处重新判断条件。 3、如果循环体包含EXIT命令,那么当遇到EXIT时,就结束循环体的本次执行,转去执行ENDDO后面的语句。 4、通常LOOP或EXIT出现在循环体内嵌套的选择语句中,根据条件来决定是LOOP回去,还是EXIT出去。
条件循环示例 1、计算S=1+2+3+。。+100 程序名:QH.PRG SET TALK OFF S=0 I=1 DO WHILE I<=100 S=S+I I=I+1 ENDDO ?I ?S SET TALK ON
循环辅助语句 DO WHILE 。。。。 EXIT 。。。。 ENDDO DO WHILE 。。。。 LOOP 。。。。 ENDDO
LOOP示例 功能:计算S=1+2+3+…+100,并求1~100之间的奇数和。 程序名:JSH.PRG STORE 0 TO I,S,T DO WHILE I<100 I=I+1 S=S+I IF INT(I/2)=I/2 LOOP ENDIF T=T+I ENDDO ? “1+2+3+…+100=”,S ? “1~100的奇数和为:”,T
步长循环格式 • 格式: FOR <循环变量>=<初值> TO <终值> [STEP <步长>] <循环体> ENDFOR| NEXT
步长循环功能注释 1、<步长>默认值为1。 2、<初值><终值><步长>都可以是数值表达式。但这些表达式仅在循环语句执行开始时被计算一次。在循环语句的执行过程中, 初值、终值和步长是不会改变的。 3、可以在循环体内改变循环变量的值,但这会影响循环体的执行次数。 4、LOOP和EXIT同样可以出现在循环体内。当执行到LOOP命令时,结束循环体的本次循环,然后循环变量增加一个步长值,并再次判断循环条件是否成立。
步长循环示例1 功能:计算 S=1+2+….+100 程序名:BC.PRG S=0 FOR I=1 TO 100 S=S+I ENDFOR ? “S=”,S 当STEP 2 计算结果为奇数和
步长循环示例2 功能:找出100~999之间的所有“水仙花数”(如153=13+53+33) 程序名:SXH.PRG CLEAR FOR I=100 TO 999 A=INT(I/100) B=INT((I-100*A)/10) C=I-INT(I/10)*10 IF I=A^3+B^3+C^3 ?I ENDIF ENDFOR
步长循环示例3 • 功能:从键盘输入10个数,然后找出其中的最大值和最小值。 • 程序名:MAMI.PRG CLEAR INPUT “请输入一个数:” TO A STORE A TO MA,MI FOR I=2 TO 10 INPUT “请输入一个数:” TO A IF MA<A MA=A ENDIF IF MI>A MI=A ENDIF ENDFOR ? “最大值:”,MA ? “最小值:”,MI
扫描语句格式 SCAN [<范围>] [FOR<条件1>][WHILE<条件2>] <循环体> ENDSCAN 该语句一般用语处理表中的记录。 功能注释: 1、<范围>的默认值是ALL。 2、EXIT和LOOP命令同样可以出现在该循环语句的循环体内。
扫描语句示例 clear open database 订货管理 USE 职工表 SCAN FOR 工资>1210 ?职工号,工资 ?"------------------------" ENDSCAN USE CLOSE DATABASE
步长循环嵌套示例 • 功能:显示乘法表 • 程序名:CFB.PRG CLEAR FOR I=1 TO 4 &&I是被乘数 FOR J=1 TO 4 &&J是乘数 IF I<=J ?? STR(I,1)+ “*”+STR(J,1)+ “=”+STR(I*J,2)+SPACE(2) ENDIF NEXT ? &&换行 ENDFOR
上例运行结果 1*1= 1 1*2= 2 1*3= 3 1*4= 4 2*2= 4 2*3= 6 2*4=8 3*3= 9 3*4=12 4*4=16
条件循环嵌套示例 功能:大中小马之和100,大、中、小马每次运输3、2、1/3片瓦,求用几匹大、中、小马刚好运送100片瓦。
条件循环嵌套程序 X=1 USE QQ ZAP DO WHILE X<=33 Y=1 DO WHILE Y<=50 Z=1 DO WHILE Z<=100 IF X+Y+Z=100 AND 3*X+2*Y+Z/3=100 INSERT INTO QQ VALUES(X,Y,Z) ENDIF Z=Z+1 ENDDO Y=Y+1 ENDDO X=X+1 ENDDO LIST USE
投币 利用RAND()函数、@语句、DO WHILE 和IF语句完成投币效果。 程序名:TB.PRG
投币程序 =RAND(-1) CLEAR ANSWER=“Y” STORE 0 TO TAILS,HEADS DO WHILE UPPER(ANSWER)=“Y” IF RAND()>0.5 @2,2 TO 14,22 STYLE “99” PATTERN 1 PEN 2 COLOR “B/B” @6,7 SAY “标题” COLOR W+/B FONT “ROMAN”,24 HEADS=HEADS+1 ELSE @2,2 TO 14,22 STYLE “99” PATTERN 1 PEN 2 COLOR “B/B” @6,7 SAY “细节” COLOR W+/B FONT “ROMAN”,24 TAILS=TAILS+1 ENDIF @15,4 SAY “是否投币?(Y/N)” GET ANSWER @16,4 SAY “标题” @16,11 SAY LTRIM(STR(HEADS)) @16,24 SAY “细节” @16,31 SAY LTRIM(STR(TAILS)) READ ENDDO
练习题1 • 在DO WHILE-ENDDO循环语句中,LOOP命令的作用是? A退出过程,返回程序开始。 B转移到DO WHILE 语句行,开始下一个判断和循环。 C终止循环,将控制转移到本循环结构ENDDO后面的第一条语句继续执行。 D终止程序执行。
练习题2 • 在DO WHILE-ENDDO循环语句中,EXIT命令的作用是? A退出过程,返回程序开始。 B转移到DO WHILE 语句行,开始下一个判断和循环。 C终止循环,将控制转移到本循环结构ENDDO后面的第一条语句继续执行。 D终止程序执行。
练习题3 • 如下程序段的输出结果是? I=1 DO WHILE I<10 I=I+2 ENDDO ?I
练习题4 • 执行如下程序,输入X的值为5,则最后S的值是多少? S=0 I=1 INPUT “X=” TO X DO WHILE S<=X S=S+I I=I+1 ENDDO ?S
练习题5 • 有如下程序: FOR N=1 TO 5 STEP 2 ?N ENDFOR 在此FOR循环中,循环变量N的初值、终值和步长是多少,该循环体执行了多少次。