版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、8.3.1 全局变量与局部变量的说明 在Foxpro中,按照变量的作用范围可将内存变量划分为全局变量和局部变量。只要对内存变量进行适当的说明,就可以直接使用内存变量在调用程序和被调用程序之间相互传递数据。 全局变量的说明 所谓“全局变量”是指在Foxpro中运行的任何程序都可以使用该变量(引用或赋值),其中包括说明它的程序、过程或自定义函数以及各级被调用的程序、过程或自定义函数,直到使用内存变量清除命令RELEASE或CLEAR ALL清除为止。 全局变量在使用之前, 必须使用PUBLIC命令进行说明。 【格式】PUBLIC 其中,为待说明的内存变量名或数组名,含有多个变量时,变量名之间用逗号
2、“,”分隔。 【功能】 定义全局变量。 【说明】 使用PUBLIC命令定义的全局变量的初值均为逻辑假值.F.。 全局变量必须先说明,后使用。 局部变量的说明 所谓“局部变量”是指那些只能在说明它的程序、过程或自定义函数中使用的内存变量,其中包括被它调用的各级程序、过程或自定义函数。一旦退出说明它的程序、过程或自定义函数,局部变量将自动消失,其值不能再被引用。 在Foxpro中,一旦对内存变量进行了赋值,该变量就算定义了,如果没有事先对其进行全局说明,则自动说明为局部变量。同样,在程序中通过DECLARE或DIMENSION命令定义的数组,如果没有事先对其进行全局说明,也视为局部变量。 由于局部
3、变量也适用于各级被调用的程序、过程或自定义函数,所以当调用程序中的内存变当调用程序中的内存变量与被调用的程序、过程或自定义函数中的内存量与被调用的程序、过程或自定义函数中的内存变量同名时,变量同名时,将会产生意想不到的副作用。为了避免这种情况发生,Foxpro提供了PRIVATE命令, 可将调用程序中的同名内存变量暂时隐藏起来,即在执行被调用的程序、过程或自定义函数时,只有该程序、过程或自定义函数中的局部变量参加运算,不会影响调用程序中的内存变量。一旦调用结束返回调用程序时,自动恢复被隐藏的内存变量。【格式】 PRIVATE ALL LIKEEXCEPT ARRAY 其中,表示要说明的局部内存
4、变量名列表,可以是一个或多个用逗号分隔的内存变量。是指含有*和?的变量名,可以表示某一类变量。表示要说明为局部数组的名称列表。 【功能】说明局部内存变量或数组。 【说明】 使用PRIVATE命令只能说明局部变量,不能用来定义或建立变量,也就是说, 必须通过赋值或其它途径来建立。 在程序、过程或自定义函数中,使用PRIVATE命令说明的局部变量, 只能在该程序、过程或自定义函数中使用。 在编程时,如果希望在调用程序和被调用程序中使用相同的内存变量名,可在被调用程序中使用PRIVATE命令将其说明为局部变量,这样在被调用程序执行过程中, 调用程序中的这些同名内存变量将被隐藏起来,以确保其值不被破坏
5、。一旦调用返回,自动恢复原来那些被隐藏起来的同名变量。 区域变量的说明 在Foxpro中,除了可以使用全局变量和局部变量之外,还可以使用区域变量。区域变量与局部变量类似,当其它内存变量与区域变量重名时,它们之间互不干扰,因为区域变量在一个区域中被保护。在Foxpro中建立区域变量时,首先使用#REGION定义一个区域, 然后利用REGIONAL命令对存放到该区域的变量进行说明。 【格式】#REGION REGIONAL 其中,#REGION为Foxpro提供的预处理程序指令,它根据指定的(0-31)建立一个区域以便存放区域变量。REGIONAL命令用来说明一个或多个欲存放在该区域的内存变量或内
6、存变量数组。当中含有多个变量时,变量之间用逗号“,”分隔。 【功能】建立区域内存变量。 例:prog8_918.3.2 变量的作用域 所谓变量的作用域是指该变量可以使用的范围,也就是说,这个变量在哪个程序、过程或自定义函数中有效。 全局变量的作用域是从该全局变量的定义开始, 一直到退出Foxpro程序时所执行的任何程序、过程或自定义函数。 使用PRIVATE 命令说明的局部变量(或使用REGIONAL命令说明的区域变量)的作用域就是它所在的那个程序、过程或自定义函数。 自动说明(即非PRIVATE命令说明)的局部变量的作用域是从该变量的定义(如赋值)开始,到结束该程序时所执行过的所有命令、程序
7、、过程或自定义函数。(例prog8_10.prg 例prog8_11.prg 例prog8_12.prg) 8.4 递归8.4.1 递归的概念 在Foxpro中,过程和自定义函数除了能够嵌套调用外,还可以自己调用自己,我们把这种调用称为递归调用(简称递归)。其中,递归又可分为直接递归和间接递归两种形式。所谓“直接递归”是指在一个过程(或自定义函数)内部又出现了调用自身的调用。所谓“间接递归”是指在过程(或自定义函数)中,调用了另外一个过程(或自定义函数),而在中,又出现了对的调用。 在程序设计中,采用递归来求解问题简单而自然,并且编写出的程序代码也比较短,但并不是所有的问题都能够采用递归来求解
8、。采用递归求解的问题必须满足以下三个条件: 可以把要求解的问题转化为一个新的问题,而这个新问题的求解方法与原问题的求解方法相同,只是所处理的对象不同,而且它们只是有规律的递增或递减。 可以通过转化过程使问题得到求解。 必须存在一个能够终止递归的条件,使得经过有限次递归后,得到问题的解。 【例8.13】采用过程递归调用,编写一个把任意位正整数逆转的程序。例如,输入整数 12345,逆转后为54321。 Prog8_13.prg【例8.14】分析输入K值为5时下面程序的输出结果。 Prog8_14.prg 【例8.15】编写一个利用函数递归调用,计算任意正整数的阶乘的程序。 Prog8_15.pr
9、g 【例8.16】分析下面程序的运行结果。Prog8_16.prg9.1 数组程序设计 同其它高级程序设计语言一样,在Foxpro中也可以使用数组。数组是具有相同名字的有序数据的集合,由若干个数组元素组成。数组中的每个元素相当于一个内存变量,因此所有对内存变量进行操作的命令均可适用于数组元素,但数组元素使用起来要比普通的内存变量方便得多。Foxpro支持一维数组和二维数组,与其它高级语言不同的是,Foxpro中的数组元素可以具有不同的数据类型,并且允许重复定义数组。利用数组进行程序设计,可以简化程序的编写,便于复杂问题的求解。第九章 Foxpro实用编程技术 9.1.1 数组的定义 在Foxp
10、ro中,使用数组之前通常需要先进行定义。也就是说,使用数组说明命令对数组的名称、维数、大小(即数组元素的个数)进行说明。【格式】 DECLAREDIMENSIONPUBLIC (,),(,), 其中,、为要定义数组的名称,其命名规则同内存变量完全相同。当同时定义多个数组时,数组名之间用逗号“,”分隔。 数组名后括号内的数值表达式用来指定所定义数组的维数和大小。若数组名后面的括号内只用一个数值表达式,则表示要定义一维数组,数值表达式的值代表该数组中元素的个数。若数组名后面的括号内同时使用两个数值表达式,则表示要定义二维数组,这两个数值表达式的乘积为该二维数组所拥有元素的个数。 【说明】 这三条命
11、令都可以用来定义数组。其中,DECLARE命令和DIMENSION命令的功能完全相同,PUBLIC命令用来定义全局数组变量。 使用这三条命令所定义的数组,数组元素的初值均初始化成逻辑值.F., 因此引用数组元素值之前,必须先对其赋值。 定义数组时,数组名后面的数值表达式必须使用一对小括号或中括号括起来。 9.1.2 数组元素的引用与赋值 数组元素的引用 由于数组元素在内存中是按顺序存储的,所以引用数组元素时必须指定该元素在数组中的位置。数组元素在数组中的位置可以用下标来表示,一旦下标确定,数组元素也就确定了。 1. 一维数组的引用格式如下:数组名称下标表达式 或 数组名称(下标表达式) 其中,
12、下标表达式用来指定所引用的元素在数组中的位置,可以是正的数值常量、赋过值的变量或数值表达式,且下标表达式必须使用一对小括号或中括号括起来。 2.二维数组可以理解为由M行N列组成的一张二维表,因此引用二维数组中的某个元素,必须指定其行、列位置。引用格式如下: 数组名称行下标表达式,列下标表达式 3.在引用数组元素时,如果指定的下标表达式的值超过定义数组时所规定的最大下标值,将产生“下标超界”错误信息。例如,对于前面定义的数组A中元素的引用,若使用A11,Foxpro将报告“下标超界”错误信息。 数组元素的赋值 在Foxpro中,一旦数组定义后其元素自动被初始化成逻辑假值.F., 因此在使用数组元
13、素的值之前,必须对其重新赋值。对数组元素的赋值既可以通过赋值命令实现,也可以使用有关数组操作的命令实现。 利用赋值命令为数组元素赋值有以下两种方式: 用变量赋值命令为数组元素赋值。 用赋值命令直接对整个数组赋值 当对数组中的元素赋相同的值时,Foxpro允许使用赋值命令直接对数组名进行赋值。 数组元素的查找ASCAN() 【格式】ASCAN(,) 其中,为要查找的一维数组或二维数组。指定要查找的数组元素,可以是任何类型的表达式。指定查找的起始位置, 省略时从数组中第一个元素开始查找。指定查找的范围,省略时为指定查找位置开始的全部元素。【功能】在数组中查找指定的数组元素。【说明】如果查找成功,则
14、返回该元素在数组中的序号,否则返回0值。 若查找的元素为字符类型,则查找结果将受SET EXACT的设置影响。 数组的排序ASORT() 【格式】ASORT(,) 其中,为要排序的一维数组或二维数组。表示数组元素的序号,指定排序的起始位置,省略时从第一个元素开始排序。 指定一维数组中要排序的元素个数或二维数组中要排序的元素的行数,省略时将从指定的起始位置开始,一直到数组结束。指定排序的方向,为0时表示升序(由小到大)排序,为1 时表示降序(由大到小)排序,省略时按升序排序。【功能】按升序或降序对数组中的元素进行排序。【说明】 参加排序的数组元素必须具有相同的数据类型,否则将产生“数据类型不匹配”错误信息。 一维数组是以元素为单位进行排序的,即从指定的元素开始,直到指定的元素个数为止。 【例9.9】假设有两个数据库结构完全相同的数据库RSDA1.DBF和RSDA2.DBF, 为了保证输入数据的可靠性,这两个数据库中的记录分别由两个操作员按照同样的数据建立。要求编程检查两个数据库中的记录是否完全相同,如果发现不相同的记录,需要将RSDA2.DBF 中不一致记录的记录号和记录
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026下半年河南省事业单位市场监管岗笔试模拟练习习题集带解析
- 2026初中历史教资面试通史重难点题库及答案
- 京津冀外企需办理备案的基本规定
- 2026秋小学人教版数学四年级上册九月份月考练习卷及答案
- 漂染头发试题全解与答案呈现
- 2026年危废知识考试题目及答案
- 医疗技术专业试题及详尽答案
- 2026年中国大活络丸市场分析及发展策略研究预测报告
- 2027届湖北省武汉江汉区四校联考九年级数学第一学期期末达标检测模拟试题含解析
- 初中《关雎》常见试题及完整答案
- ai时代工作机会正流向哪里?-2026ai+人才市场报告-得到ai学习圈x科锐国际-202609
- 安徽财经大学计算机基础专升本(共六卷)含答案解析
- 第一单元 《县委书记的榜样-焦裕禄》《2020中国抗疫记》 联读课件
- 石油化工企业反恐防爆应急预案
- 苹果电脑macOS效率手册
- 3500个英语基础词汇
- 模型16 全等三角形-半角模型-原卷版
- AQ/T 1023-2006 煤矿井下低压供电系统及装备通 用安全技术要求(正式版)
- 前列腺穿刺活检的护理
- 中式面点师(高级)职业资格证考试题库(带答案)
- 电子元器件英语词汇中英文对照表全套
评论
0/150
提交评论