vfp循环语句
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章 程序设计基础
第四节 循环结构程序设计 循环结构是专门解决按照 一定的条件在程序的某处重复 执行具有特定功能的某一程序 段这样的问题的。
循环结构
• DO WHILE 循环 – DO WHILE <条件> – <循环体> – ENDDO • FOR 循环 – FOR <循环变量>=<初值> TO <终值> [STEP <步长>] – <循环体> – ENDFOR/NEXT • SCAN 循环 – SCAN [<范围>] [FOR/WHILE <条件>] – <循环体> – ENDSCAN
例:显示jsdn.dbf中女教师的姓 名和职称。
use jsdn locate for 性别=‟女’ do while found() ? 姓名+‟ „+职称 continue enddo use jsdn scan for 性别=‟女’ ? 姓名+‟ „+职称 endscan
SCAN <循环体> ENDSCAN
CLEAR S=0 FOR I=1 TO 100 STEP 1 S=S+I NEXT ?”1-100的和为:”,s
Hale Waihona Puke CLEAR FOR I=1 TO 5 ?? I ENDFOR ? FOR I=1 TO 10 STEP 2 ?? I ENDFOR ? FOR I=10 TO 1 STEP -2 ?? I ENDFOR
例:在显示器上逐行显示1~15 这15个数字。
CLEAR I=1 DO WHILE I<=15 ?I I=I+1 ENDDO RETURN
例:从键盘上输入10个数,求这十个数之和。 CLEAR S=0 K=1 DO WHILE K<=10 INPUT „请输入一个数:’ TO A S=S+A K=K+1 ENDDO ?S
例:编程显示乘法口诀表,要 求输出八十一个公式。
@ a,8*(b-1) say str(a,1)+'*'+str(b,1)+'='+str(c,2)
二、步长型循环语句FOR
FOR〈变量名〉=〈数值表达式1〉TO〈数值 表达式2〉[STEP〈数值表达式3〉] 〈循环体〉 ENDFOR | NEXT
功能:当〈变量名〉指定的变量之值没 有越过由〈数值表达式2〉确定的数值时 反复执行循环体,直到变量之值越过由 〈数值表达式2〉确定的数值。
解法一:
clear use gs do while !eof() m=max(得分1,得分2,得分3,得分4,得分5,得分6,得分7,得分8) n=min(得分1,得分2,得分3,得分4,得分5,得分6,得分7,得分8) x=得分1+得分2+得分3+得分4+得分5+得分6+得分7+得分8 replace 最后得分 with (x-m-n)/6 skip enddo disp all use
clear use gs scan m=max(得分1,得分2,得分3,得分4,得分5,得分6,得分7,得分8) n=min(得分1,得分2,得分3,得分4,得分5,得分6,得分7,得分8) x=得分1+得分2+得分3+得分4+得分5+得分6+得分7+得分8 replace 最后得分 with (x-m-n)/6 endscan disp all use
例:从键盘输入十个数,显示最大数、最小数。
CLEAR INPUT '输入第1个数:' TO X STORE X TO Y I=2 DO WHILE I<=10 J=ALLTRIM(str(I,2)) INPUT '输入第&j.个数:' TO A X=MAX(A,X) Y=MIN(A,Y) I=I+1 ENDDO ? '最大数:'+ALLTRIM(str(X))+' 最小数:'+ALLTRIM(str(Y))
例:计算1+2+3+…+100的和。 开始 clear s=0 i=1 do while i<=100 s=s+i i=i+1 enddo ?”1-100的和为:”,s return
给变量赋初值 s=0,i=1
i<=100? Y s=s+i i=i+1 N
输出求和结果s
结束
N=〈循环次数〉 I=1 DO WHILE I<=N 〈执行某任务的语句系列〉 I=I+1 ENDDO 循环控制部分可以分为三部分:(1)循环 控制变量初始值的设置。(2)循环控制 变量终止值的设定。(3)循环控制变量值 的修改。
处 理 一 条 记 录 的 命 令 序 列
Use jsdn do while not eof() do case case 职称="教授" repl 基本工资with 基本工资+100 case 职称="副教授" repl 基本工资with 基本工资+70 case 职称="讲师" repl 基本工资with 基本工资+50 case 职称="助教" repl 基本工资with 基本工资+30 endcase skip enddo use
例:编程显示用星号组成的平 行四边形。 例:编程显示用星号组成的三 角形。 例:编程显示用星号组成的菱 形。
1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9
clear a=1 b=1 do while b<=9 c=a*b b=b+1 enddo
例:设s=1*2*3*4……*n,求S不大于 400000时最大的n。
CLEAR N=1 S=1 DO WHILE S<=400000 N=N+1 S=S*N ENDDO ? 'N='+ALLT(STR(N-1))
例:编程显示用星号组成的平 行四边形。 例:编程显示用星号组成的三 角形。 例:编程显示用星号组成的菱 形。
一、条件循环语句 ( 当型循环语句)
DO WHILE <条件表达式> 〈条件表达式值为真时需反复执行 的语句系列〉 ENDDO
循环说明部分
DO WHILE<条件表达式> 〈条件表达式值为真时 需反复执行的语句系列〉 ENDDO
循环体 循环结束部分
条件? 条件? Y
N
循环体
功能:当条件表达式值 ENDDO后面的语句 为真时反复执行循环体, 直到条件表达式值为假 时为止。
例:编程求2+4+6+8+……+100 的值。 例:从键盘输入十个数,判断 其中有几个奇数、几个偶数。
例:从键盘输入十个数,显示最大数、最小数。
CLEAR INPUT '输入一个数:' TO X STORE X TO Y I=2 DO WHILE I<=10 INPUT '输入一个数:' TO A X=MAX(A,X) Y=MIN(A,Y) I=I+1 ENDDO ? '最大数:'+ALLTRIM(str(X))+'最小数: '+ALLTRIM(str(Y))
定位输出命令 命令基本格式: @<行,列>[SAY<表达式>] 功能:在屏幕的指定行列输出SAY子句 的表达式值。 说明:(1)<行,列>表示数据在窗口 中显示的位置,行自顶向下编号,列自 左向右编号,编号均从0开始。行与列 都是数值表达式。(2)<表达式>可以 是常量、内存变量、字段变量,也可以 是任何类型合法的表达式。
例:在显示器 上逐行显示1~ 30这30个 数字。
CLEAR I=1 DO WHILE I<=30 ?I I=I+1 ENDDO RETURN
CLEAR FOR I=1 TO 30 STEP 1 ?I ENDFOR
例:求 1+2+3+……+ 100的值。
s=0 i=1 do while i<=100 s=s+i i=i+1 enddo ?”1-100的和为:”,s
三、扫描循环语句
模式一: … USE〈表文件〉 … GO TOP !EOF() DO WHILE EOF()=.F. 〈处理一条记录的命令序列〉 NOT EOF() SKIP ENDDO USE …
例:将jsdn.dbf中所有职称为 教授的基本工资增加100元, 副教授增加70元,讲师增加 50元,助教增加30元。
解法二:
use gs do while !eof() i=2 store 得分1 to m,n,x do while i<=8 j=str(i,1) m=max(m,得分&j) n=min(n,得分&j) x=x+得分&j i=i+1 enddo replace 最后得分with (x-m-n)/6 skip enddo use
例:从键盘输入十个数,显示最大数、最小数。
CLEAR INPUT '输入一个数:' TO X STORE X TO Y I=2 DO WHILE I<=10 INPUT '输入一个数:' TO A X=MAX(A,X) Y=MIN(A,Y) I=I+1 ENDDO ? '最大数:'+ALLTRIM(str(X))+'最小 数:'+ALLTRIM(str(Y))
例:编程输出1*1=1 1*2=2…………1*9=9被乘 数是1的九个乘法公式。
@ a,8*(b-1) say str(a,1)+'*'+str(b,1)+'='+str(c,2)
clear a=1 do while a<=9 b=1 do while b<=9 c=a*b b=b+1 enddo a=a+1 enddo
clear for n=100 to 999 w=str(n,3) a=substr(w,1,1) b=substr(w,2,1) c=substr(w,3,1) if n=val(a)^3+val(b)^3+val(c)^3 ?n endif endfor
k=0 for a =1 to 9 for b=0 to 9 for c=0 to 9 m=100*a+10*b+c n=a**3+b**3+c**3 if m=n k=k+1 @ k,5 say m endif next next next
1 2 3 4 5 1 3 5 7 9 10 8 6 4 2
例:有一个由20个数组成的 数列,它的前两个数为0,1, 第三个数为第一、第二个数之 和,第四个数为第二、第三个 数之和,以此类推,编程计算 并显示该数列。
例、从键盘输入一个正整数,要 求编程完成如下操作:(1)判断 这个整数是几位数;(2)分别显 示每个数位上的数;(3)按照逆 序显示每个数位上的数字。
例:编程显示26个大写英文字母 和它们的ASCII码值,每行显示 10个字母。
例:编程程序,建立并输出一个 10×10的矩阵,该矩阵两条对角 线元素为1,其余元素均为0。
例:若一个三位自然数的值等 于该数各位数字的立方和,则 这个自然数叫做“水仙花数”, 例如153=1^3+5^3+3^3,153是 一个水仙花数,请编写程序求 出所有水仙花数。
初始值->循环控制变量
N
变量值是否在初始值与终止值之间
Y 执行循环体内各语句 循环控制变量=循环控制变量+步长
执行ENDFOR后面的语句
FOR〈变量名〉=〈数值表达式1〉TO〈数值 表达式2〉[STEP〈数值表达式3〉] 〈循环体〉 ENDFOR | NEXT
功能:当〈变量名〉指定的变量之值没 有越过由〈数值表达式2〉确定的数值时 反复执行循环体,直到变量之值越过由 〈数值表达式2〉确定的数值。
模式二: GO BOTTOM DO WHILE NOT BOF() <处理一条记录的命令序列> SKIP –1 ENDDO
模式三: LOCATE FOR <逻辑表达式> DO WHILE FOUND() <对满足条件的记录作某种处理> CONTINUE ENDDO
SCAN[<范围>][FOR〈条件1〉] <循环体> ENDSCAN 本语句的功能是在打开的当前表中 从上到下移动记录指针,当遇到符 合指定条件的记录时就执行循环体 中的各条语句。
例:逐条显示student表中所有记录, 每次一条记录,由用户按任意键显示 下一条记录。 clear use student scan display wait “按任意键显示下一条记 录……” endscan use
例:已知一次歌手大奖赛共有八位 评委,所有歌手的姓名和评委给他 们打的分数放在gs.dbf中,编程计 算每位歌手的最后得分,并存入 “最后得分”字段。最后得分的计 算方法是:去掉一个最高分,再去 掉一个最低分,取剩余六个分数的 平均值。
第四节 循环结构程序设计 循环结构是专门解决按照 一定的条件在程序的某处重复 执行具有特定功能的某一程序 段这样的问题的。
循环结构
• DO WHILE 循环 – DO WHILE <条件> – <循环体> – ENDDO • FOR 循环 – FOR <循环变量>=<初值> TO <终值> [STEP <步长>] – <循环体> – ENDFOR/NEXT • SCAN 循环 – SCAN [<范围>] [FOR/WHILE <条件>] – <循环体> – ENDSCAN
例:显示jsdn.dbf中女教师的姓 名和职称。
use jsdn locate for 性别=‟女’ do while found() ? 姓名+‟ „+职称 continue enddo use jsdn scan for 性别=‟女’ ? 姓名+‟ „+职称 endscan
SCAN <循环体> ENDSCAN
CLEAR S=0 FOR I=1 TO 100 STEP 1 S=S+I NEXT ?”1-100的和为:”,s
Hale Waihona Puke CLEAR FOR I=1 TO 5 ?? I ENDFOR ? FOR I=1 TO 10 STEP 2 ?? I ENDFOR ? FOR I=10 TO 1 STEP -2 ?? I ENDFOR
例:在显示器上逐行显示1~15 这15个数字。
CLEAR I=1 DO WHILE I<=15 ?I I=I+1 ENDDO RETURN
例:从键盘上输入10个数,求这十个数之和。 CLEAR S=0 K=1 DO WHILE K<=10 INPUT „请输入一个数:’ TO A S=S+A K=K+1 ENDDO ?S
例:编程显示乘法口诀表,要 求输出八十一个公式。
@ a,8*(b-1) say str(a,1)+'*'+str(b,1)+'='+str(c,2)
二、步长型循环语句FOR
FOR〈变量名〉=〈数值表达式1〉TO〈数值 表达式2〉[STEP〈数值表达式3〉] 〈循环体〉 ENDFOR | NEXT
功能:当〈变量名〉指定的变量之值没 有越过由〈数值表达式2〉确定的数值时 反复执行循环体,直到变量之值越过由 〈数值表达式2〉确定的数值。
解法一:
clear use gs do while !eof() m=max(得分1,得分2,得分3,得分4,得分5,得分6,得分7,得分8) n=min(得分1,得分2,得分3,得分4,得分5,得分6,得分7,得分8) x=得分1+得分2+得分3+得分4+得分5+得分6+得分7+得分8 replace 最后得分 with (x-m-n)/6 skip enddo disp all use
clear use gs scan m=max(得分1,得分2,得分3,得分4,得分5,得分6,得分7,得分8) n=min(得分1,得分2,得分3,得分4,得分5,得分6,得分7,得分8) x=得分1+得分2+得分3+得分4+得分5+得分6+得分7+得分8 replace 最后得分 with (x-m-n)/6 endscan disp all use
例:从键盘输入十个数,显示最大数、最小数。
CLEAR INPUT '输入第1个数:' TO X STORE X TO Y I=2 DO WHILE I<=10 J=ALLTRIM(str(I,2)) INPUT '输入第&j.个数:' TO A X=MAX(A,X) Y=MIN(A,Y) I=I+1 ENDDO ? '最大数:'+ALLTRIM(str(X))+' 最小数:'+ALLTRIM(str(Y))
例:计算1+2+3+…+100的和。 开始 clear s=0 i=1 do while i<=100 s=s+i i=i+1 enddo ?”1-100的和为:”,s return
给变量赋初值 s=0,i=1
i<=100? Y s=s+i i=i+1 N
输出求和结果s
结束
N=〈循环次数〉 I=1 DO WHILE I<=N 〈执行某任务的语句系列〉 I=I+1 ENDDO 循环控制部分可以分为三部分:(1)循环 控制变量初始值的设置。(2)循环控制 变量终止值的设定。(3)循环控制变量值 的修改。
处 理 一 条 记 录 的 命 令 序 列
Use jsdn do while not eof() do case case 职称="教授" repl 基本工资with 基本工资+100 case 职称="副教授" repl 基本工资with 基本工资+70 case 职称="讲师" repl 基本工资with 基本工资+50 case 职称="助教" repl 基本工资with 基本工资+30 endcase skip enddo use
例:编程显示用星号组成的平 行四边形。 例:编程显示用星号组成的三 角形。 例:编程显示用星号组成的菱 形。
1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9
clear a=1 b=1 do while b<=9 c=a*b b=b+1 enddo
例:设s=1*2*3*4……*n,求S不大于 400000时最大的n。
CLEAR N=1 S=1 DO WHILE S<=400000 N=N+1 S=S*N ENDDO ? 'N='+ALLT(STR(N-1))
例:编程显示用星号组成的平 行四边形。 例:编程显示用星号组成的三 角形。 例:编程显示用星号组成的菱 形。
一、条件循环语句 ( 当型循环语句)
DO WHILE <条件表达式> 〈条件表达式值为真时需反复执行 的语句系列〉 ENDDO
循环说明部分
DO WHILE<条件表达式> 〈条件表达式值为真时 需反复执行的语句系列〉 ENDDO
循环体 循环结束部分
条件? 条件? Y
N
循环体
功能:当条件表达式值 ENDDO后面的语句 为真时反复执行循环体, 直到条件表达式值为假 时为止。
例:编程求2+4+6+8+……+100 的值。 例:从键盘输入十个数,判断 其中有几个奇数、几个偶数。
例:从键盘输入十个数,显示最大数、最小数。
CLEAR INPUT '输入一个数:' TO X STORE X TO Y I=2 DO WHILE I<=10 INPUT '输入一个数:' TO A X=MAX(A,X) Y=MIN(A,Y) I=I+1 ENDDO ? '最大数:'+ALLTRIM(str(X))+'最小数: '+ALLTRIM(str(Y))
定位输出命令 命令基本格式: @<行,列>[SAY<表达式>] 功能:在屏幕的指定行列输出SAY子句 的表达式值。 说明:(1)<行,列>表示数据在窗口 中显示的位置,行自顶向下编号,列自 左向右编号,编号均从0开始。行与列 都是数值表达式。(2)<表达式>可以 是常量、内存变量、字段变量,也可以 是任何类型合法的表达式。
例:在显示器 上逐行显示1~ 30这30个 数字。
CLEAR I=1 DO WHILE I<=30 ?I I=I+1 ENDDO RETURN
CLEAR FOR I=1 TO 30 STEP 1 ?I ENDFOR
例:求 1+2+3+……+ 100的值。
s=0 i=1 do while i<=100 s=s+i i=i+1 enddo ?”1-100的和为:”,s
三、扫描循环语句
模式一: … USE〈表文件〉 … GO TOP !EOF() DO WHILE EOF()=.F. 〈处理一条记录的命令序列〉 NOT EOF() SKIP ENDDO USE …
例:将jsdn.dbf中所有职称为 教授的基本工资增加100元, 副教授增加70元,讲师增加 50元,助教增加30元。
解法二:
use gs do while !eof() i=2 store 得分1 to m,n,x do while i<=8 j=str(i,1) m=max(m,得分&j) n=min(n,得分&j) x=x+得分&j i=i+1 enddo replace 最后得分with (x-m-n)/6 skip enddo use
例:从键盘输入十个数,显示最大数、最小数。
CLEAR INPUT '输入一个数:' TO X STORE X TO Y I=2 DO WHILE I<=10 INPUT '输入一个数:' TO A X=MAX(A,X) Y=MIN(A,Y) I=I+1 ENDDO ? '最大数:'+ALLTRIM(str(X))+'最小 数:'+ALLTRIM(str(Y))
例:编程输出1*1=1 1*2=2…………1*9=9被乘 数是1的九个乘法公式。
@ a,8*(b-1) say str(a,1)+'*'+str(b,1)+'='+str(c,2)
clear a=1 do while a<=9 b=1 do while b<=9 c=a*b b=b+1 enddo a=a+1 enddo
clear for n=100 to 999 w=str(n,3) a=substr(w,1,1) b=substr(w,2,1) c=substr(w,3,1) if n=val(a)^3+val(b)^3+val(c)^3 ?n endif endfor
k=0 for a =1 to 9 for b=0 to 9 for c=0 to 9 m=100*a+10*b+c n=a**3+b**3+c**3 if m=n k=k+1 @ k,5 say m endif next next next
1 2 3 4 5 1 3 5 7 9 10 8 6 4 2
例:有一个由20个数组成的 数列,它的前两个数为0,1, 第三个数为第一、第二个数之 和,第四个数为第二、第三个 数之和,以此类推,编程计算 并显示该数列。
例、从键盘输入一个正整数,要 求编程完成如下操作:(1)判断 这个整数是几位数;(2)分别显 示每个数位上的数;(3)按照逆 序显示每个数位上的数字。
例:编程显示26个大写英文字母 和它们的ASCII码值,每行显示 10个字母。
例:编程程序,建立并输出一个 10×10的矩阵,该矩阵两条对角 线元素为1,其余元素均为0。
例:若一个三位自然数的值等 于该数各位数字的立方和,则 这个自然数叫做“水仙花数”, 例如153=1^3+5^3+3^3,153是 一个水仙花数,请编写程序求 出所有水仙花数。
初始值->循环控制变量
N
变量值是否在初始值与终止值之间
Y 执行循环体内各语句 循环控制变量=循环控制变量+步长
执行ENDFOR后面的语句
FOR〈变量名〉=〈数值表达式1〉TO〈数值 表达式2〉[STEP〈数值表达式3〉] 〈循环体〉 ENDFOR | NEXT
功能:当〈变量名〉指定的变量之值没 有越过由〈数值表达式2〉确定的数值时 反复执行循环体,直到变量之值越过由 〈数值表达式2〉确定的数值。
模式二: GO BOTTOM DO WHILE NOT BOF() <处理一条记录的命令序列> SKIP –1 ENDDO
模式三: LOCATE FOR <逻辑表达式> DO WHILE FOUND() <对满足条件的记录作某种处理> CONTINUE ENDDO
SCAN[<范围>][FOR〈条件1〉] <循环体> ENDSCAN 本语句的功能是在打开的当前表中 从上到下移动记录指针,当遇到符 合指定条件的记录时就执行循环体 中的各条语句。
例:逐条显示student表中所有记录, 每次一条记录,由用户按任意键显示 下一条记录。 clear use student scan display wait “按任意键显示下一条记 录……” endscan use
例:已知一次歌手大奖赛共有八位 评委,所有歌手的姓名和评委给他 们打的分数放在gs.dbf中,编程计 算每位歌手的最后得分,并存入 “最后得分”字段。最后得分的计 算方法是:去掉一个最高分,再去 掉一个最低分,取剩余六个分数的 平均值。