第五章结构化程序设计与网络编程.ppt_第1页
第五章结构化程序设计与网络编程.ppt_第2页
第五章结构化程序设计与网络编程.ppt_第3页
第五章结构化程序设计与网络编程.ppt_第4页
第五章结构化程序设计与网络编程.ppt_第5页
已阅读5页,还剩66页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章 结构化程序设计 与网络编程,5.1 样本程序分析 5.2 程序的编辑与执行 5.3 输入输出语句 5.4 分支程序设计 5.5 循环程序设计,5.6 子程序及其调用 5.7 子程序存放形式 5.8 变量作用域及程序 间数据传递 5.9 程序出错处理,5.1 样本程序分析,【 例 1 】求数N的阶乘,程序文件Example_1.prg: MODIFY COMMAND Example_1 下列语句时不要输入行号。 * 求数N的阶乘,即 S=123N INPUT ”请输入数N: ” TO N WINDOWAT, NOWAIT ; CLEAR|NOCLEARTIMEOUT,说明: :必须是字符

2、型数据,做为屏 幕提示信息 内存变量:接收字符型数据,且仅接收单个字符 WINDOWSAT:屏幕上出现提示窗口,位置 可由AT指定,例3:P86_【例4】 *Example_4.prg WAIT ”按任意键将显示系统日期 ” TIMEOUT 5 ? DATE(),NOWAIT:不再等待用户按键,程序继续向下执行。 CLEAR|NOCLEAR:关闭 | 不关闭窗口 TIMEOUT:设置等待时间,INPUT 命令格式: INPUT TO ,说明: :必须是字符型数据,做为屏幕 提示信息。 :所接收的数据可为字符型、数值型、 日期型、逻辑型数据: 输入字符型数据时需加定界符 日期型数据需按日期格式输

3、入 逻辑型数据以.T.、.F.的方式输入,例4:P86_【例5】 *Example_5.prg name= “程序设计语言” price=23 INPUT “请输入数据: ” TO X ? “X= ”, X,简单定位输入输出语句,输入命令格式: SAY ,输出命令格式: SAY GET ; DEFAULT READ,说明: 表示数据在窗口中显示的位置,均为数值型 SAY子句用来输出数据,GET子句用于输入及编辑数据 GET后的变量若是内存变量,则该变量必须具有初值,或用DEFAULT子句指定初值;若是字段变量,则显示当前记录该字段值,字段变量不能是备注型或通用型。 若想修改GET子句中变量的值

4、,则必须用READ命令来激活,例5:P87_【例 6】 *Example_6.prg CLEAR X=SPACE(20) Y=0 10,20 SAY ”请输入书名:” GET X 12,20 SAY ”请输入数量:” GET Y READ ? STR(Y,5)+ ”本”+ALLTRIM(X)+ ”的金额为:” ; +STR(12.4*Y,8,2),5.45.5 程序的基本结构,顺序结构 流程图,开始,语句1,语句2,语句n,结束,结构化程序设计可分为顺序结构、分支结构和循环结构。,举例 前面所举的例子均为 顺序结构,分支结构 单分支IF 语句 ( 简单分支结构 ) 流程图,开始,语句序列,结束

5、,条件?,Y,N,语句格式: IF ENDIF,分支结构后面语句,注: IF-ENDIF必须配 对出现。 缩进格式书写,使 程序清晰,易阅读, 不影响程序的执行。,例1:P88_【例7】求两个数中较大值 *Example_7.prg INPUT “请输入一个数: ” TO X INPUT “请输入另一个数: ” TO Y max=X IF maxY max=Y ENDIF ? “ X和Y中较大值是: ”, max,双分支IF语句 (带ELSE的分支结构) 流程图,开始,语句序列1,结束,条件?,Y,N,语句序列2,语句格式: IF ELSE ENDIF,分支结构后面语句,例2:P88_【例8】

6、求两个数中较大值 *Example_8.prg INPUT “请输入一个数: ” TO X INPUT “请输入另一个数: ” TO X IF XY max=X ELSE max=Y ENDIF ? “ X和Y中较大值是:”, max,IF语句的嵌套 基本流程图,开始,语句组1,结束,条件1?,Y,N,语句组2,条件2?,Y,N,语句格式: IF IF ENDIF ELSE ENDIF 注: 不能出现交叉嵌套,内层ENDIF后面语句,外层ENDIF后面语句,例3:P89_【例 9】分段函数程序,*Example_9.prg INPUT “ 请输入一个数:” TO X IF X0 Y=X2-1

7、ELSE IF X=0 Y=0 ELSE IF X=10 Y=X3+1 ELSE Y=2*X3 ENDIF ENDIF ENDIF ? X, Y RETURN,多分支结构 流程图,开始,语句序列 1,结束,条件1?,Y,N,语句序列 2,条件2?,Y,N,语句序列 n,条件n?,Y,N,OTHERWISE,语句序列 n+1,语句格式: DO CASE CASE CASE CASE OTHERWISE ENDCASE,例4:P90_【例 10】用DO CASE语句实现例9中的分段函数 *Example_10.prg INPUT “请输入一个数:” TO X IF TYPE(X)=N DO CAS

8、E CASE X0 Y=X2-1 CASE X=0 Y=0 CASE X=10 Y=X3+1 OTHERWISE Y=2*X3 ENDCASE,? X, Y ELSE WAIT “输入的数据类型错误! ” ENDIF RETURN,条件函数 函数格式: IIF ( , , ) 函数说明: 条件成立,函数返回表达式1的值; 否则, 函数返回的值 和值的数据类型可 以不同。 例5:P91_【例11】求一个数的绝对值。 *Example_11.prg INPUT “请输入一个数:” TO X ? IIF(X=0, X, -X),循环结构 基本流程图,开始,语句序列,结束,条件?,Y,N,循环前的语句

9、,循环体后的语句,语句序列,Y,当型循环语句格式 DO WHILE ENDDO,例5:P91_【例12】求10! *Example_12.prg n=2 s=1 DO WHILE n=10 s=s*n n=n+1 ENDDO ? “ 10!等于:”, s,例6:P92_【例13】输出zymcb.dbf中不带删除标记的 专业信息和专业个数。 *Example_13.prg USE zymcb M=0 DO WHILE !EOF( ) IF !DELETED( ) ? F_bm, F_mc M=M+1 ENDIF SKIP ENDDO ? “共有” +STR(M,4)+ “个专业” USE RET

10、URN,开始,循环体前语句,循环体条件,Y,分支条件,Y,LOOP,N,分支结构下面的语句 ENDDO,N,循环体下面的语句,结束,无条件转向循环,语句格式(以当型循环为例) DO WHILE IF LOOP ENDIF ENDDO,例7: 计算1100的奇数和。 *Ex2.prg store 0 to i, t do while i100 i=i+1 if int(i/2)=i/2 loop endif t=t+i enddo ? 1100奇数和为: , t,说明:int(N): 取整函数 此处用于判断i的奇偶性 思考:利用mod(N1,N2)如何 判断奇偶性?,开始,循环体前语句,循环体条

11、件,Y,分支条件,N,EXIT,Y,分支结构下面的语句 ENDDO,N,循环体下面的语句,结束,无条件跳出循环,语句格式(以当型循环为例) DO WHILE IF EXIT ENDIF ENDDO,例8:P92_【例14】对键盘输入的每一个正数,输出 其算术平方根;当输入的数小于0时,结束程序。 *Example_14.prg DO WHILE .T. CLEAR INPUT “请输入一个数:” TO X IF TYPE(X)N WAIT 非数值型数据 LOOP ENDIF IF X 0 EXIT ENDIF ? X, 的算术平方根为:, SQRT(X) WAIT ENDDO,例9: 计算11

12、00的和 *EX3.PRG S=0 for i=1 to 100 s=s+i next ? s= , s,步长循环语句格式 FOR = TO STEP ENDFOR | NEXT,说明: 初值、终值和 步长应为数值 型表达式 若步长缺省, 默认值为1。,例10:【例15】求10!和1+32+ +92 *Example_15.prg S=0 T=1 FOR N=1 TO 10 T=T*N IF MOD(N,2) =1 S=S+N2 ENDIF ENDFOR ? “ N的值为:”, N ? “ 10!等于:”, T ? “1至10的奇数平方和为:”, S,此循环语句与下列循环语句功能完全等效: L

13、OCATE FOR WHILE DO WHILE FOUND( ) CONTINUE ENDDO,注: 在循环体内,不应该使用改变记录指针的语句,否则可能产 生死循环。,扫描循环语句格式 SCAN FOR WHILE ENDSCAN,例11:【例16】输出zymcb.dbf中不带删除标记的 专业信息和专业个数 *Example_16.prg USE ZYMCB M=0 SCAN IF !DELETED( ) ? F_bm, F_mc M=M+1 ENDIF ENDSCAN ? “共有” +STR(M,4)+ “个专业” USE RETURN,例12:【例17】输出乘法口诀表 *Example_

14、17.prg i=1 DO WHILE i=9 ? j=1 FOR j=1 TO i ? STR(J,1)+*+STR(I,1) + =+STR(J*I,2)+ ENDFOR i=i+1 ENDDO,块语句嵌套(多重循环) 先内后外,逐层循环 内、外循环的控制变量不要同名,例13:【 例 18 】将16个数存于数组AM(4,4)中,求 主对角线上元素之和 *Example_18.prg DIMENSION AM(4,4) S=0 FOR i=1 TO 4 FOR j=1 TO 4 INPUT “请输入第”+STR(i,1)+ “行第” ; +STR(j,1)+ “列元素: ” TO AM(i,

15、 j) IF i=j S=S+AM(i, j) ENDIF ENDFOR ENDFOR ? “主对角线元素之和为:”, S RETURN,use d:xsxxglxscjb scan for 英语0 do case case 英语=90 x=优秀 case 英语=75 x=良好 case 英语=60 x=及格 otherwise x=不及格 endcase ? f_xh,英语成绩等级为:,x endscan use return,例14:数组例子,*Ex4.prg clear input 请输入数据个数: to n dimension X(n) For k=1 to n input 请输入第+

16、alltrim(str(k)+个数: to X(k) next for i=1 to n-1 for j=i+1 to n if X(i)X(j) W=X(i) X(i)=X(j) X(j)=W endif endfor ?X(i) endfor ?X(n) return,假设输入数据为: n=4,X(1) X(2) X(3) X(4) 12 23 5 21,i=1,j=2,12 23 5 21,j=3,5 23 12 21,j=4,5 23 12 21,i=2,j=3,j=4,5 12 23 21,5 12 23 21,i=3,j=4,5 12 21 23,5,12,21,23,5.65.7

17、 多模块程序,程序间简单调用 调用方法:,说明: 子程序、过 程(文件) 及自定义函 数的建立与 程序的建立 相同。,嵌套调用:,说明: RETURN: 结束本程序,并返回调用程序,无上级程 序,则返回命令窗口,该命令可以缺省。 RETURN TO MASTER: 直接返回主程序。,子程序内部结构,子程序与普通程序没有太大区别,子程序更具有通用性或返回值的能力,往往要在子程序中加 参数语句(如PARAMETERS X,Y)和 带值返回语句(如RETURN S)。 一般子程序的内部结构为: PARAMETERS | LPARAMETERS 子程序体 RETRY | RETURN 表达式 | TO

18、 MASTER,PARAMETERS | LPARAMETERS :参数语句,是可选择语句,形式参数表由多个用逗号分隔的变量组成,用于接收调用程序传来的数据。 参数语句必须放在子程序中第一行,从接收数据的角度来看,PARAMETERS与LPARAMETERS作用相同。 两者区别主要在于:使用PARAMETERS说明的变量,除了在本程序中使用外,还可以在该程序的子程序中使用和改变其值; 而LPARAMETERS说明的变量仅能在本程序中使用。,子程序体: 是完成子程序功能的程序段, 编写程序时可以引用形式参数, 编写方法与普通程序的编写方法基本相同。 在子程序体内可以多处使用 RETURN | T

19、O MASTER 或RETRY语句, 以便返回到调用程序或主控程序。,RETURN:返回到调用程序中调用语句的下一条语句继续执行。 子程序中的最后一条RETURN语句可省略不写。 RETURN TO MASTER: 返回到主控程序中调用语句的下一条语句继续执行。 主控程序就是最顶层主程序,它可能直接或间接调用本子程序。 RETURN :如果要以函数形式调用子程序,则在编写此类子程序的返回语句时,应该使用带值返回语句RETURN ,其中表达式的值是函数返回值。 RETRY:执行到此语句时,返回到调用程序中,重新执行调用语句。,5.6.2 子程序调用,在VFP中,从子程序调用方式来看,可分为函数子

20、程序(也称用户自定义函数)和过程子程序(简称过程), 这两种子程序的主要区别在于:,带参数的调用,说明: 参数个数相同 对应参数的类型相同 实际参数为变量时可以 由子程序将结果传回 PARAMETERS: 可在本级程序及该程 序的子程序中使用 LPARAMETERS: 仅能在本级程序中使用,PARAMETERS (PARAMETERS) 需放在子程序中第 一行,过程调用 所谓调用过程就是转去执行过程子程序,完成其功能后,再返回到调用程序或主控程序继续执行。在程序中,通过DO语句调用过程子程序。 调用格式:DO WITH 语句说明:此语句中,实际参数表与调用自定义函数中实际参数表的要求和意义完全

21、相同,对于没有参数语句(PARAMETERS或LPARAMETERS)的过程子程序,调用时不要写WITH子句。,主程序通过实际参数和形式参数的对应关系向子程序传递数据, 也可以通过参数由子程序向主程序传递数据。 如果在子程序中改变某个形式参数值, 而用DO语句调用该子程序时, 对应的实际参数为简单内存变量, 则返回到主程序后,该实际参数变量被改成对应形式参数的值。,例1:设计一个计算圆面积的子程序,并要求在主程序中 带参数调用它。,*主程序:Ex5.prgymj=05,10 SAY “请输入半径:” GET bj DEFAULT 0READDO js WITH bj, ymj ? “ymj=”

22、, ymj RETURN,*子程序: js.prgPAREMETERS r, ss=PI( )*r*r RETURN,自定义函数 语句格式: FUNCTION PARAMETERS RETURN 调用格式: () 见下面的图示说明,自定义函数的调用 自定义函数与系统函数的调用方法相同,都是作为表达式的一部分。调用自定义函数就是转去执行自定义函数中的程序,执行完该程序后,再返回到调用语句并带回一个值。 调用格式:() 自定义函数名就是子程序名。实际参数表是用逗号分隔的若干个表达式,表达式与被调用函数中形式参数一一对应,用于向被调用子程序中传递数据。,自定义函数图示说明 调用方法一:,调用方法二:

23、 详见后面的过程文件的调用,注意这两种方 法的区别。,*Ex6.prg CLEAR S=0 FOR i=1 TO 10 S=S+F(i) ENDFOR ? S=, S,*F.prg PARAMETERS N M=1 FOR j=1 TO N M=M*j ENDFOR RETURN M,例2:计算阶乘的自定义函数,1在编写子程序时,函数子程序通常用RETURN 语句返回到主程序;而过程子程序通常用RETURN TO MASTER或RETRY语句返回到主程序。 2在调用子程序时,用函数形式调用函数子程序,使之成为表达式的一部分; 用DO语句(如DO INUM)调用过程子程序,使之成为程序中一条语句

24、。,函数子程序和过程子程序 可以互换调用方式, 函数子程序用DO语句调用时,系统将忽略函数的返回值; 过程子程序作为函数调用时,函数的返回值为真(.T.)。,过程文件 调用方法一:,说明: SET PROCEDURE TO ADDITIVE 打开(关闭)过程文件命令。 ADDITIVE:保留已打开的过程文件;若缺省此项,则先 关闭已打开的过程文件,再打开其他过程文件。,主程序文件example_22.prg store 0 to m,n z=请输入 set procedure to pr22 do inum if m=n ?pcal(0,m) else x=pcal(0,m) y=pcal(1

25、,m)/(pcal(1,n)*pcal(1,m-n) ?x*y endif set procedure to,过程文件pr22.prg: function pcal parameter x,y if x0 return 0 endif s=x ?x ?y for i=1 to y s=iif(x=0,s+i,s*i) endfor return s endfunc procedure inum input z+m: to m input z+n: to n return endproc,调用方法二:,5.8 变量的作用域,公共变量 命令格式: PUBLIC 说明: 命令窗口中定义的变量均为公共

26、变量 程序中,公共变量在使用前需用PUBLIC定义, 一经定义,可在任一级程序中使用 已定义但未赋的公共变量初值为.F. 程序终止时公共变量不会被自动清除,需用 RELEASE 或 CLEAR ALL命令清除。,私有变量 命令格式: PRIVATE ALL LIKE|EXCEPT 说明: 程序中不用PUBLIC定义的变量均是私有变量 私有变量的作用范围:仅在本级及其下任意级程 序中有效,即可在本级程序及下级程序间传送数 据,但无法将数据传到上级程序。 用PRIVATE声明的变量中,若有与上级程序中 的变量同名时,上级程序中同名的变量将被“隐藏”,本地变量 命令格式 LOCAL 说明: 本地变量只能在建立它的本级程序中使用,在 其上级或下级程序中无效。 本地变量初值被自动赋为.F. 用 LPARAMETERS 说明的形式参数是该程 序的局部变量。 在本级程序结束时,本地变量被自动释放。 LOCAL 与 LOCATE 前4个字母相同,故不 可缩写。,公共变量、私用变量及本地变量的作用范围示意图,*主程序.prg PUBLIC X,*子程序1.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论