




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计基础(3) 循环结构程序设计 教材相关内容 第六章 6.3.3 循环结构 3 3 计算1+2+3+4+5+100的值并输出。 进一步思考1:如把题目要求改为计算 “1+3+5+7+99”的值,如何修改程序? 再思考2:如把题目要求改为计算 “1*2*3*10”的值,如何修改程序? 循环问题的提出 4 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 5 For/Next语句执 行过程 变量超 过终值 吗? 变量=变量+步长 执行循环体 变量=初值 Next语句后的程序 s=0 For i=1 to 100 step 1 s=s+i Next i 6 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 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 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 ENDDODO WHILE ENDDO之间的之间的 ,直到,直到 的值为假时,循环结束。的值为假时,循环结束。 语句序列 ? Y N 解决方案:另一种格式的循环 任选项说明 l EXIT-结束当前循环操作,跳到ENDDO后面的语句 。 l LOOP-跳过LOOP后面的语句,直接回到循环起始语 句DO WHILE。 注: 在语句序列中,还可以出现IF语句或CASE 语句或DO WHILE 语句即WHILE语句的嵌套。 格式: DO WHILE .T. IF EXIT ENDIF ENDDO 1、循环次数不确定的循环 功能:循环条件永远为真,只有满足功能:循环条件永远为真,只有满足IFIF语句的语句的 时,时, 才跳出循环。才跳出循环。 注:在这种使用方法中,注:在这种使用方法中,EXITEXIT选项是不可缺少的,且一般和选项是不可缺少的,且一般和IFIF 结构连用。结构连用。 Do whileenddo应用举例 例:将前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相比较的方 法完成循环操作。 这种用法功能与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,“是奇数“ endif 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 SKIP ENDDO 格式格式2 2: DO WHILE .NOT. BOF( ) DO WHILE .NOT. BOF( ) SKIP-1 SKIP-1 ENDDO ENDDO 例:在人事表RenShi.DBF中有“编号”字段(N,6)。现要抽取编号能被3整 除的人员参加活动,要求在屏幕上显示这些人员的姓名和编号。 *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 例 例:显示人事表中的全部字段名,并显示字段的数据类型。 *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 功能:对当前打开的表文件功能:对当前打开的表文件, ,在指定范围,满足条件的记录中在指定范围,满足条件的记录中 进行自上而下逐个扫描操作,随着记录指针的移动,进行自上而下逐个扫描操作,随着记录指针的移动,SCANSCAN循循 环允许对指定的每条记录执行相同的环允许对指定的每条记录执行相同的 操作。操作。 说明:说明:SCANSCAN循环能自动移动指针,按条件指定记录,避免在循环能自动移动指针,按条件指定记录,避免在 循环体内重复执行表文件查询命令。循环体内重复执行表文件查询命令。用用DO WHILEDO WHILE循环也可以循环也可以 实现对表文件的逐个扫描操作,但它需要借助函数实现对表文件的逐个扫描操作,但它需要借助函数BOF()BOF()或或 EOF()EOF()测试状态,用测试状态,用SKIPSKIP命令移动指针,不如命令移动指针,不如SCANSCAN循环方便。循环方便。 另一种循环: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)命令行序列可以是任何FoxPro命令或语句,也可以是循环语句,即可以 为多重循环。 (3)循环变量应是数值型的内存变量或数组元素。 (4)EXIT和LOOP命令嵌入在循环体内,可以改变循环次数,但是不能单独使用。 EXIT的功能是跳出循环,转去执行ENDDO、ENDFOR、ENDSCAN后面的第一条命令; LOOP的功能是转回到循环的开始处,重新对“条件”进行判断,相当于执行了一次 ENDDO、ENDFOR、ENDSCAN命令,它可以改变命令行序列中部分命令的执行次 数。EXIT、LOOP可以出现在命令行序列的任意位置。 使用循环语句时应注意的几点: 循环结构小结 控制结构综合应用 例:百鸡问题 *exp_8.prg* 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 EXIT 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 算法思路:首先必须了解数学上关 于最大公约数和最小公倍数的概念 。最大公约数是指能同时整除两个 正整数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 I=3 ?“请输入口令:“ SET CONSOLE OFF ACCEPT TO MPW SET CONSOLE ON IF MPW=“123456“ ?“欢迎进入本系统!“ EXIT ELSE IF I=3 ?“你无权使用本系统!“ EXIT &可以省略吗? ELSE ?“口令不正确,请重输!“ ENDIF ENDIF I=I+1 ENDDO SET TALK ON 例:从键盘输入一串字符(口令), 自动判断输入的口令是否与系统的口 令一致。若一致则显示“欢迎进入本 系统!”,;否则显示“口令不正确,请 重输!”;给予三次重输机会,输入次 数超过三次则显示“你无权使用本系 统!”的提示。 解题思路:本题可以用字符串拆 取和合并的方法来解决。首先利 用LEN函数测得字符串的长度,并 由它确定循环的次数,循环中可 以用函数SUBSTR自左向右或自右 向左地逐个截取字符,然后对截 取的字符进行相应地处理,最后 再逐个将处理后的单个字符通过 运算符“+”合并在一起。 *exp_12.PRG* SET TALK OFF CLEAR ACCEPT “请输入一个字符串:“TO X C=SPACE(0) L=LEN(X) FOR I=1 TO L R= SUBSTR(X,I,1) C=R+C ENDFOR ?“字符串:“+X+“ 逆序输出后为:“+C SET TALK ON 例:编程从键盘上输入一个“字符串”,将它们逆 序输出。例如输入字符串“ABCD”,则输出“DCBA” *exp_13.PRG* SET TALK OFF CLEAR *上三角* FOR I=1 TO 4 ?SPACE(4-I) FOR J=1 TO 2*I-1 ?“*“ ENDFOR ENDFOR *下三角* FOR I=3 TO 1 STEP -1 ?SPACE(4-I) FOR J=1 TO 2*I-1 ?“*“ ENDFOR E
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车祸保险理赔协议书
- 阿斯克协议书
- 代持协议书房屋
- 房扺债协议书
- 湖北省荆门市八年级历史下册 第17课 科学技术的成就(一)说课稿 新人教版
- 校园节约调查与行动说课稿小学综合实践活动三年级湘科版
- 串行通信的协议书
- 跟工厂协议书
- 江门市中石油2025秋招笔试英语专练题库及答案
- 锦瑟说课稿中职基础课-基础模块 下册-高教版(2023)-(语文)-50
- 2025年全国中小学校党组织书记网络培训示范班在线考试题库及答案
- 2025年乡镇卫生院护士长绩效考核计划
- 中国自身免疫性胰腺炎诊治指南(上海2023)
- 人教版小学二年级上册数学口算题(全套)
- 2024年-2025年《公路养护》知识考试题库与答案
- NB-T31052-2014风力发电场高处作业安全规程
- FZ-T 01158-2022 纺织品 织物刺痒感的测定 振动音频分析法
- 工程部造价管控手册
- 汽车销售三方协议
- 氧气吸入的注意事项课件
- 20以内加减法口算题(10000道)(A4直接打印-每页100题)
评论
0/150
提交评论