VFP第4部分(循环结构)课件_第1页
VFP第4部分(循环结构)课件_第2页
VFP第4部分(循环结构)课件_第3页
VFP第4部分(循环结构)课件_第4页
VFP第4部分(循环结构)课件_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Visual Foxpro 6.0程序设计基础重庆工商大学计算机学院计算机基础教研室Visual Foxpro 6.0程序设计基础重庆工商大学计要点: 1.算法的概念及特点 2.掌握程序3种基本结构的表示 3.掌握利用分支结构编程 4.掌握利用循环结构编程 5.常用控件 第三、四、五讲 程序设计(1)要点: 第三、四、五讲 程序设计(1) 循环结构能够使某些语句或程序段重复执行若干次。 如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。 3循环结构常见的循环结构有:条件循环do while步长循环for 扫描循环scan涉及数据表的循环,第6章介绍 循环结构能够使某些语

2、句或程序段重复执行若干次。31)条件循环(do while循环) 格式: 流程图:条件语句序列Enddo之后的语句NY循环体 教材P621)条件循环(do while循环)条件语句序列Enddo之【例】计算1+2+3+100【例】计算1+2+3+100第 1 步, 计算 0+1;第 2 步, 计算 (0+1)+2;第 3 步, 计算 (0+1+2)+3; 第 i 步, 计算 (0+1+i-1)+i; . 第 100 步,计算 (0+1+99)+100; 递归算法前i-1次累加和第i次累加项第 1 步, 计算 0+1;递归算法前i-1次累加和第i三个“确定”循环三要素算法:确定循环变量i并赋初值

3、为1 定义s存放累加和,初值为0 确定循环条件 i=100s=s+i 确定循环变量的变化趋势i=i+1 输出结果s递推公式在条件循环中如何体现的?s=1+2+3+100三个“确定”算法:递推公式在条件循环中如何体现的?s=1+基本方法:属于“累加器”类型问题 (1)在进入累加前先给累加器赋初值 s=0(求和一般为0)(2)用循环语句实现累加 循环控制变量赋初值:i=1 循环条件:i=100 循环变量的改变规律:i=i+1(3)循环体语句的设计 s=s+i (累加器当前值=累加器原值+循环当前值) 基本方法:属于“累加器”类型问题 (1)在进入累加前先给累加 i=100s=s+i i=i+1s=

4、0, i=1开始结束输出sYN循环变量赋初值循环条件(i大于100就结束)循环变量的变化趋势从1变到100 i=100s=s+is=0, i=1开始结束输出sY“计算”按钮的click事件代码:s=0i=1do while i=100s=s+ii=i+1enddoThisform.text1.value=s循环体“计算”按钮的click事件代码:循环体【修改例3-8】计算s=1+2+3+n x: x=0 x=n x=x+1S: s=0 S=s+x【修改例3-8】计算s=1+2+3+n x: x=0S“计算”命令按钮的“click”事件代码:n=thisform.text1.value s=0

5、x=1do while x=ns=s+xenddothisform.text2.value=s “计算”命令按钮的“click”事件代码: 说明: 循环结构从do while开始,到enddo结束,两者必须成对出现;在enddo后面可以书写注释。 循环是否继续取决于条件的当前取值,一般情况下循环体中应含有改变条件取值的命令或语句,否则将造成死循环。 循环结构能自身嵌套(多重循环),还能与选择结构的各种形式嵌套。 说明:2)步长循环(forendfor计数循环) 格式: 教材P62确定循环变量并赋初值(在FOR中实现)确定循环条件并判断?(在FOR中实现)执行循环体中语句序列循环体变量按步长变化

6、(在FOR中实现)执行ENDFOR之后的语句2)步长循环(forendfor计数循环) 教材P6计算1+2+3+100s=0for i=1 to 100 s=s+iendforThisform.text1.value=sstep 1计算1+2+3+100s=0step 1(教材P60) 【例3-9】设计如图所示表单,在文本框text1中输入N的值,求N!。 如:123.100(教材P60) 【例3-9】设计如图所示表单,在文本框tex(1)给累乘器赋初值 p=1(一般为1)(2)用循环语句实现累乘 循环变量赋初值:i=1 循环条件:i= thisform.text1.value 循环变量改变规

7、律: i=i+1(3)循环体设计 p=p*i (累乘器当前值=累乘器原值*循环当前值 )基本方法:属于“累乘器”类型问题 (1)给累乘器赋初值基本方法:属于“累乘器”类型问题 输入ni=1,fac=1 i=1 fac=fac*n n=n-1 输出fac 求n!的N-S图输入n 求n!的N-S图输入n 求n!的N-S图“计算”命令按钮的“Click”事件代码:p=1for i=1 to thisform.text1.valuep=p*iendforthisform.text2.value=p “计算”命令按钮的“Click”事件代码:说明: 步长可正可负,缺省为1。 循环体中不应包含改变循环变量

8、值的命令,否则循环次数将随之改变。 如果循环可以通过计数来控制,则本循环比条件循环更为方便。说明:当循环 步长循环 在文本框Text1中输入终值n在文本框Text2中输入步长k i=1 for i=1 to n step k do while i=n endfor|next i=i+k endddo当循环 步长循环【练习1】求100以内的奇数和。A=1+3+5+99循环变量初值n=1循环条件n100循环变量的变化趋势n=n+2请同学们自己写出流程图和程序循环体累加语句:A=A+n【练习1】求100以内的奇数和。A=1+3+5+99循环【练习2】求循环变量初值x=1循环条件xn循环变量的变化趋势

9、x=x+1循环体累加语句:K=K+x2请同学们自己写出流程图和程序【练习2】求循环变量循环条件xn循环变量的变化循环体累加语【练习3】 请同学们自己写出流程图和程序【练习3】 请同学们自己写出流程图和程序s=0for i=1 to 100s=s+(-1)(i+1)/iendforthisform.text1.value=s方法1:方法2:s=0k=1for i=1 to 100s=s+k/ik=-kendforthisform.text1.value=ss=0方法1:方法2:s=0命令按钮的“click”事件代码:s1=0s2=0for i=1 to 99 step 2s1=s1+1/iend

10、forfor i=2 to 100 step 2s2=s2+1/iendforthisform.text1.value=s1-s2方法3:命令按钮的“click”事件代码:方法3:思考:计算e的近似值。其公式为:e1+1/1!1/2!1/3!1/N!,直到1/N!=0.000001s=s+1/pp=p*ii=i+1enddothisform.text1.value=s阶乘累加“计算”命令按钮的“click”事件代码:阶乘累加【例】求所有的水仙花数。(所谓水仙花数是指一个三位数,其各位数字的立方和等于该数本身。编程方法: “枚举法” 按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的

11、过程中,检验每个可能解是否是问题的真正解,若是,我们采纳这个解,否则抛弃它。对于所列举的值,既不能遗漏也不能重复。【例】求所有的水仙花数。(所谓水仙花数是指一个三位数,其各位查找范围:三位数100999任意一个三位数X百位数字X1十位数字X2个位数字X3判断这个三位数x是水仙花数的条件:X=x13+x23+x33查找范围:三位数100999任意一个三位数X百位数字X1十【练习4】 100以内能够被X整除的数之和。开始S=0,i=1输入Xi=100真输出s的值结束假i=i+1S=S+iMod(i,X)=0真假【练习4】 100以内能够被X整除的数之和。开始S=0,i=【练习5】找出所有的四位水仙

12、花数开始S=0,i=11000=i and i=9999真输出y结束假i=i+1分别取各位数Y=X真假计算各位数立方和y【练习5】找出所有的四位水仙花数开始S=0,i=11000【练习6】找出所有的三位回文数开始S=0,i=1100=i and i=999真输出i结束假i=i+1取个位数a1和百位数a3a1=a3真假【练习6】找出所有的三位回文数开始S=0,i=11008逆序:从右到左逐个取出8BjiY:65vA 11 10 9 8 7 6 5 4 3 2 1 次数i(循环变量):总次数=总的字符数c=c+substr(x,i,1)C=8BjiY:65vA substr(x,i,1)总的字符数

13、len(x)x=Av56:YijB8逆序:从右到左逐个取出8Bj确定变量:x:存任意字符串x= Av56:YijB8 i:存截取次数(1len(x)c:存逆序字符串 c=c+substr(x,i,1)确定算法:用循环在原字符串中从右到左逐个截取字符,重新组装成逆序字符串确定循环三要素:循环变量 : i (i初值为len(x),终值为1)循环条件: i=1循环条件改变:i=i-1(从右到左截取)确定变量:确定算法:用循环在原字符串中从右到左逐个截取字符,【例】输入一串ASCII字符,显示数字字符串。假设输入:Av56:YijB8 显示:568。 请同学们自己写出程序从左到右逐个取出字符x判断x是

14、数字的条件:Asc(x)asc(0) and Asc(x)8 显示: AYB 。 输入一串ASCII字符,显示小写字母串。假设输入: Av56:YijB8 显示:vij 。请同学们自己写出程序【例】输入一串ASCII字符,显示大写字母串。假设输入:Av【例】如图所示一程序界面。文本框TEXT1已经输入一串文字,单击“转换”命令按钮后,文本框的值将变为什么?“转换” 命令按钮的CLICK 事件代码:N=LEN(THISFORM.TEXT1.VALUE)Y=DO WHILE N0 X=SUBSTR(THISFORM.TEXT1.VALUE,N,1) IF ASC(X)=ASC(a) X=UPPER

15、(X) ELSE X=LOWER(X) ENDIF Y=X+YN=N-1ENDDOTHISFORM.TEXT1.VALUE=YtHIS IS A cpu.【例】如图所示一程序界面。文本框TEXT1已经输入一串文字,【练习7】输入一个正整数判断这个是几位数。Command1_click:x=thisform.text1.valueW=0 &位数计数器If int(x)=x and x=0 do while x=1 x=int(x/10) w=w+1 enddo messagebox(你输入的是一个+alltrim(str(w)+位数)Else messagebox(请输入正整数.)endif拓展

16、【练习7】输入一个正整数判断这个是几位数。Command1_【练习8】将整数x中每一位上为奇数的数依次取出,并逆序构成一个新数返回。例如:程序运行时输入123456789,输出:b=97531。Command1_click:x=thisform.text1.valuey=0 If int(x)=x and x=0 do while x=1 x1=mod(x,10) &记录从后向前的每一位数 IF x1%2=1 &判断每一位是否为奇数 y=y*10+x1 &逆序组合新数 endif x=int(x/10) enddoElse messagebox(请输入正整数.)endif【练习8】将整数x中每一位上为奇数的数依次取出,并逆序构成一【练习9】有一数列:1,1,2,3,5,8,13求出这个数列的前30项之和。(注意分子与分母的变化规律。)Command1_click:x=1a=1b=1W=a+b &和计数器do while x=28 c=a+b &计算第n项的值 w=w+c a=b &为计算第n+1项做准备 b=c x=x+1enddomessagebox(“前30项的和是:+alltrim(str(w)【练习9】有一数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论