《VFP第4部分(循环结构)课件.ppt》由会员分享,可在线阅读,更多相关《VFP第4部分(循环结构)课件.ppt(43页珍藏版)》请在三一办公上搜索。
1、Visual Foxpro 6.0,程序设计基础,重庆工商大学计算机学院计算机基础教研室,Visual Foxpro 6.0程序设计基础重庆工商大学计,要点: 1.算法的概念及特点 2.掌握程序3种基本结构的表示 3.掌握利用分支结构编程 4.掌握利用循环结构编程 5.常用控件,第三、四、五讲 程序设计(1),要点: 第三、四、五讲 程序设计(1),循环结构能够使某些语句或程序段重复执行若干次。 如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。,3循环结构,常见的循环结构有:,条件循环do while,步长循环for,扫描循环scan,涉及数据表的循环,第6章介绍,循
2、环结构能够使某些语句或程序段重复执行若干次。3,1)条件循环(do while循环) 格式: 流程图:,条件,语句序列,Enddo之后的语句,N,Y,循环体,教材P62,1)条件循环(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,三
3、个“确定”循环三要素,算法:确定循环变量i并赋初值为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 (累加器当前值=累加器原值+循环当前值),基本方法:属于“累加器”类型问题 (
4、1)在进入累加前先给累加,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+1,S: s=0 S=s+x,【修改例3-8】计算s=1+2+3+n x: x=0S,“计算”命令按钮的“click”事件代码:n=thisform.text1.value s=0 x=1do while x=ns=s+xenddothisform.
5、text2.value=s,“计算”命令按钮的“click”事件代码:,说明: 循环结构从do while开始,到enddo结束,两者必须成对出现;在enddo后面可以书写注释。 循环是否继续取决于条件的当前取值,一般情况下循环体中应含有改变条件取值的命令或语句,否则将造成死循环。 循环结构能自身嵌套(多重循环),还能与选择结构的各种形式嵌套。,说明:,2)步长循环(forendfor计数循环) 格式:,教材P62,2)步长循环(forendfor计数循环) 教材P6,计算1+2+3+100,s=0for i=1 to 100 s=s+iendforThisform.text1.value=s
6、,step 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 循环变量改变规律: i=i+1(3)循环体设计 p=p*i (累乘器当前值=累乘器原值*循环当前值 ),基本方法:,属于“累乘器”类型问题,(1)给累乘器赋初值基本方法:属于“累乘器”类型问题,输入n 求n!的N-S图输入n
7、 求n!的N-S图,“计算”命令按钮的“Click”事件代码:p=1for i=1 to thisform.text1.valuep=p*iendforthisform.text2.value=p,“计算”命令按钮的“Click”事件代码:,说明: 步长可正可负,缺省为1。 循环体中不应包含改变循环变量值的命令,否则循环次数将随之改变。 如果循环可以通过计数来控制,则本循环比条件循环更为方便。,说明:,当循环 步长循环 在文本框Text1中输入终值n在文本框Text2中输入步长k i=1 for i=1 to n step k do while i endfor|next i=i+k endd
8、do,当循环 步长循环,【练习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,循环变量的变化趋势x=x+1,循环体累加语句:K=K+x2,请同学们自己写出流程图和程序,【练习2】求循环变量循环条件xn循环变量的变化循环体累加语,【练习3】,请同学们自己写出流程图和程序,【练习3】 请同学们自己写出流程图和程序,s=0for i=1 to 100s=s+(-1)(i
9、+1)/iendforthisform.text1.value=s,方法1:,方法2:,s=0k=1for i=1 to 100s=s+k/ik=-kendforthisform.text1.value=s,s=0方法1:方法2:s=0,命令按钮的“click”事件代码:s1=0s2=0for i=1 to 99 step 2s1=s1+1/iendforfor i=2 to 100 step 2s2=s2+1/iendforthisform.text1.value=s1-s2,方法3:,命令按钮的“click”事件代码:方法3:,思考:计算e的近似值。其公式为:e1+1/1!1/2!1/3!
10、1/N!,直到1/N!0.000001为止。,思考:计算e的近似值。其公式为:e1+1/1!1/2!,“计算”命令按钮的“click”事件代码:s=1i=2p=1do while 1/p=0.000001s=s+1/pp=p*ii=i+1enddothisform.text1.value=s,阶乘,累加,“计算”命令按钮的“click”事件代码:阶乘累加,【例】求所有的水仙花数。(所谓水仙花数是指一个三位数,其各位数字的立方和等于该数本身。,编程方法: “枚举法” 按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解,若是,我们采纳这个解,否则
11、抛弃它。对于所列举的值,既不能遗漏也不能重复。,【例】求所有的水仙花数。(所谓水仙花数是指一个三位数,其各位,查找范围:,三位数100999,任意一个三位数,判断这个三位数x是水仙花数的条件:X=x13+x23+x33,查找范围:三位数100999任意一个三位数X百位数字X1十,【练习4】 100以内能够被X整除的数之和。,【练习4】 100以内能够被X整除的数之和。开始S=0,i=,【练习5】找出所有的四位水仙花数,【练习5】找出所有的四位水仙花数开始S=0,i=11000,【练习6】找出所有的三位回文数,开始,S=0,i=1,100=i and i=999,真,输出i,结束,假,i=i+1
12、,取个位数a1和百位数a3,a1=a3,真,假,【练习6】找出所有的三位回文数开始S=0,i=1100=i,(教材P60-61) 【例3-10】设计如图1所示表单。运行该表单,在文本框Text1中输入一串字符,单击“逆序显示”命令按钮后,逆序显示该字符串,如图2所示。,图1,图2,(教材P60-61) 【例3-10】设计如图1所示表单。运行,x=Av56:YijB8,8,B,j,i,Y,:,6,5,v,A,c=c+substr(x,i,1),x=Av56:YijB8逆序:从右到左逐个取出8Bj,确定变量:x:存任意字符串x= Av56:YijB8 i:存截取次数(1len(x)c:存逆序字符串
13、 c=c+substr(x,i,1),确定算法:用循环在原字符串中从右到左逐个截取字符,重新组装成逆序字符串,确定循环三要素:循环变量 : i (i初值为len(x),终值为1)循环条件: i=1循环条件改变:i=i-1(从右到左截取),确定变量:确定算法:用循环在原字符串中从右到左逐个截取字符,,【例】输入一串ASCII字符,显示数字字符串。假设输入:Av56:YijB8 显示:568。,请同学们自己写出程序,从左到右逐个取出字符x,判断x是数字的条件:,Asc(x)asc(0) and Asc(x)asc(9),【例】输入一串ASCII字符,显示数字字符串。假设输入:Av,【例】输入一串A
14、SCII字符,显示大写字母串。假设输入:Av56:YijB8 显示: 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=U
15、PPER(X) ELSE X=LOWER(X) ENDIF Y=X+YN=N-1ENDDOTHISFORM.TEXT1.VALUE=Y,tHIS 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(请输入正整数.
16、)endif,拓展,【练习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(请输入正整数.)endi
17、f,【练习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,1,2,3,5,8,13求出这个,【练习10】有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13求出这个数列的前20项之和。(注意分子与分母的变化规律。),Command1_click:w=0 &和计数器a=2 &记录分子b=1 &记录分母x=1do while x=20 w=w+a/b c=a a=b+a &形成下一项的分子 b=a &形成下一项的分母 x=x+1enddomessagebox(“前20项的和是:+alltrim(str(w),【练习10】有一分数序列:2/1,3/2,5/3,8/5,1,