资源预览内容
第1页 / 共30页
第2页 / 共30页
第3页 / 共30页
第4页 / 共30页
第5页 / 共30页
第6页 / 共30页
第7页 / 共30页
第8页 / 共30页
第9页 / 共30页
第10页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第11讲 多模块程序设计,第6章 程序设计基础,2,问卷调查建议,回顾上节课的内容,多提问。 速度慢些,总结重点。 多出些SQL语句的题,加强查询训练。 把重点以笔记的形式整理出来。 下午上课困,活跃课堂气氛。,第6章 程序设计基础,3,1.VFP程序的三种基本结构?,顺序结构 选择结构 循环结构,课前回顾,2.选择(分支)结构的两种类型?,条件语句,IF ELSE ENDIF,DO CASE CASE CASE OTHERWISE ENDCASE,情况语句,第6章 程序设计基础,4,课前回顾,3.循环结构的三种类型?,DO WHILE LOOP EXIT ENDDO,FOR = TO STEP LOOP EXIT ENDFOR|NEXT,SCAN FOR ENDSCAN,SKIP,i=i+1,第6章 程序设计基础,5,教学内容,第6章 程序设计基础 6.3 多模块程序设计 6.4 程序的调试,第6章 程序设计基础,6,教学重点 形参与实参的概念、变量的作用域 模块的定义和调用、参数的按值传递和按引用传递 教学难点 形参与实参的概念、变量的作用域 模块的定义和调用、参数的按值传递和按引用传递 程序的调试,第6章 程序设计基础,7,6.3 多模块程序设计,6.3.1模块的定义和调用,选课系统,基本信息管理,退出,成绩管理,主模块,选课管理,过程,第6章 程序设计基础,8,6.3 多模块程序设计,6.3.1模块的定义和调用,PROCEDURE RETURN ENDPROC,【说明】 过程必须以PROCEDURE开始,ENDPROC可省略,如省略,到下一条PROCEDURE命令或文件结尾处结束 RETURN使过程返回程序的调用处继续执行下一条语句,过程必须先定义,才能作为一个模块被调用。 过程既可以独立存放也可以存放在主程序文件中, 一个文件中可以包含多个过程,此文件称为过程文件。,1.过程的定义,第6章 程序设计基础,9,6.3 多模块程序设计,6.3.1模块的定义和调用,SET PROCEDURE TO ,过程文件2,ADDITIVE,【说明】 可以同时打开多个过程文件 ADDITIVE:打开过程文件同时不关闭原先已打开的过程文件,2. 过程文件的打开,想调用过程文件中的过程,必须先打开过程文件.,第6章 程序设计基础,10,6.3 多模块程序设计,6.3.1模块的定义和调用 3.过程的调用 【格式1】DO 【格式2】(),*程序1.prg SET TALK OFF a=“100“ DO SUB &调用过程SUB ?a PROCEDURE SUB &定义过程SUB a=a+“100“ ENDPROC,100100,【例6.16】写出程序的运行结果。,第6章 程序设计基础,11,6.3 多模块程序设计,6.3.1模块的定义和调用 4.过程的关闭,*主程序main.prg CLEAR ?“A“ SET PROCEDURE TO pp &打开过程文件pp.prg DO proc1 &调用过程proc1 ?“B“ DO proc2 &调用过程proc2 ?“C“ SET PROCEDURE TO &关闭过程文件pp.prg RETURN,*过程文件pp.prg PROCEDURE proc1 &过程proc1 ?“D“ ENDPROC PROCEDURE proc2 &过程proc2 ?“123“ ENDPROC,A D B 123 C,调用过程结束时,需要关闭过程文件.,SET PROCEDURE TO &关闭所有打开的过程文件 CLOSE PROCEDURE &关闭指定的过程文件,【例6.17】写出程序的运行结果。,第6章 程序设计基础,12,6.3 多模块程序设计,6.3.2参数传递 带参数调用的语句 接受参数的语句,【格式1】DO WITH , 【格式2】(,),【格式】PARAMETERS(,),【说明】 在过程内部,PARAMETERS语句必须为过程的第一条可执行语句。 形参与实参的类型必须一致,形参的数目不能少于实参的数目。 如果形参的数目多于实参的数目,多余的形参初值取逻辑假.F.。,【说明】实参可以是常量,变量,也可以是表达式,但必须有确定的值,第6章 程序设计基础,13,6.3 多模块程序设计,6.3.2参数传递 参数传递方式 用“DO WITH ” 方式调用,第6章 程序设计基础,14,例: *主程序MAIN.PRG SET TALK OFF FS=0 SET PROCEDURE TO GC DO AA WITH 5, FS &实参 ? FS CLOSE PROC RETURN,*过程文件GC.PRG PROC AA PARAMETERS X, Y &形参 Y=X*X+15 RETURN,5 0,40,40,第6章 程序设计基础,15,6.3 多模块程序设计,6.3.2参数传递 参数传递方式 用“()”方式调用,设置方式: SET UDFPARMS TO VALUE|REFERENCE,【说明】 TO VALUE:按值传递; TO REFERENCE:按引用传递; 默认为按值传递.,以上两种调用方式 如果将参数用括号括起来,设定按值传递; 如果在参数前加符号,设定按引用传递;,第6章 程序设计基础,16,6.3 多模块程序设计,【例6.18】按值传递和按引用传递示例,*主程序 SET TALK OFF CLEAR a=2 b=3 c=5 SET UDFPARMS TO VALUE test(a,(b),c+1) &a按值传递,b按值传递,c+1按值传递 ?“第一次调用后,主程序中a=“,a,“b=“,b,“c=“,c DO test WITH a,(b),c+1 &a按引用传递,b按值传递,c+1按值传递 ?“第二次调用后,主程序中a=“,a,“b=“,b,“c=“,c SET UDFPARMS TO REFERENCE test(a,(b),c+1) &a按引用传递,b按值传递,c+1按值传递 ?“第三次调用后,主程序中a=“,a,“b=“,b,“c=“,c DO test WITH a,(b),c+1 &a按引用传递,b按值传递,c+1按值传递 ?“第四次调用后,主程序中a=“,a,“b=“,b,“c=“,c RETURN,第一次调用后,主程序中a= 2 b= 3 c= 5 第二次调用后,主程序中a= 3 b= 3 c= 5 第三次调用后,主程序中a= 4 b= 3 c= 5 第四次调用后,主程序中a= 5 b= 3 c= 5,*过程test PROCEDURE test PARAMETERS x,y,z x=x+1 y=y+1 z=z+1 RETURN,第6章 程序设计基础,17,6.3 多模块程序设计,【例6.19】编写求阶乘的过程,并利用这个过程求m!+n!,SET TALK OFF CLEAR INPUT “请输入m:“ TO m INPUT “请输入n:“ TO n STORE 0 TO sm,sn DO f WITH m,sm DO f WITH n,sn ?“m!+n!=“,ALLTRIM(STR(sm+sn) RETURN,*过程f PROCEDURE f PARAMETERS x,s s=1 FOR i=1 TO x s=s*i ENDFOR RETURN,第6章 程序设计基础,18,6.3 多模块程序设计,【例6.20】将例6.19中的过程调用改写成函数调用的形式,SET TALK OFF CLEAR INPUT “请输入m:“ TO m INPUT “请输入n:“ TO n ?“m!+n!=“,f(m)+f(n) RETURN,*自定义函数f PROCEDURE f PARAMETERS x,s s=1 FOR i=1 TO x s=s*i ENDFOR RETURN s,第6章 程序设计基础,19,【国二08考题(26) 】下列变量执行后,内存变量X和Y的值是:,CLEAR STORE 3 TO X STORE 5 TO Y PLUS(x),Y) ?X,Y,PROCEDURE PLUS PARAMETERS A1,A2 A1=A1+A2 A2=A1+A2 ENDPROC,A. 8 13 B. 3 13 C. 3 5 D. 8 5,第6章 程序设计基础,20,例:国二真题下列程序段的输出结果 Clear store 10 to a store 20 to b set udfparms to reference do swap with a,(B) ?a,b,procedure swap parameters x1,x2 temp=X1 x1=x2 x2=temp endproc,A)10 20 B)20 20 C)20 10 D)10 10,第6章 程序设计基础,21,6.3 多模块程序设计,6.3.3内存变量的作用域 全局变量,该变量在任何程序模块都可使用 全局变量必须先定义后使用,【格式】PUBLIC 【说明】 全局变量的初值为逻辑假.F. 在命令窗口中建立的变量是全局变量。,第6章 程序设计基础,22,6.3 多模块程序设计,6.3.3内存变量的作用域 局部变量,只能在建立它的程序模块中使用(上下层模块都不能使用)。,【格式】LOCAL 【说明】 局部变量的初值为逻辑假.F. 不能缩写为前4个字母(与locate重),第6章 程序设计基础,23,6.3 多模块程序设计,6.3.3内存变量的作用域 私有变量,在建立变量的程序模块和它的子模块中都可以使用 私有变量不需要声明,直接可以使用,【格式】PRIVATE ,隐藏主程序中可能存在的同名变量,【说明】 隐藏上层程序模块中同名的内存变量,使其在当前模块及其下属模块中暂时无效。上层模块的同名变量的值保持不变。,第6章 程序设计基础,24,6.3 多模块程序设计,6.3.3内存变量的作用域 私有变量 【例6.21】私有变量示例,SET TALK OFF CLEAR x1=100 x2=200 &x1和x2都为私有变量 do gc1 ?“在主程序中x1=“, x1 ?“在主程序中x2=“,x2 RETURN *过程gc1 PROCEDURE gc1 PRIVATE x1 &隐藏上层的变量x1 x1=1000 x2=2000 ?“在过程中x1=“,x1 ?“在过程中x2=“,x2 RETURN,在过程中x1=1000 在过程中x2=2000 在主程序中x1=100 在主程序中x2=2000,第6章 程序设计基础,25,6.3 多模块程序设计,6.3.3内存变量的作用域 私有变量 【例6.22】变量作用域的综合示例,SET TALK OFF CLEAR PUBLIC x,y x=15 y=20 DO gc1 ?“在主程序中,x=“,ALLTRIM(STR(x) &x=15 ?“在主程序中,y=“,ALLTRIM(STR(y) &y=120 RETURN,*过程gc1 PROCEDURE gc1 PRIVATE x &隐藏主程序中的变量x x=50 LOCAL y &声明变量y为局部变量 y=35 DO gc2 ?“在过程gc1中,x=“,ALLTRIM(STR(x) &x=250 ?“在过程gc1中,y=“,ALLTRIM(STR(y) &y=35 RETURN,*过程gc2 PROCEDURE gc
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号