程序设计基础之循环

上传人:san****019 文档编号:71476735 上传时间:2019-01-20 格式:PPT 页数:31 大小:908.81KB
返回 下载 相关 举报
程序设计基础之循环_第1页
第1页 / 共31页
程序设计基础之循环_第2页
第2页 / 共31页
程序设计基础之循环_第3页
第3页 / 共31页
程序设计基础之循环_第4页
第4页 / 共31页
程序设计基础之循环_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《程序设计基础之循环》由会员分享,可在线阅读,更多相关《程序设计基础之循环(31页珍藏版)》请在金锄头文库上搜索。

1、程序设计基础(3),循环结构程序设计,教材相关内容,第六章 6.3.3 循环结构,3,计算1+2+3+4+5+100的值并输出。,进一步思考1:如把题目要求改为计算“1+3+5+7+99”的值,如何修改程序?,再思考2:如把题目要求改为计算“1*2*3*10”的值,如何修改程序?,循环问题的提出,4,解决问题的途径,set talk off s=0 for i=1 to 100 step 1 s=s+i Next i ?“1+2+.+100=“,s set talk on,5,For/Next语句执行过程,变量超过终值吗?,变量=变量+步长,执行循环体,Yes,No,变量=初值,Next语句后

2、的程序,s=0 For i=1 to 100 step 1 s=s+i Next i,6,思考题1的解决方案,set talk off s=0 for i=1 to 99 step 2 s=s+i next i ?“1+3+5+.+99=“,s set talk on,还有别的方案吗?,7,思考题2的解决方案,set talk off s=0 for i=1 to 10 s=s*i next i ?“1*2*.*10=“,s set talk on,有问题吗?,对循环的深入理解,For i=1 to 10 step 3 ?i Next i ?i,For i=1 to 10 step -3 ?i

3、 Next i ?i,判断:循环了几次?,For i=1 to 10 step 3 ?i i=i-3 Next i,Forendfor/next循环能解决什么问题?,1+2+3+n(n为一个固定的值) 1*2*3*n(n为固定值) 1+3+5+99,以上问题的共同点:循环次数固定(或循环的起点、终点固定) 但对类似以下的问题,该如何处理? 1+2+3+直到累加和超过10000,停止计算 1+1/2+1/3+直到末项小于或等于某个非常小的数,如0.000001,格式: DO WHILE EXIT LOOP ENDDO,DO WHILE ENDDO,功能: 当的值为真时,重复执行 DO WHILE

4、 ENDDO之间的,直到的值为假时,循环结束。,Y,N,解决方案:另一种格式的循环,任选项说明 EXIT-结束当前循环操作,跳到ENDDO后面的语句。 LOOP-跳过LOOP后面的语句,直接回到循环起始语句DO WHILE。 注: 在语句序列中,还可以出现IF语句或CASE语句或DO WHILE 语句即WHILE语句的嵌套。,格式: DO WHILE .T. IF EXIT ENDIF ENDDO,1、循环次数不确定的循环,功能:循环条件永远为真,只有满足IF语句的时,才跳出循环。 注:在这种使用方法中,EXIT选项是不可缺少的,且一般和IF结构连用。,Do whileenddo应用举例,例:

5、将前N个自然数的完全平方数进行累加,当累加和超过100时停止。要求程序显示每次的累加和。,*exp_1.PRG* SET TALK OFF CLEAR STORE 0 TO I,M DO WHILE .T. IF M100 EXIT ELSE M=M+I2 ENDIF ?“完全平方数累加和:“+STR(M,6) I=I+1 ENDDO SET TALK ON,例,格式: N=初值 DO WHILE N N=N+X &步长概念 ENDDO,2、固定次数的循环,Do whileenddo应用举例,其中:N=初值 ;M=终值;X为步长 功能:通过对循环变量N进行顺计数并与M相比较的方法完成循环操作。

6、 这种用法功能与fornext/endfor非常相似,只是要注意:fornext的步长体现在step中;而 do whileenddo结构中,则把步长概念写在循环体中。,用fornext表达: for n=初值 to m step x next n,例,利用永真结构完成程序:用户从键盘输入一个整数,由程序判断其奇偶性;程序可以进行多个数的判断,直到用户输入“n/N”时,程序结束。,*exp_2.prg* set talk off clear do while .t. input “请输入一个数值型数据:“ to a if mod(a,2)=0 ?a,“是偶数“ else ?a,“是奇数“ en

7、dif wait “还要判断奇偶吗?(按n/N键结束,其他键继续)“ to ans if upper(ans)=“N“ exit endif enddo set talk on,思考:有没有其他方法,让用户控制结束操作?,if inkey(0)=27 &若用户按ESC键就结束操作 exit endif,*exp_3.PRG* SET TALK OFF CLEAR s=1 i=2 t=-1 DO WHILE i=100 s=s+t/i i=i+1 t=-t ENDDO ?“1-1/2+1/3-1/4+1/99-1/100 “,S SET TALK ON,例:计算1-1/2+1/3-1/4+1/9

8、9-1/100的值并输出。,问题:如把题目要求改为计算“1-1/2+1/3-1/4+1/n”的值(n是键盘输入的正整数) ,如何修改程序?,例,功能:对当前打开的表文件中的记录自上而下或自下而上地逐条进行操作。 注:记录指针由SKIP语句控制,循环结束的条件由函数 EOF()和 BOF()控制。,用记录指针控制循环,格式1: DO WHILE .NOT. EOF( ) SKIP ENDDO,格式2: DO WHILE .NOT. BOF( ) SKIP-1 ENDDO,例:在人事表RenShi.DBF中有“编号”字段(N,6)。现要抽取编号能被3整除的人员参加活动,要求在屏幕上显示这些人员的姓

9、名和编号。,*exp_4.PRG* SET TALK OFF CLEAR USE RenShi DO WHILE .NOT. EOF() IF MOD(编号,3)=0 ?姓名,编号 ENDIF SKIP ENDDO USE SET TALK ON,例,例:显示人事表RenShi.DBF中在1985年以后参加工作的人员记录。,*exp_5.PRG* SET TALK OFF CLEAR USE Renshi DO WHILE .NOT. EOF() IF 工作年份=CTOD(“01/01/85“) DISPLAY ENDIF SKIP ENDDO USE Set talk on,例,例:显示人事

10、表中的全部字段名,并显示字段的数据类型。,*EXP_6.PRG* SET TALK OFF CLEAR USE RENSHI FOR N=1 TO FCOUNT() ?FIELD(N) ?TYPE(FIELD(N) ENDFOR USE SET TALK ON,例,格式: SCAN 范围 FOR WHILE EXIT LOOP ENDSCAN,功能:对当前打开的表文件,在指定范围,满足条件的记录中进行自上而下逐个扫描操作,随着记录指针的移动,SCAN循环允许对指定的每条记录执行相同的操作。 说明:SCAN循环能自动移动指针,按条件指定记录,避免在循环体内重复执行表文件查询命令。用DO WHIL

11、E循环也可以实现对表文件的逐个扫描操作,但它需要借助函数BOF()或EOF()测试状态,用SKIP命令移动指针,不如SCAN循环方便。,另一种循环:SCAN ENDSCAN,例:分别统计人事表中男士和女士的人数。,*exp_7.PRG* SET TALK OFF USE renshi STORE 0 TO X,Y SCAN IF 性别 X=X+1 ELSE Y=Y+1 ENDIF ENDSCAN ?“男士人数“,X ?“女士人数“,Y USE SET TALK ON,例,(1)DO WHILE和ENDDO、FOR和ENDFOR/next、SCAN和ENDSCAN必须配对使用。 (2)命令行序列

12、可以是任何FoxPro命令或语句,也可以是循环语句,即可以为多重循环。 (3)循环变量应是数值型的内存变量或数组元素。 (4)EXIT和LOOP命令嵌入在循环体内,可以改变循环次数,但是不能单独使用。EXIT的功能是跳出循环,转去执行ENDDO、ENDFOR、ENDSCAN后面的第一条命令;LOOP的功能是转回到循环的开始处,重新对“条件”进行判断,相当于执行了一次ENDDO、ENDFOR、ENDSCAN命令,它可以改变命令行序列中部分命令的执行次数。EXIT、LOOP可以出现在命令行序列的任意位置。,使用循环语句时应注意的几点:,循环结构小结,控制结构综合应用,例:百鸡问题,*exp_8.p

13、rg* SET TALK OFF CLEAR FOR X=0 TO 20 &X是公鸡的数量 FOR Y=0 TO 33 &Y是母鸡的数量 Z=100-X-Y &Z是小鸡的数量 IF 5*X+3*Y+Z/3=100 .and. Z%3=0 ?“X=“,STR(X,2),“Y=“,STR(Y,2),“Z=“,STR(Z,2) ENDIF ENDFOR ENDFOR SET TALK ON,例:从键盘输入一个大于1的正整数数,判断该数是否为素数。,*exp_9.PRG* SET TALK OFF CLEAR INPUT X= TO X FOR I=2 TO X-1 IF INT(X/I)=X/I E

14、XIT ENDIF ENDFOR IF I=X ? X,是素数! ELSE ? X,不是素数! ENDIF SET TALK ON,思考题,Q1:除了这种方法,还有其他思路吗? Q2:若要求程序可以连续多次判断,且由用户控制是否继续,如何改造程序? Q3:怎样完善程序,限制用户输入不合理数据,如用户不小心会输入一个负数或非整数等。,算法思路:素数指除了能被1和自身外,不能被其他整数整除的自然数。判断整数X是不是素数的基本方法是:将X分别除以2,3,X-1,若都不能整除,则X为素数。判断X被I整除还可用表达式MOD(X,I)=0或INT(X/I)=X/I 或X%I=0,算法思路:首先必须了解数学

15、上关于最大公约数和最小公倍数的概念。最大公约数是指能同时整除两个正整数M、N的所有数中最大的一个,而最小公倍数是指能同时被M和N整除的所有数中最小的一个。最大公约数肯定在1到M、N两数中较小的一个数之间;而最小公倍数肯定在M、N两数中较大的一个数到两数之积M*N之间,而且两者之间有一公式,即最小公倍数= M*N/最大公约数,因此只要求出一个就可以求出另一个。,*exp_10.prg* SET TALK OFF CLEAR INPUT “A=“ TO A INPUT “B=“ TO B X=MAX(A,B) Y=MIN(A,B) FOR I=X TO A*B IF I%A=0 and I%B=0 M=I EXIT ENDIF ENDFOR FOR I=Y TO 1 STEP -1 IF A%I=0 and B%I=0 N=I EXIT ENDIF ENDFOR ?“最小公倍数是:“,M ?“最大公约数是:“,N SET TALK ON,例:求两个正整数的最大公约数和最小公倍数,解题思路:这是一道口令验证题,即字符串比较问题。解题的关键有两点:一是通过任意一种形式接收用户输入的口令;二是比较用户口令与系统口令是否一致,进而决定下一步的操作。,*exp_11.prg* SET TALK OFF CLEAR I=1 DO WHILE

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号