尉文刚
[摘 要] 中职计算机专业班的《数据库应用基础—Visual FoxPro(第三版)》教学中发现学生在For循环语句的理解及应用环节存在较大困难,尤其是用For循环语句进行程序设计。结合学生实际学情,详细分析问题原因,通过深入剖析For循环语句格式,探索总结在用For循环语句进行程序设计时将对For循环语句格式的理解与实际问题的解决方法巧妙结合的方法心得,提出“Visual FoxPro中For循环的理解及应用”心得来解决教学中发现的问题,并应用于实践,在教学实践中取得了良好的效果。
[關 键 词] 循环结构;循环嵌套;循环控制变量
[中图分类号] G633.67 [文献标志码] A [文章编号] 2096-0603(2020)03-0148-02
笔者根据教学中对Visual FoxPro提供的程序结构的认识和对For循环语句格式的理解,以“每行8个数输出500以内的素数”案例为例,谈谈从For循环语句格式中学应用的几点心得。Visual FoxPro提供了3种基本的程序结构:顺序结构、选择结构和循环结构。循环结构的程序可以根据指定的条件重复执行某个程序段。Visual FoxPro提供了3种循环结构:基于条件的循环(Do-while循环)、针对记录的循环(Scan循环)和指定次数的循环(For循环)。在程序设计时如果事先知道循环执行的次数,则可以使用For循环语句编写程序。
一、For循环语句格式理解
(一)For循环语句格式
For<循环控制变量>=<初值> To<终值>[Step步长]①
<语句组> ②
Endfor
(二)对For循环语句格式的理解
1.For和Endfor分别表示For循环语句的开始和结束,且必须成对出现,缺一不可。
2.①处通过“循环控制变量”的“初值”“终值”及值变化的“步长”(缺省“Step步长”,则步长为1)确定了循环执行的次数。确定方法:“循环控制变量”的值从“初值”以步长为幅度递变到“终值”,循环控制变量在区间(初值,终值)有多少个值循环将执行多少次,例如:For i=1 to 9 Step 2中,i从1开始以2为步长递增到9,确定该循环执行的次数为5次(即i=1,3,5,7,9时执行)。
3.②处“语句组”决定循环执行的操作(完成的具体任务),当循环控制变量的值在“初值”-“终值”确定的范围内时执行“语句组”;否则,不执行“语句组”,执行Endfor之后的语句。
4.有些应用中①处“循环控制变量”只起控制循环执行次数的作用,有些应用中①处“循环控制变量”不仅起控制循环执行次数的作用,还参与完成3中②处循环所执行操作任务的实现,本文所举的案例属于这种情况。
(三)循环嵌套
循环嵌套是逻辑程序中常用的方法,在一个循环语句的语句组中又包含另一个循环语句,称为循环嵌套。如果完成一个任务需要进行重复的操作,并且每个操作本身又需要进行重复的操作,这种问题常常使用循环嵌套来解决。出现循环嵌套的循环语句在执行时内层循环作为外层循环“语句组”的一部分,按照实际循环语句的执行流程执行。在程序设计时,可以根据实现任务所确定的算法选择循环嵌套的实际情况,本文所举案例的循环嵌套是在For循环的“语句组”中嵌套了一个For语句。
二、For循环语句应用案例——每行8个数输出500以内的素数
(一)案例输出结果
(二)案例分析
1.分析该案例任务:(1)需要依次对500以内的每一个数i重复进行如下操作:判断i是否是素数,如果i是素数,则按照案例要求输出;如果i不是素数,则不输出。(2)判断i是否是素数时,根据选择的算法,需要依次对2-(i-1)之间的每一个数j重复进行如下操作:如果i能被j整除,则i不是素数;如果i不能被j整除,则i是素数。综上分析,该案例的任务需要使用循环嵌套来实现:(1)中是外层For语句;(2)中是内层For语句。
2.根据对For循环语句格式的理解,结合案例任务操作的对象——500以内的素数,在设计外层For循环语句格式时:首先,使循环控制变量i初值为2,i按照正整数变化规律递增至500,使其在递增过程中依次代表500以内的正整数,即:For i=2 to 500。其次,在<语句组>中实现:(1)判断i是否为素数;(2)若是,按要求每行8个数输出素数i。
3.判断i是否为素数实现方法:(1)程序中引入标记i是否为素数的变量yn,若i是素数,yn值为1,否则yn值为0。因i初值为2是素数,故yn初始值为1(yn=1出现在外层For语句的“语句组”中)。(2)设计内层For语句格式,确定i是否为素数:若i能被2至i-1内的任意一个数j(j的引入是为了判断i是否为素数,内层For语句格式为:For j=2 to i-1)整除(内层For“语句组”:if i/j=0),则i不是素数,yn值变为0(if语句的“语句组”实现:yn=0);否则i为素数,yn值不变。
4.每行8个数输出素数实现方法:(1)程序中引入计数器作用的变量ct,目的是实现“每行输出8个数”的案例要求,其初始值为0(赋值操作ct=0在外层For语句之前完成)。(2)每不换行输出2中的素数i(i),ct值增一(ct=ct+1),如果ct是8的整数倍(if ct%8=0),则换行()。由于(2)处操作的对象是2中判断出的素数i,故该处操作的实现语句是外层For语句的“语句组”。
5.执行一次外层For语句的“语句组”(2-3)后,循环控制变量i值增1,按照For语句执行流程循环执行2-3,直至循环控制变量i值递增为501(501>500)时终止循环的执行。
(三)案例的实现程序
*For语句应用——每行8个数输出500以内的素数
CLEAR
“500以内素数为:”
ct=0 &&计数器作用
for i=2 to 500 &&外层For循环开始
yn=1 &&标记i是素数
for j=2 to i-1 &&内层For循环开始
if i%j =0 &&判断i是否为素数
yn=0 &&标记i不是素数
endif
endfor &&内层For循环结束
if yn=1 &&此时i是素数
i &&不换行输出素数i
ct=ct+1 &&统计输出素数i的个数
if ct%8=0 &&按要求每行8个数输出
endif
endif
endfor &&外层For循环结束
return
从上述內容我们可以看出,在For语句格式的理解中,我们从四个方面对For语句格式做了彻底认识;在循环嵌套的理解中我们根据出现循环嵌套的实际情况对循环嵌套做了深刻的理解;在案例中我们紧扣For语句格式的理解,实现案例任务时巧妙地与解决实际问题的方法相结合,达到准确深刻地理解知识点、巧妙高效地解决实际问题的目的,在实际教学中取得不错的教学效果。
参考文献:
[1]周察金.数据库应用基础:Visual FoxPro[M].3版.高等教育出版社,2012:184-188.
[2]周察金.C语言程序设计[M].高等教育出版社,2002:117-122.