南天内部资料,严谨出售
例: CLEAR
x=”OK”
STORE “学习” TO y ok=”努力” ?&x+(y)
这里需要注意:变量x是字符型,宏替换替换的是变量x字符串的内容,即:?&x替换为OK,则最后一行就变成 ?OK+(y),所以运行结果为:努力学习。
? 8
? 排序优先于其他数据
? 在计算过程中或大多数函数中都可以用到NULL值 NULL值会影响命令函数,逻辑表达式和参数.空值处理 (1)空值的特点
? 等价于没有任何值
? 与0、空字符串(“”)及空格不同的行为可用.NULL.标记,或键入[ctrl]+[0] (2)几个函数(考点)
函数 EMPTY() ISBLANK() ISNULL() (3)注:NULL值不是一种数据类型 store 5 to nx nx=.NULL.
?TYPE(“nx”) &&&&&& 显示 N
二、程序设计基础
程序是能够完成一定任务的命令和语句的有序集合。这组命令和语句被存放在称为程序文件或命令文件的文本文件中。
? 程序文件的建立与修改 1.菜单命令
建立:文件----新建-----(或常用工具栏的“新建”按钮) 修改:文件----打开-----选一个文件 2. 项目管理器
建立:代码选项卡----程序-----新建按钮----进入编辑窗口 修改:代码选项卡----选一个程序-----修改按钮----进入编辑窗口 3. 在命令窗口中利用命令
MODIFY COMMAND [文件名|?]
进入编辑窗口,建立新文件或修改已存在的文件 4. 进入数据库的存储过程中
项目管理器----数据选项卡----存储过程----添加(或修改)按钮
? 程序文件的运行
11
空白 .T. .T. .F. 空字符串 .T. .T. .F. 0 .T. .F. .F. 空值 .F. .F. .T. 建立的程序可以形成一个独立的文件,也可以把多个程序放在一个称为过程文件的文件中,要运行放在过程文件中的程序,事先要执行命令: SET PROCEDURE TO 〈过程文件名〉 运行程序文件有以下方法:
1. 在命令窗口使用命令: DO 〈程序文件名〉
2.在项目管理器中 代码选项卡----选一个程序-----运行按钮
3. 工具栏的!按钮 ? 程序的组成
一个程序由两部分组成:
1.说明部分:
编制的程序中通常要用到好多不同的数据:数值的、字符的、日期的?。这些数据有的在程序运行中始终不变,有的在程序运行中随时在变。在程序运行中始终不变的量称为常量,随时变化的量称为变量。VFP程序中可以直接使用各种量,不用说明。说明部分主要用来说明程序中使用的一些特殊变量,如全局变量,数组等。 说明语句有以下几个:
PUBLIC 说明的变量在整个应用程序都可以使用 LOCAL 说明的变量只可以在本程序中使用
DECLEAR 或DIMENSION 说明的变量可以在本程序和它的子程序中使用
数组在使用之前必须说明,说明的格式是:
PUBLIC | LOCAL | DECLEAR | DIMENSION 〈数组名〉(行数[,列数])
2.语句部分:
语句部分也称程序体,由以下几种语句组成:
(1)顺序语句:包括赋值语句和VFP的一些命令 (2)分支语句:
·条件分支语句:语句格式为
IF 〈条件〉 〈语句序列1〉 [ELSE
〈语句序列2〉] ENDIF
·情况分支语句:语句格式为 DO CASE
CASE 〈条件1〉 〈语句序列1〉 CASE 〈条件2〉 〈语句序列2〉 ?
CASE 〈条件n〉 〈语句序列n〉 [OTHERWISH 〈语句序列n〉]
12
南天内部资料,严谨出售
ENDCASE (3)循环语句:
·FOR循环语句:语句格式为
FOR〈循环变量〉=〈初值〉TO〈终值〉[STEP〈步长〉] 〈循环体〉 ENDFOR(或NEXT)
该语句一般用于循环次数已知的情况,其中循环中自带了循环变量增加的语句: (循环变量=循环变量+步长) ·DO 循环语句:语句格式为 DO WHILE〈条件〉
〈语句序列1〉 [LOOP] 〈语句序列2〉 [EXIT]
〈语句序列3〉 ENDDO
该语句一般用于循环次数不知的情况,用〈条件〉满足与否来控制循环次数。条件满足(即表达式为“真”)执行循环,条件不满足(即表达式为“假”)退出循环。 ·SCAN循环语句:语句格式为
SCAN [FOR〈条件1〉][WHILE〈条件2〉] 〈循环体〉 ENDSCAN
该语句一般用于数据表,执行该语句时,记录指针自动、依次的在当前表的指定范围内满足条件的记录上移动,对每一条记录执行循环体内的命令。[注]:其中循环中自带了指针移动的语句:SKIP(考点)
(4)循环结构中的LOOP和EXIT语句(考点 在笔试和上机操作中的程序改错中经常出现)
?
LOOP语句:用于将控制直接返回给循环入口,忽略此后的循环体,重新循环,注意还在循环体内。可以理解为电路中的“短路”。
EXIT语句:是退出语句,EXIT语句将控制直接递给循环出口,即:“跳出”循环,不在循环体内。如循环体中含有EXIT语句,则当执行到EXIT语句时,无论循环结束条件是否满足,到将退出循环。可以理解为电路中“断路”。
?
(5)VFP系统函数调用语句
VFP的函数是一种预先编制好的程序代码,可供用户或程序调用。调用VFP系统函数的格式如下: 函数名([参数1[,参数2,?]])
参数1[,参数2,?]是函数接收的一个或多个参数,而最终返回一个值,因此函数调用可以出现在表达式或赋值语句中。
(6)函数和子程序(过程)调用语句(考点)
除在程序中使用VFP系统提供的函数外,用户还可以把程序中多次使用的、完成某一特定功能的一些语句单独定义成函数或子程序。定义子程序的格式是:
13
PROCEDURE 〈子程序名〉
[PARAMETERS〈形参变量1〉[,〈形参变量2〉,?]]] 〈命令序列〉
[RETURN 〈表达式〉] ENDPROC 定义函数的格式是:
FUNCTION 〈函数名〉
[PARAMETERS〈形参变量1〉[,〈形参变量2〉,?]〉] 〈命令序列〉
[RETURN 〈表达式〉] ENDFUNC 注意:
·函数和子程序除定义格式、调用方法不同外,没有本质区别。
·调用用户定义的函数的方法与调用系统函数相同,调用用户定义的子程序的格式有两种:
格式1:使用 DO 命令
DO 〈子程序名〉WITH〈实参1〉[,〈实参2〉 ?]
格式2:在名字后加一对小括号
〈子程序名〉(〈实参1〉[,〈实参2〉 ?])
如果希望函数和子程序能够接受不同的值而返回不同的结果,在函数和子程序定义中用PARAMETERS语句规定一些参数。在函数和子程序定义中规定的参数称为形式参数,形式参数可以是变量或数组元素。在调用语句中用的参数称为实在参数,实在参数将与形式参数一一对应,实现主程序向子程序传递参数的功能。传递参数有两种方法:按值传递和按地址(也称引用)传递。
按值传递:将参数的值传递给子程序,即使在用户定义的函数或子程序中修改了参数的值,主程序中的
参数原值仍保持不变。
引用传递:将参数的地址传递给子程序,因此如果在用户定义的函数或子程序中修改了参数的值,主程
序中该参数的值也跟着改变。(考点)
两者区别:按值传递将实际参数的值代入形式参数,而按引用传递则将实际参数的变量代入形式参数 注意:
·在系统默认情况下,将按值传递参数给函数,将按地址传递参数给子程序 ·在调用自定义函数或子程序之前,可以通过命令:
SET UDFPARMS TO REFERRENCE 设置按地址传递参数方式 SET UDFPARMS TO VALUE 设置按值传递参数方式
·在调用语句中,如用括号括起一个变量,则按值传递参数,而如果在变量前加@符号,则按地址
传递参数。
程序例子:
【例1】完善下列程序,以实现通过字符串变量操作竖向显示“天长地久”、横向显示“地久天长”的功能。程序清单如下:
SET TALK OFF
STORE “天长地久” TO ch CLEAR
14
南天内部资料,严谨出售
n=1
DO WHILE n<8
? (13) n=n+2 ENDDO ? (14) ??SUBSTR(ch, 1, 4) RETURN 分析:
(1)首先看有几个变量。本题有2个:ch、n (2)每个变量的类型。本题ch:字符型,n:数值型 (3)程序中结构。本题DO WHILE循环结构
(4)具体分析题意。本题循环题功能是:循环输出竖向“天长地久”,所以13空为:循环输出一个字,
即SUBSTR(ch, n,2)。??SUBSTR(ch, 1, 4)的结果为“天长”两个字,说明14空应该输出“地久”两个字,即RIGHT(ch, 4)。 (5)这里要注意细节:?和??的区别
【例2】随机产生一个要求在70~80之间的数。 X=0
DO WHILE .T. X=rand( )*100
IF X>70 AND X<80 EXIT ENDIF ENDDO ?X
【例3】求1~100之间非3的倍数的所有奇数之和。 S=0
FOR i=1 to 100 STEP 2 IF MOD(i,3)=0 LOOP ENDIF S=S+i ENDFOR 分析:
进入循环前:s=0 循环次数、变量 第一次 第二次 第三次 第四次
i 1 3 5 7 Mod(i,3) 1≠0 0 2≠0 1≠0 s s=0+1=1 不变 s=1+5=6 s=1+5+7=13 15