1、【精品PPT】第六章程序设计初步 顺序结构设计 分支结构设计 循环结构设计 程序设计基础 模块化设计程序设计基础程序设计基础数据结构数据结构算法算法对数据的描述:在程序中指定对数据的描述:在程序中指定数据的类型和数据的组织形式数据的类型和数据的组织形式对操作的描述对操作的描述类比理解:菜谱原料操作步骤一系列计算机一系列计算机指令的集合指令的集合 程序设计基础程序设计基础特点特点:依照程序书写顺序执行程序依照程序书写顺序执行程序 use sb&打开表 list fields 名称,价格 for 主要设备&显示相关记录 replace all 价格 with 价格*0.9 for 主要设备&数据替
2、换 例:打开设备表,显示所有主要设备的名称及价格,并将主要设备的价格降低10%。特点特点:根据条件的 满足与否而 分别执行与 其相对应的 操作开始打开表输入员工号找到吗关闭表结束YN输出查无此人输出姓名等思考思考:分支结构与顺序结构的不同之处 特点特点:反复执行某些操作,反复执行的部分称为循环体。条件循环体YN(a)当型循环Y循环体条件N(b)直到型循环思考:思考:两种循环结构的区别在于?(提示:循环条件)答案答案:1.当型是当循环条件成立时执行循环体,条件不成立时退出循环;直到型是执行循环体,直到条件成立才退出循环。2.当型是先判断后执行,可能一次都不能执行;直到型是先执行后判断,至少执行一
3、次。程序设计基础程序设计基础自顶向下逐步细化结构化编码模块化设计算法设计程序设计基础程序设计基础 系统将整个屏幕划分为:25行 80列 XY平面坐标系。SAY GET DEFAULT READ 根据员工的编号来修改员工的基本工资和水电费。CLEAR USE 工资表 yg=0001 2,10 SAY 请输入员工的编号 GET yg READ LOCATE FOR 员工编号=yg 4,10 SAY“请修改基本工资”GET 基本工资 6,10 SAY“请修改水电费”GET 水电费 READ USE 1.建立或修改程序文件 2.(1)命令方式3.:4.:建立或修改一个程序文件。5.:命令中的文件名是指
4、定要生成的程序文件的名称,缺省的扩展名为.PRG;文件名前也可以指明路径。顺序结构程序设计是三种基本结构中最简单也是最常用的一种结构。顺序结构的程序在运行时按照语句排列的先后顺序,自顶向下依次执行。从键盘输入一个小写字母,要求改用大写字母输出。从键盘输入一个小写字母,要求改用大写字母输出。SET TALK OFF CLEARACCEPT 请输入一个小写字母 TO aa=UPPER(a)?“转换结果为:,aSET TALK ONRETURN 开 始输入字母大小写转换输出结果结 束例6.2流程图 如果输入的字母为非小写字母,例如,误操作输入了大写字母或是数字字符,那么在此程序运行中仍然将继续执行并
5、显示结果,这显然与题意不符,要解决这个问题,需要用到选择结构程序。程序应具有程序应具有判断判断功能,而判断是通过程序功能,而判断是通过程序中的分支结构(选择结构)来实现的。中的分支结构(选择结构)来实现的。分支结构是程序中一种常用结构,按照分支结构是程序中一种常用结构,按照分支结构分支结构执行路径的多少执行路径的多少,可分为,可分为单分支、单分支、双分支和多分支双分支和多分支结构。实现分支结构的语句结构。实现分支结构的语句有有 IF语句语句和和DO CASE语句。语句。无论哪种类型的分支结构,都是依据无论哪种类型的分支结构,都是依据所给所给条件为真或为假条件为真或为假,来选择,来选择执行某一分
6、执行某一分支支的相应操作。的相应操作。执行流程:执行流程:首先计算首先计算条件表达式条件表达式的值,的值,若其值为真若其值为真,则执行,则执行IFIF与与ENDIFENDIF之间的命令之间的命令 序列序列,然后执行然后执行ENDIFENDIF后面的命令;后面的命令;若其值为假,若其值为假,则直接执行则直接执行ENDIFENDIF后面的命令。后面的命令。条件ENDIF后语句后语句N命令序列Y思考思考:分支结构与顺序结构的不同之处分支结构与顺序结构的不同之处 例例1 1:求长方形面积。(判断:当输入的边长值为正:求长方形面积。(判断:当输入的边长值为正数时,求面积。)数时,求面积。)clearse
7、t talk offinput “请输入长方形的长:请输入长方形的长:”to linput “请输入长方形的宽:请输入长方形的宽:”to wif l0 and w0 s=l*w?”长方形的面积为:长方形的面积为:”,sendifreturn在设计程序时,对于有数据在设计程序时,对于有数据输入的程序,一定要对输入输入的程序,一定要对输入数据的数据的有效性有效性做相应的检查,做相应的检查,避免由于数据的错误输入而避免由于数据的错误输入而导致程序的出错。这是一个导致程序的出错。这是一个程序员必须养成的良好习惯。程序员必须养成的良好习惯。输入长宽:输入长宽:L和和W开始开始L,W“z”)OR(a“z”
8、)OR(a“a”)?“?“输入字母错误输入字母错误!”!”SET TALK ON SET TALK ON RETURN RETURNENDIFENDIFa=UPPER(a)a=UPPER(a)?转换结果为转换结果为:,a:,aSET TALK ONSET TALK ONRETURN RETURN 2 2、双分支结构、双分支结构 格式:格式:IF IF 1 ELSE ELSE 2 ENDIF ENDIF执行流程:执行流程:首先计算首先计算条件表达式条件表达式的值,的值,若其值为真若其值为真,则执行命令序列,则执行命令序列1 1,然后,然后 再执行再执行ENDIFENDIF后面的命令;后面的命令;
9、若其为假若其为假,执行命令序列,执行命令序列2 2,然后再执,然后再执 行行ENDIFENDIF后面的命令。后面的命令。条件条件语句序列语句序列1 1语句序列语句序列2 2YN从键盘输入一个数,判断其为奇数还是偶数。从键盘输入一个数,判断其为奇数还是偶数。分析分析:(1 1)首先是输入一个)首先是输入一个数,然后判断输入的数奇偶数,然后判断输入的数奇偶性。性。(2 2)应输入数值型数据,可)应输入数值型数据,可以用以用INPUTINPUT或是或是GETGET语句来输语句来输入。入。(3 3)如何判断奇偶性呢?可)如何判断奇偶性呢?可使用使用MODMOD函数或求余运算符函数或求余运算符“%”“%
10、”。对于一个偶数。对于一个偶数x x,MODMOD(x x,2 2)应该为)应该为0 0,否则为,否则为1 1。输出偶数偶数开始开始输入数输入数余余数数为为0?0?输出奇数输出奇数结束结束YNSET TALK OFFSET TALK OFFINPUT“INPUT“请输入一个数字请输入一个数字”TO a”TO aIF MOD(a,2)=0&a%2=0IF MOD(a,2)=0&a%2=0?a,“?a,“是一个偶数是一个偶数”ELSEELSE?a,“?a,“是一个奇数是一个奇数”ENDIFENDIFSET TALK ONSET TALK ONRETURN RETURN 分析分析:1.1.打开工资表
11、打开工资表;2.2.输入员工号输入员工号;3.3.用用LOCATELOCATE命令查找该命令查找该员工;员工;4.4.用用FOUND()FOUND()函数来判函数来判断是否存在该记录。断是否存在该记录。5.5.若若FOUND()FOUND()函数为真,函数为真,表示存在此员工记录,表示存在此员工记录,否则,不存在此员工记否则,不存在此员工记录,给出录,给出“查无此人查无此人”的提示信息。的提示信息。5.5.关闭表。关闭表。开始开始打开表打开表输入员工号输入员工号找到找到吗吗关闭表关闭表结束结束YN输出查无此人输出查无此人输出员工信息输出员工信息查找该员工查找该员工SET TALK OFFSET
12、 TALK OFFUSE USE 工资表工资表ACCEPT “ACCEPT “请输入员工编号请输入员工编号”TO a”TO aLOCATE FOR LOCATE FOR 员工编号员工编号=a=aIF IF FOUNDFOUND()()&条件条件FOUNDFOUND()()为真表示存在此员工为真表示存在此员工 DISP DISP 员工号员工号,基本工资基本工资,水电费水电费ELSE&ELSE&条件条件FOUNDFOUND()()为假表示不存在此员工为假表示不存在此员工?“查无此人!查无此人!”ENDIFENDIFUSE USE SET TALK ONSET TALK ONRETURNRETURN
13、程序采用程序采用格式书写,格式书写,便便于阅读和调试。于阅读和调试。注意:注意:1 1、IFIF与与ENDIFENDIF必须成对出现,且各占一行。必须成对出现,且各占一行。2 2、可以为关系表达式、逻辑表达式或可以为关系表达式、逻辑表达式或其他逻辑量。其他逻辑量。clearclearset talk offset talk offinput“input“请输入请输入a a的值:的值:”to a”to a input“input“请输入请输入b b的值:的值:”to b”to b input“input“请输入请输入c c的值:的值:”to c”to c if ab&aif ab&a和和b b比
14、较大小,若比较大小,若a a大,则大,则a a、b b 交换交换 s=a s=a a=b a=b b=s b=sendifendifif ac&aif ac&a和和c c比较大小,若比较大小,若a a大,则大,则a a、c c 交换交换 s=a s=a a=c a=c c=s c=sendifendifIf bc&bIf bc&b和和c c比较大小,若比较大小,若b b大,则大,则b b、c c 交换交换 s=b s=b b=c b=c c=s c=sendifendif?a,b,c?a,b,creturnreturn3.IF3.IF语句的嵌套语句的嵌套 实际生活中,很多问题不仅仅只有两种可能
15、,而是要实际生活中,很多问题不仅仅只有两种可能,而是要求对多种情况进行不同的处理,则需要用到求对多种情况进行不同的处理,则需要用到IFIF语句嵌套。语句嵌套。嵌套嵌套是指在某种结构中含有其它结构。是指在某种结构中含有其它结构。一般格式:一般格式:IF IF 1 IF IF 2 ENDIF ENDIF ELSE ELSE IF IF 3 ENDIF ENDIF ENDIF ENDIF 注意:注意:1 1、IFIF一定要与一定要与ENDIFENDIF配对。配对。2 2、在、在IFIF结构之间可以嵌套,结构之间可以嵌套,但不能交叉。但不能交叉。INPUT“INPUT“请输入学生成绩请输入学生成绩”T
16、O p”TO pIF p60IF p60?“?“不及格不及格”ELSEELSE IF p70 IF p70?“?“及格及格”ELSE ELSE IF p80 IF p80?“?“良良”ELSE ELSE IF p90 IF p100)OR (P0)?输入的成绩有误,请重新输入输入的成绩有误,请重新输入ELSE DO CASE CASE P60?不及格不及格 CASE P70?及格及格 CASE P80?良良 CASE P90?好好 OTHERWISE?优优 ENDCASEENDIFRETURN编一缴税程序,以编一缴税程序,以800800元为基数,超出部分元为基数,超出部分的缴税比例如下:的缴税
17、比例如下:800-1500(含(含800)5%1500-2500(含(含1500)10%2500-5000(含(含2500)20%5000以上以上(含(含5000)25%小结小结 分支结构使得程序功能得到完善,分支结构使得程序功能得到完善,分支结构的目的在于分支结构的目的在于对不同情况做出对不同情况做出不同处理不同处理,这种结构的出现使得计算,这种结构的出现使得计算机在一定程度上具有了机在一定程度上具有了判断判断的功能,的功能,是计算机走向智能化的重要结构。是计算机走向智能化的重要结构。1.1.条条 件件 循循 环环 2.2.步步 长长 循循 环环 3.3.扫扫 描描 循循 环环:命令序列命令
18、序列EXITLOOPEnddo后面语句后面语句条件条件FTEnddo 求1+2+3+100之和。分析分析:0+1=1 1+2=3 3+3=6 6+4=10 4950+100=5050S I S S=0I=1S=S+II=I+1S=S+II=I+1S=S+II=I+1结 束输出s开 始i=100?s,i赋初值0s=s+ii=i+1YN例6.12流程图SET TALK OFFCLEARI=1S=0I=100I5为止,求此时n的值。CLEARSET TALK OFFSTORE 0 TO S,IDO WHILE.T.DO WHILE.T.N=N+1 S=S+1/N IF S5 EXITEXIT END
19、IFENDDOENDDO?“n的值应该为”,nSET TALK ONRETURN求100到200之间所有奇数之和。条件循环可以实现已知和未知循环次数的循环。对于的循环还可采用步长循环。格式格式:数值表达式,默认值为1。说明说明:假设n的初值为0 求1+2+3+100之和。SET TALK OFF CLEAR S=0 S=0 FOR i=1 TO 100 STEP 1 FOR i=1 TO 100 STEP 1 S=S+i S=S+i ENDFOR ENDFOR?1-100之和为,S SET TALK ON RETURN:求123100之积。S1S=S*i积 求所有的3位数中能同时被5和12整除
20、的数有多少个?其和是多少?并按照每行输出5个,输出这些数。:输出所有的四位数中能同时被9和11整除的数,每行输出6个。在员工表中添加10条新记录。RETURN格格 式式:说说 明明:统计员工表中男女人数,以及教授和副教授的人数。?“总共有”,n1,“个男员工”?“总共有”,n2,“个女员工”?“总共有”,j1,“个教授”?“总共有”,j2,“个副教授”USE 5、设S=1+1/2+1/3+1/N,求使S不超过10的最大的N值。6、求1-1000之间能被3整除的偶数的个数及其和。7、打印如下图形:*附加题:1、任意输入10个数,能求出它们中的最大值和最小值。2、打印九九乘法表。1.1.子子 程程
21、 序序 2.2.过程与过程文件过程与过程文件 3.3.自定义函数自定义函数 4.4.内存变量的作用域内存变量的作用域 5.5.数据传递数据传递 子程序实际上是一个程序,其是一个相对的概念,通常称调用的程序为主程序,被调用的程序为子程序。1、主程序执行时遇到DO命令,执行就转向子程序。子程序执行完后就会返回到主程序。2、参数表可以是表达式,若为内存变量,必须具有初值。3、调用子程序时,参数表中的参数要传送给子程序。求一个半径等于边长的圆与正方形面积之差。主程序:主程序:STORE 0 TO S1,S2INPUT“输入半径或边长的值:TO ADO YUAN.PRGYUAN.PRG WITH A,S
22、1DO ZHEN.PRGZHEN.PRG WITH A,S2?S1-S2YUAN.PRGYUAN.PRGPARAMETERS R,SS=3.14*R2RETURNZHEN.PRGZHEN.PRGPARAMETERS L,SS=L2RETURNSTORE 0 TO S1,S2INPUT “输入半径或边长的;值:”TO ADO YUAN.PRGYUAN.PRG WITH A,S1DO ZHEN.PRGZHEN.PRG WITH A,S2?S1-S2YUAN.PRGYUAN.PRGPARAMETERS R,SS=3.14*R2RETURNZHEN.PRGZHEN.PRGPARAMETERS L,SS
23、=L2RETURNA,S2A,S1主程序:主程序:注注 意意 1、只有当DO命令中参数为内存变量时,子程序的参数才能返回给主程序,若参数为常量或表达式时,子程序的参数值不能够返回给主程序。2、若子程序不需要参数时,DO命令也可以不带参数。RETURN TO MASTER|TO RETURN TO MASTER|TO 说明:TO MASTER 直接返回到最外层主程序;TO 强制返回到指定的程序文件。主程序 DO A A.PRG DO B RETUTNB.PRG DO C RETURNTO MASTERC.PRG RETURNTO A主程序主程序CLEARDO A?“所有程序执行完毕”A.PRG?
24、开始执行ADO B?A执行完毕RETURNB.PRG?开始执行B DO C?B执行完毕RETURN TO MASTERC.PRG?开始执行CRETURN TO A 如果将多模块程序中的每个模块(主程序,子程序或自定义函数)分别保存为一个独立的.PRG文件,则每执行一个模块就要打开一个文件,势必会增加运行时间。为此VFP允许在一个.PRG文件中设置多个程序模块,并将主程序以外的每个模块定义为一个过程,即“过程文件”,仍以.PRG为扩展名。PROCEDURE PROCEDURE PARAMETERS PARAMETERS RETURNRETURN说说 明明 a)每个过程均以PROCEDURE开始,
25、以RETURN结束。每个过程实际上是一个独立的子程序或一个用户定义函数。b)PROCEDURE 用于过程的第一条语句,它标识了每个过程的开始,同时定义了过程名。c)过程如果以RETURN 作为结束语句,则该过程既可用DO DO 的形式执行,又可当做一个合法的自定义函数,可供随时调用。将子程序中的例题改为过程。STORE 0 TO S1,S2INPUT “输入半径或边长的值:”TO ADO YUAN WITH A,S1DO ZHEN WITH A,S2?S1-S2PROCEDURE YUANPARAMETERS R,S S=3.14*R2RETURNPROCEDURE ZHENPARAMETER
26、S L,S S=L2RETURN12写出下列程序的运行结果。SET TALK OFFA=10B=8DO SUBB WITH A,BSET TALK ON RETURNPROCEDURE SUBB PARAMETERS X,Y?X,Y STORE 25 TO X X=302*SQRT(X)Y=Y+X?X,YRETURN结果为:10 811 20 28格格 式:式:SET PROCEDURE TO SET PROCEDURE TO 功功 能:能:打开过程文件。打开过程文件。用过程文件实现求一个半径等于边长的圆与正方形面积之差的问题。*Main.prgMain.prgCLEARSET TALK OF
27、FSET PROCEDURE TO sub&打开过程文件打开过程文件sub.prgsub.prgSTORE 0 TO s1,s2INPUT“输入半径或边长的值:TO aDO yuan WITH a,s1&调用过程文件中的过程调用过程文件中的过程yuanyuanDO zhen WITH a,s2&调用过程文件中的过程调用过程文件中的过程zhenzhen?s1-s2SET TALK ONRETURN*过程文件过程文件sub.prgsub.prgPROCEDURE yuan&过程过程yuanyuan PARAMETERS r,s s=3.14*r2RETURNPROCEDURE zhen&过程过程z
28、henzhen PARAMETERS i,s s=i2RETURN FUNCTION FUNCTION PARAMETERS PARAMETERS RETURN RETURN 若使用FUNCTION语句来指出函数名,表示该函数包含在调用程序中;若缺省,则表示此函数是一个独立文件,函数名在定义文件名时确定。RETURN用于返回函数值,只能返回一个值。若缺省该语句则返回值为.T.。自定义函数与系统函数调用方法相同:函数名()将子程序中的例题改为自定义函数。CLEARS=0INPUT “输入半径或边长的值:”TO A?YUAN(A)-ZHEN(A)?YUAN(A)-ZHEN(A)FUNCTION Y
29、UANYUAN PARAMETERS R S=3.14*R2RETURN SFUNCTION ZHENZHEN PARAMETERS L S=L2RETURN S 定义一个判断n是否是素数的函数,然后调用该函数求21000内的全部素数。分析:分析:a)素数也叫质数,它是大于1且除了1和它本身之外,不能被其他任何整数所整除的整数。b)为了判断某数n是否是素数,一个最简单的方法是用2345n-1这些数逐个去除n,看能否除尽,如果全都除不尽,则n是素数,否则,只要其中一个数除尽了,则n不是素数。为了减少除的次数,提高运行效率,除到n n开方开方即可。程序:程序:*此子程序判断n是否是素数FUNCTI
30、ON PRIMEPARAMETERS NFLAG=.T.K=INT(SQRT(N)J=2DO WHILE J=K AND FLAG IF MOD(N,J)=0 FLAG=.F.ENIF J=J+1ENDDORETURN FLAG*main.prg调用该函数求21000内的全部素数。CLEARFOR M=2 TO 1000 IF PRIME(M)?M ENDIFENDFOR一、全局变量一、全局变量 PUBLIC PUBLIC 功能:功能:声明并建立全局变量。说明:说明:a)一旦定义可供所有的程序,模块使用。b)在命令窗口定义的变量是全局变量。c)程序执行完后不会自动清除。若以内存变量的作用域分类
31、,可分为下列三种:全局变量、局部变量、隐藏局部变量全局变量、局部变量、隐藏局部变量 *TEMP.PRGTEMP.PRG PUBLIC I I=2?执行TEMP1前的I:,I DO TEMP1DO TEMP1?执行TEMP1后的I:,I*TEMP1.PRGTEMP1.PRG I=I+4?TEMP1中的I:,I 结果:结果:执行TEMP1前的I:2 TEMP1中的I:6 执行TEMP1后的I:6二、局部变量二、局部变量 在程序中定义的变量,若没带PUBLIC声明,它只能在定义它的程序及其下级程序中使用,一旦定义它的程序运行结束,它便自动被清除。例:*MAIN.PRGMAIN.PRG R=100 D
32、O SUBDO SUB?P RETURN*SUB.PRGSUB.PRG P=2*3.14*R RETURN结果结果:由于P是在子程序中的局部变量,退出子程序后自动被清除,则在主程序中输出P的值时出现变量P P未定义未定义的错误。三、隐藏内存变量三、隐藏内存变量 PRIVATE PRIVATE 功能功能:声明并隐藏上级模块中的同名变量。说明:说明:a)对PRIVATE中内存变量的修改并不影响上级程序中与之同名的内存变量的值。此命令只对本级程序及以下各级子程序有效,当返回到上级程序时,被PRIVETE隐藏的当前程序中的内存变量自动删除。b)在它们被隐藏期间,程序就不能再调用这些被隐藏的上级内存变量
33、,但实际上它们仍然存在,一旦含有PRIVATE内存变量的程序结束后,被PRIVATE隐藏起来的那些以前建立的同名的上级内存变量自动恢复以前的内容和状态。R=100 P=10 DO SUB?P RETURN PROCEDURE SUB PRIVATE P P=2*3.14*R RETUEN结果:结果:在过程SUB中用PRIVATE命令隐藏了主程序中定义的全局变量P,并重新对P赋值,返回主程序时,P恢复以前的值,即输出1010。优点:优点:使得在开发大型应用程序时,在不同层次的程序中可以使用同名内存变量而不致发生混乱。调用子程序时,调用程序要把数据传递给子程序,子程序也可能把数据传回到调用程序,因
34、此在调用子程序过程中,必然要考虑调用程序和被调用程序之间的数据是如何传递的。调用子程序时的数据传递可以通过两种方式解决:a)a)利用变量的作用域实现数据传递利用变量的作用域实现数据传递例:*MAIN.PRGMAIN.PRG gao=8 kuan=6 c=0 DO SUB DO SUB?c return*SUB.PRGSUB.PRG c=gao*kuan RETURN结果为:48b)b)利用参数实现数据传递利用参数实现数据传递 利用这种方式传递数据,子程序具有更大的独立性。编写子程序时,用PARAMETERSPARAMETERS命令来说明将要输入、输出的变量;用DODO命令来提供输入值和接受输出
35、结果。参数传递有两种方式:值传递值传递和和地址传递地址传递。值传递值传递:子程序中参数变化后的值不回传不回传各上级调用程序。常量和表达式只能使用值传递方式。使用值传递方式的变量要用括号用括号括起来。地址传递地址传递:子程序中参数变化后的值要回传回传各上级调用程序。内存变量既可使用值传递方式,又可用地址传递。使用地址传递方式的变量不加括号不加括号。写出下列程序的输出。SET TALK OFFX=1Y=3DO SUB WITH X,(Y),5?X,YRERURNPROCEDURE SUBPARAMETERS A,B,C A=ABC B=ABCRERURN分析:分析:程序将3个参数传递给过程SUB,第一个参数X采用地址传递方式,变量A的变化将引起X的变化;第二个参数Y采用值传递方式,B的变化不引起Y的变化;第三个参数是常数,最后输出为9 39 3。写出下列程序的输出。CLEARA=3B=5?A,BDO PP WITH 3*A,1*B?A,BRETURNPROCEDURE PPPARAMETERS X,YX=X2Y=Y+1?X,YRETURN 分析:分析:程序将两个表达式传递给过程PP,它们都采用值传递方式,X,Y的变化不引起A,B的变化,则输出结果为 3 581 682 3 5思考:将其改为思考:将其改为B B,结果是否一样?结果是否一样?
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。