程序设计基础第六章本章要点6.1程序6.2选择结构6.3循环结构程序设计的概念•VFP有两种工作方式:交互方式和程序方式。•交互方式是在命令窗口中直接输入命令或通过选择菜单来执行VFP命令。但在实际应用中,许多任务是要执行一组命令来完成的。如果采用在命令窗口中逐条输入命令的方式进行,不仅效率不高,而且容易出错。特别是当该任务要反复执行,或者当处理的问题较复杂时,这种交互方式几乎是不可行的,应当采用程序方式。6.1程序•程序是能够完成指定任务的命令序列。将这组命令序列以文件形式保存,该文件称为程序文件或命令文件。•在运行程序时,系统将按照一定的次序自动执行其中的各条命令,从而实现通过程序控制自动执行一系列操作,以完成指定任务。程序文件的基本操作一、程序文件的建立和编辑命令格式:modicomm[文件名]功能:建立或修改指定的程序文件。说明:(1)系统默认的程序文件扩展名为.prg(2)若用户指定了文件名,执行该命令时,系统首先检索磁盘文件,如果此文件存在,则打开该文件,若指定文件不存在,则建立一个新的空程序文件,其文件名即为指定的文件名。二、保存命令文件(ctrl+w)三、运行命令文件(do文件名)例如6.1统计第一学期有考试成绩的学生人数与平均成绩设置步骤:(1)创建文件:modicommMyProg1(2)编写代码(3)保存文件(4)结束编程(5)调试、运行程序,直到程序完全正确8常用命令1.程序注释语句:格式一:NOTE[注释字符串]格式二:*[注释字符串]格式三:&&[注释字符串]92.RETURN命令格式:return功能:终止本程序的执行,把程序控制权返回给本程序的调用者。如果一个程序中没有包含return命令,当执行完本程序最后一条命令后,系统同样也把程序控制权返回给本程序的调用者。3、输入输出命令(交互式命令)程序的正确运行,必然需要操作人员与内存变量之间进行信息交流。VFP提供了许多进行这类数据交流的命令。ACCEPT语句语句格式:ACCEPT[字符表达式]to内存变量执行该命令时,暂停程序的运行,显示命令中的字符表达式作为提示信息,等待用户从键盘输入字符串。系统将接受的字符串存入指定的内存变量,程序继续运行。功能说明:①系统将用户的输入一律作为字符串,输入时不必加定界符,以回车结束输入;②可选的提示信息可以是字符型常量、变量或表达式。如果是字符串常量,则必须使用字符串定界符。例如:查询指定学生的信息(文件名例6-1)INPUT语句语句格式:INPUT[字符表达式]to内存变量功能注释:①用户输入的数据可以是数值型、逻辑型、日期型、日期时间型或字符型,以回车结束输入;②输入字符串时必须加定界符;输入逻辑型常量时要用圆点定界,如(.T.,.F.);输入日期型常量时要用大括号,如{^1962/06/12};③INPUT命令一般是用来输入数值型数据。例如:查询指定年份出生的学生的信息(文件名例6-2)13常用命令4.设置是否输出非显示命令的执行结果命令格式:SETTALKON|OFF功能:VFP在执行一些非显示命令(如SELE命令)时,将把执行结果等信息送到VFP主窗口、状态栏或用户自定义窗口里。可使用开关SETTALKON/OFF显示或关闭这些提示信息。如在例6.1的程序的第一行加上命令SETTALKON,对比其运行结果。结构化程序的基本结构一、顺序结构分析书例6.3(myprog2)二、选择结构三、循环结构6.2选择结构1、条件语句(IF…ENDIF)2、IFF函数3、IF语句的嵌套4、分支语句(DOCASE…ENDCASE)1、条件语句语句格式:IF条件语句序列1[ELSE语句序列2]ENDIF①条件是逻辑表达式。当程序执行到IF语句时,首先判断条件是否成立。如果条件为“真”时,则执行语句序列1语句,否则(即条件为“假”)执行语句序列2。IF语句执行完毕后,再执行ENDIF后面的语句。②选择结构中可以没有ELSE部分。这样的话,当程序执行到IF语句时,首先判断条件是否成立。如果条件为“真”时,则执行语句序列1语句,否则直接转向ENDIF后面的语句去执行。③IF和ENDIF必须成对出现,IF是该结构的入口,ENDIF是该结构的出口。④IF语句只能在程序中使用,不能在命令窗口中使用⑤为了使程序的结构层次清晰、减少编写错误,增加程序的可读性,一般按缩进(锯齿形)格式书写。即将该结构的入口和出口语句写在同一纵坐标位置上,而将嵌套其中的其他结构语句向右缩若干格。IF语句举例1CLEARinput请输入一个数:TOxIFMOD(x,2)=0THENy=是偶数。ELSEy=是奇数。ENDIF?STR(x)+yRETURN判断从键盘输入的任何一个整数的奇偶。若不是整数,则取整判断。2、IFF函数格式:IIF(条件,表达式1,表达式2)说明:条件是逻辑表达式。当条件为“真”时,该表达式的返回值为表达式1,否则,该表达式的返回值为,表达式2。如:z=IIF(x=y,x,y),将返回x与y中的较大者作为函数的返回值,并赋给z。IIF函数的功能和IF-ELSE-ENDIF语句非常相似,可以用IF语句取代IIF函数,如IIF(x=y,x,y)可用如下IF语句取代。IFx=yz=xELSEz=yENDIF有些IF语句也可以用IIF函数代替,但不是所有的。如,判断数的奇偶性程序中的IF语句IFMOD(x,2)=0THENy=是偶数。ELSEy=是奇数。ENDIF相当于IIF(mod(x,2)=0,”是偶数”,“是奇数”)3、IF语句的嵌套VFP对选择结构中的命令或语句没有特别的规定或限制,只要是合法的VFP命令或语句就行。IF语句也是合法的VFP语句,因此,在IF语句内部也可以包含IF语句,这就是IF语句的嵌套。IF的嵌套语句举例CLEARinput请输入一个数:TOxIFINT(X)=XIFMOD(x,2)=0THENy=是偶数。ELSEy=是奇数。ENDIF?STR(x)+yELSE?输入的数不是整数。ENDIFRETURN判断从键盘输入的任何一个数的奇偶性。若不是整数,则显示“输入的数不是整数”。4、分支语句语句格式:DOCASECASE条件表达式1语句行序列1CASE条件表达式2语句行序列2…CASE条件表达式N语句行序列N[OTHERWISE语句行序列N+1]ENDCASE功能:根据n个条件表达式的逻辑值,选择执行n+1个语句序列中的一个。说明:1.当系统执行DOCASE…ENDCASE语句时,依次判断CASE后面的条件是否成立,当发现某个CASE条件成立时,就执行该CASE与下一个CASE之间的语句序列,然后跳出DOCASE结构,转去执行ENDCASE后面的语句。如果所有CASE条件都不成立,则执行OTHERWISE与ENDCASE之间语句序列,然后执行ENDCASE后面的语句。2.DOCASE结构中可以没有OTHERWISE部分。这样的话,当所有CASE条件都不成立时,就直接跳出DOCASE结构,转去执行ENDCASE后面的语句.3.不管有几个CASE条件成立,只有最先成立的那个CASE条件后的语句序列被执行。4.DOCASE和ENDCASE必须成对出现,DOCASE是该结构的入口,ENDCASE是该结构的出口。DOCASE与第一个CASE项之间不能有任何语句。5.与IF语句一样,DOCASE语句只能在程序中使用,不能在命令窗口中使用。6.DOCASE结构一般按缩进格式书写。CASE语句举例CLEARinput请输入一个数:TOxDOCASECASEINT(X)!=X?输入的数不是整数CASEMOD(x,2)=0?该数是偶数。CASEMOD(x,2)=0y=该数是奇数。ENDCASERETURN判断从键盘输入的任何一个数的奇偶性。若不是整数,则显示“输入的数不是整数”。6.3循环结构循环是程序设计中的一种重要的方法。循环就是程序在执行的过程中,其中的某段代码被重复执行若干次。被重复执行的这段代码称为循环体。VFP中支持循环结构的语句包括:(1)DOWHILE-ENDDO(2)FOR-ENDFOR(3)SCAN-ENDSCANDOWHILE语句格式:DOWHIL条件表达式语句行序列1[LOOP]语句行序列2[EXIT]语句行序列3ENDDO当系统执行进入DOWHILE结构时,首先判断循环条件是否成立。如果循环条件成立,则执行DOWHILE与ENDDO之间语句序列(即循环体)。当执行到ENDDO时,返回到DOWHILE,再次判断循环条件是否成立,以确定是否再次执行循环体,如此循环,直到循环条件不成立,结束该循环语句,执行ENDDO后面的语句。循环体中可以使用两条特殊的命令:LOOP命令和EXIT命令。如果循环体包含有LOOP命令,那么当执行到LOOP命令时,就结束本次循环(如同执行到ENDDO一样),即不再执行LOOP到ENDDO之间的语句,返回DOWHILE处再判断循环条件是否成立。如果循环体包含有EXIT命令,那么当执行到EXIT命令时,就立即结束该循环语句,执行ENDDO后面的语句。说明:1.ENDDO必须与DOWHILE成对出现,缺一不可2.LOOP命令和EXIT命令只能用在循环结构中,通常出现在循环体内嵌套的选择语句中。3.避免陷入“死循环”。循环体中必须包含能对条件产生影响的命令,否则,若条件的值永远为真(.T.),循环将不会结束。这种现象称为“死循环”。4.为了增加程序的可读性,一般按缩进格式书写。5.与IF语句一样,DOWHILE语句只能在程序中使用,不能在命令窗口中使用。DOWHILE语句举例1例计算1+2+3+…+100的结果clears=0i=1dowhilei=100s=s+ii=i+1enddo?”s=”,sreturn循环过程的分析:第1次:(条件i=1满足循环)S=1i=2第2次:(条件i=2满足循环条件)S=3i=3第100次:(条件i=100满足循环条件)S=5050i=101第101次:(条件i=101,不满足循环条件,退出)计算1+3+…+99clears=0i=1dowhilei=100s=s+ii=i+2enddo二、FOR-ENDFOR循环语句如果事先可以决定循环的次数,使用FOR-ENDFOR语句更加清晰、方便。语句格式:FOR循环变量名=初值TO终值STEP增量语句行序列1[LOOP]语句行序列2[EXIT]语句行序列3ENDFOR/NEXT当系统执行进入FOR循环结构时,首先将初值赋给循环变量,再将循环变量的值与终值比较,判断循环条件是否成立。如果循环变量的值在初值与终值范围内,表示循环条件成立,则执行FOR与ENDFOR之间的语句序列(即循环体),然后循环变量的值增加一个增量,并再次判断循环条件是否成立,以确定是否再次执行循环体。若循环变量的值已超出初值与终值范围,表示循环条件不成立,则结束该循环结构,执行ENDFOR后面的语句。说明:1.ENDFOR和NEXT是等价的。2.FOR、ENDFOR或NEXT成对出现,缺一不可。3.初值、终值、增量都可以是数值表达式,但它们仅在控制进入循环结构时被计算一次,而在整个循环语句的执行过程中不再改变。4.增量是描述循环快慢的量,可以是正值,即递增,也可以是负值,即递减。当增量为1时,STEP可以省掉。若增量为正值,则当循环变量的值小于等于终值时,循环条件成立;若增量为负值,则当循环变量的值大于等于终值时,循环条件成立5.可以在循环体内改变循环变量的值,但循环次数也随之改变。FOR语句举例例计算1+2+3+…+100的结果clears=0fori=1to100s=s+iendfor?”s=”,sreturn循环过程的分析:第1次:(i=1满足i≤100循环条件)S=1i=2第2次:(i=2满足i≤100循