版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VFP-04-06变量作用域、自定义函数.doc 8-8变量作用域、自定义函数4.5.3 内存变量的作用域变量的作用域:变量的作范围。程序由模块(主、子程序)组成,模块中有内存变量,内存变量有作用范围。变量的作用域,从定义变量处开始,一直向下。1定义全局内存变量全局变量既可以是单个变量,也可以是数组。分别以下列格式定义。格式1:Public <内存变量表>格式2:Public <数组名1>(上界1,上界2, .),功能:定义全局变量。<内存变量表>中既可含普通变量,也可含数组。全局变量不会自动释放。只能用release命令显式释放,或退出VFP。VFP命令窗
2、口中定义的变量,默认为全局变量。全局数组的每个元素都是全局的。第116页,例 4.35 主程序中使用子程序中定义的全局变量。*文件名Main.prgset talk offclearclear memory &&清除所有内存变量I=2 &&默认是私有的Do ABC?"主程序中的输出结果:"?"I="+str(I,2)+" J="+str(J,2)set talk onreturn*-Procedure ABCpublic JJ=I*8J=J+5?"过程中的输出结果:"?"I
3、="+str(I,2)+" J="+str(J,2)return小提示:要检测全局变量,请先clear memory以排除干扰。2定义局部内存变量(1)什么叫局部?更小的范围就是局部。对于一个模块,更后的部分是局部。对于主程序,子程序是局部。(2)Private定义局部变量格式1:Private <内存变量表>格式2:Private <数组名1>(上界1,上界2, .),功能:定义局部变量。未经定义的变量,默认是局部(Private)的。无论全局还是局部变量,无初值的,一律自动赋初值.F.。局部变量作用域的子模块扩展规则Private变量的
4、作用域,通过调用子模块而扩展到子模块中。图4-20 Private变量作用域子模块扩展规则第117页,例 4.36 子程序中的局部变量,在主程序中找不到。R=100 &&默认为Private变量Do Sub1 &&调用子程序?P &&主程序中找不到这个变量Return*-procedure Sub1P=2*3.14*R &&主程序中的Private变量,子程序中可用return3Private隐藏内存变量的功能(1)同名变量就近使用规则(原理)程序中,对于同名的变量,默认使用最近的。因此,字段变量(因为在当前工作区内)优先于(即隐
5、藏)同名内存变量;注:什么叫隐藏?就是被遮住,看不见,用不上。图4-22 字段变量隐藏同名内存变量例如 use student.dbfuse student.dbf?学号 &&结果是字段变量“学号”值,如“960106”学号="abcd" &&“=”号赋值,只给内存变量赋值?学号 &&结果还是优先使用字段变量?m.学号 &&特别用“m.”指明内存变量,结果才是“abcd”同一模块内,小局部存变量优先于(即隐藏)大局部同名内存变量;图4-23 Private变量隐藏同模块同名变量不同模块中,子模块局部内存变量优先
6、于(即隐藏)主模块同名内存变量。图4-26 用Private隐隐藏变量小提示:主程序中的private变量,子程序同样可以用private屏蔽。(3)为什么大范围定义的局部变量,小范围中再定义为全局变量会出错?因为那样,与Private的隐藏功能相矛盾。第118页,例 4.37 子程序中的同名局部变量隐藏主程序中同名变量。R=100 &&默认为Private变量P=10 &&默认为Private变量Do Sub2 &&调用子程序?P &&仍是主程序中的值Return*-procedure Sub2Private P &&a
7、mp;局部变量,主程序中的同名变量被屏蔽P=2*3.14*R &&主程序中的Private变量,子程序中可用Return*(5)有没有不通过子程序扩展作用域的变量?有,Local变量,即本地变量。如:Local x,y,z。小提示:采用Local变量,是向C语言靠拢。4调用过程时的数据传递教学提示:VFP的参数传递,过程中默认传址,函数中默认传值。向过程传递数据,有两种方法。(1)利用Private变量的作用域扩展规则,不传而传过程中,可以直接使用主程序中的Private变量,不必传。第118页,例 4.38 计算矩形面积。G=8 &&长K=6 &&am
8、p;宽mj=0 &&面积do sub3?Mjreturn*-procedure sub3mj=G*Kreturn(2)在过程第一句用Parameters接收参数主程序中传出参数格式:Do <过程名> With <实际参数表>子程序中接收参数格式: Parameters <内存变量表>说明:子程序中,Parameters必须是第一句。Parameters变量是Private变量。传值:Parameters后的变量与主程序中对应的实际参数无关。传引用:Parameters后的变量与主程序中对应的实际参数是同一个变量,名称可能不同而已,同时变化。引
9、用隐藏实参规则子模块中,引用参数隐藏实际参数,是因为引用参数与实际参数是同一个变量,只是在子模块中另取了一个名字(别名)而已。因此,原来的实际参数被隐藏,才不会混乱,包括实际参数是Public变量的情况。如何决定传值、传地址?由实际参数决定。过程的实际参数默认引用。要传值须实际参数加“()”,或者写成表达式。图4-27 传值与传引用第119页,例 4.39 写程序运行结果。set talk offx=1y=3do sub4 with x,(y),5?x,yreturn *-Procedure sub4parameters a,b,ca=a+b+cb=a+b-creturn&&答
10、: 9, 3第120页,例 4.40 利用一个过程计算矩形面积,要求在主程序输出该面积值。set talk offclearinput "矩形长:" to Linput "矩形宽:" to WS=0do Area with L,W,S?"矩形面积:",Sreturn*-Procedure AreaParameters C,K,MM=C*Kreturn4.5.4 自定义函数1自定义函数的结构自定义函数实际上是一个过程,只不过其Return语句后带有表达式,能向主函数返回值。格式:Function <函数名>Parameter
11、s <形式参数表><语句序列>Return <表达式>说明:缺省<表达式>返回.T.。与过程一样,自定义函数,可以单独以同名程序文件存储,也可以存入过程文件中。2自定义函数的调用小提示:过程中叫实际参数的,函数中叫自变量。格式:因变量= <函数名>(自变量表)说明:函数查找规则调用函数时,先在内部函数中找;找不到再到打开的过程文件中找;再找不到,在当前文件夹中找;再找不到,出错。若自定义函数与内部函数同名,将不被找到,用不到。参数表要与自变量表相对应,包括类型和个数。自变量表中,可以是变量,也可以是表达式。自变量默认传值。要传引用,须
12、在自变量前面加“”,或SET UDFPARMS TO REFERENCE设置默认为传引用。函数可以当过程用,调用格式为“do <函数名> with 自变量表”。但要注意,当过程用时,默认传引用,因为过程默认传引用;且放弃返回值。小提示:自变量默认传值,是向C语言靠拢。小提示:过程默认传引用,函数默认传值。第122页,例 4.41 定义一个函数,将day()日期转成“公元 年 月 日”格式。Y=DA()?Yreturn*-Function DAD="公元"+LTRIM(STR(YEAR(DATE()+"年"D=D+LTRIM(STR(MONTH
13、(DATE()+"月"D=D+LTRIM(STR(DAY(DATE()+"日"Return D第122页,例 4.42 用自定义函数计算组合数。y=c(5,3)?yreturn*-Function FAC &&阶乘factorparameters xf=1for k=1 to x f=f*kendforreturn f*-Function C &&组合数conbinationparameters m,ny=int(FAC(m)/(FAC(n)*FAC(m-n)return y*附加 4.5.5 自定义函数的括号参数格式“()”在VFP中是间接引用符,有传值之意。1自函数的“()式”结构格式:Function <函数名>(<参数表>)<语句序列>Return <表达式>说明:这是自定义函数的另一种格式。它只是将Function行和Parameter行合并成一行,其它并无差别;其调用方式也没有区别。小提示:表单自定义函数不能用括号参数格式,故一般不学、不用。例 自定义函数fun1(x,y,z),分别将其当过程和“()式”函数调用。A=123B=234C="abc"cleardo fun1 with A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 借用三相电合同协议书
- 借壳国企融资协议
- fpga课程设计密码锁
- 8岁创意美术课程设计
- 2023年浙江金华职业技术大学选调考试真题
- 2023年深圳公务员考试真题
- 2023年山东商务职业学院招聘考试真题
- 2023年金华市教育局直属学校招聘教师考试真题
- 有关端午节演讲稿大全12篇
- 中专护理药理学课程设计
- 波峰焊实验设计分析报告
- 石阡县年产30万吨饮用天然矿泉水产品建设项目(取水工程变更)环评报告
- 山东济宁旅游PPT介绍济宁幻灯片模板
- 初中英语- It's important to get enough sleep.2a教学课件设计
- 2022年初中语文新课标(附权威解读)
- 第3课时亿以内数的写法(教案)四年级数学上册(人教版)
- T-CSSS 002-2023 健康成年人身体活动能量消耗参考值
- 外交学概论知到章节答案智慧树2023年外交学院
- 2022年北京科技大学第二批非教学科研岗位招聘笔试备考题库及答案解析
- 全员改善活动方案
- 2023年粮油保管损耗(4篇)
评论
0/150
提交评论