曲芳秀
(佳木斯市职业技术学校,黑龙江 佳木斯 154002)
结构化程序设计的主要思想是把应用程序分成几个相对独立的子模块,用每个子模块实现一个功能,然后将各个子模块之间通过调用和传递把它们组合在一起,初学者学会编写结构化程序,对于编写出高质量的、面向对象的应用程序大有帮助。
顺序结构、选择结构、循环结构3种基本结构,它是程序设计的基础。
它是最基本的程序结构,是按照命令或语句顺序依次执行,一直执行程序中的每个命令或语句。
是程序的3种基本结构之一,初学者可以根据指定的条件,选择执行不同的程序分支,分为以下3种:
(a)单分支选择:提供一种选择,指定的条件满足,才能执行此语句。
(b)双分支选择: 提供两种选择,指定条件是否满足,都执行一种选择,并且只能执行一种。
(c)多分支选择:可以提供多种选择,但是最多执行其中一种。
a、 单分支选择结构格式如图1:
IF<条件>
<语句组>
ENDIF
图1 单分支选择结构的流程图
说明:在使用IF语句时,其中IF是开始语句,而ENDIF是结束语句,因此它们必须成对使用,缺一不可。
程序流程:首先判断条件是不是满足。如满足,那么“条件”的值为.T.,就先执行“语句组”后再执行ENDIF后面的语句;反之,将不执行“语句组”,直接执行ENDIF后面的语句。
引证:求一元二次方程A+BX+C=0的根X1,X2。
Z=B∧2-4*A*C
IF(Z>=0)
X1=(-B+SQRT(Z))/(2*A)
X2=(-B-SQRT(Z))/(2*A)
? X1,X2
ENDIF
b、 双分支选择结构格式如图2:
IF<条件>
<语句组1-ELSE>
<语句组2>ENDIF
图2 双分支选择结构的流程图
程序流程:首先判断条件是不是满足。如满足,“条件”的值为.T.。那么就先执行“语句组1”后再执行ENDIF后面的语句;反之,我们就先执行“语句组2”,然后再执行ENDIF后面的语句。
SET TALK OFF
CLEAR
INPUT”请输入X的值:”TO X
IF X>=0
Y=2*X+1
ELSE
Y=2*X-1
ENDIF
?”f(“+ALLTRIM(STR(X))+”)=”+ALLTRIM(STR(Y))
SET TAKL ON RETURN
C、多分支选择结构格式:
DO CASE
CASE<条件1>
<语句组1>
CASE<条件2>
<语句组2>
……….
CASE<条件n>
<语句组n>
[OTHERWISE语句组]
ENDCASE
说明:DO CASE 是多分支选择结构开始的语句,ENDCASE是多分支语句结束的语句,它们必须成对使用,缺一不可。
程序流程:首先来判断第1个CASE后面的“条件1”是否得到满足。如满足,那么“条件1”的值为.T.,就先执行“语句组1”,然后再执行ENDCASE后面的语句;否则,我们继续判断第2个CASE后面的“条件2”,如满足,就先执行“语句组2”,然后再执行ENDCASE后面的语句,一直进行。直到所有CASE后面的条件都不满足,这时如有OTHERWISE选项时,我们就执行其下面的“语句组”;如果没有OTHERWISE选项时,就执行ENDCASE后面的语句如图3所示。
图3 多分支选择结构的流程图
引证:f(x)是一个分段函数,当X小于-1或大于5时,取f(x)=0;当X大于等于-1或小于1时,f(x)取2(x2)-X;当X大于等于1或小于5时,f(x)取X。
Input”请输入X值:” TO X
DO CASE
CASE X<-1
f=0
CASE x<1
f=2*x*x-x
CASE x<5
f=x
OTHERWISE
f=0
ENDCASE
? “”,f
RETURN
循环结构:是按指定条件来重复的执行某一个程序段,所以,循环结构也称为重复结构。那么在循环结构中,可以重复执行的某一个程序段我们称为循环体。
Visual FoxPro 提供了3中循环结构:指定条件的循环,针对记录的循环和指定次数的循环。
(1)指定条件的循环
格式: DO WHILE<条件>
<语句组>
ENDDO
如图4所示。
图4 指定条件的循环结构流程图
说明:DO WHILE是循环的开始的语句,ENDDO是循环结束的语句,它们必须成对使用,缺一不可。
程序流程:首先来判断条件是否满足。如不满足,那么“条件”的值为.F.,将不执行循环体中的语句,然后直接执行ENDDO后面的语句;如满足,那么“条件”的值为.T.,将执行循环体的语句后,将返回DO WHILE处,然后再判断条件是否满足。继续下去,一直到不满足条件时结束循环为止。
引证:计算1-10之间的整数和
CLEAR
S=0
N=1
DO WHILE N<=10
S=S+N
N=N+1
ENDDO
? “S=”,S,”N=”,N
RETURN
(2)针对记录的循环
格式: SCAN[FOR条件]
<语句组>
ENDSCAN
图5 针对记录的循环结构流程图
图6 指定次数的循环结构流程图
说明:SCNA 是循环开始的语句,ENDSCAN是循环结束的语句,它们必须成对出现,缺一不可。 选择“FOR条件”则对满足条件的记录执行循环体的语句;若省略该选项,则对所有记录执行循环体语句。其中“条件”是一个逻辑型表达式。
程序流程:首先要检查有没有满足条件的记录。如没有,那么就不执行循环体中的语句,然后,直接执行ENDSCAN后面的语句;如果有,那么就执行循环体中的语句后,记录指针将自动移到下一条满足条件的记录上,然后再执行循环体中的语句。继续下去,一直到对所有满足条件的记录都执行了循环体中的语句之后才能结束循环,然后执行ENDSCAN后面的语句。
引证:逐个显示“学籍”表中入学成绩大于400的所有女生的姓名、性别和入学成绩字段值
CLEAR ALL
USE 学籍
SCAN FOR 入学成绩>400
IF 性别=”女”
DISPLAY FIELDS 姓名,性别,入学成绩
ENDIF
ENDSCAN
USE
RETURN
(3)指定次数的循环
格式: FOR<变量>=<初值>TO<终值>[STEP步长]
<语句组> 变量增值
ENDFOR
ENDFOR后面的语句
说明:FOR是循环语句的开始,ENDFOR是循环语句的结束,它们必须成对出现,缺一不可。
“语句组”是该循环的循环体,它由一组Visual FoxPro的命令组成。“变量”用于指定循环控制变量。“初值”和“终值”都是数值型表达式。“步长”循环控制变量将按步长增值;若省略该选项,则循环控制变量增值1如图6所示。
程序流程:首先把“初值”赋给循环控制变量,之后来判断循环条件是否满足。如果循环控制变量的值小于或等于“终值”而且“步长”是正数时,或者循环控制变量的值大于或等于“终值“而且”步长“是负数时,认为满足循环的条件。然后就先执行循环体的语句,再把循环控制变量按”步长“增加值,然后再去判断循环条件是否满足。继续下去,一直到循环条件不满足时才能结束循环,然后执行ENDFOR后面的语句。
引证:编程计算50-200之间的奇数和
SET TALK OFF
S=0
FOR N=51 TO 200 STEP 2
S=S+N
ENDFOR
? “S=”,S,”N=”,N
SET TALK ON
初学者在使用结构化程序设计方法编写程序时,首先要仔细分析需要解决的问题,然后找出解决问题的方法,然后使用一组Visual FoxPro的命令实现操作步骤指定的功能,并且把这些命令按照一定的规则组织在程序文件中。实践中证明了模块化、自顶向下、逐步求精是解决复杂问题的程序设计思想。按照结构化程序设计方法,在进行程序设计时由最上层开始,一层一层地往下确定,把大型程序逐层分解,每个子模块完成一个相对简单的功能。再把实现子模块功能的方法一步一步精确化,最终编写出程序。