
本节内容简介
VFP程序设计或数据库操作中经常要进行数据的运算。本节介绍VFP的算术、字符、日期、关系及逻辑运算符,各种运算符的优先级。利用常量、变量、函数通过运算符组成的各种表达式的运算。
学习目标:
1、学会各种运算符的意义、运算规则
2、掌握运算符的优先级顺序
3、理解判断表达式的合法性及运算结果
4、会将一般的数学表达式转换成VFP表达式
学习重点与难点:
1、运算符的优先级
2、表达式的运算
运算符及优先级
VFP提供了 五类运算符,在运算符两边参加运算的对象,必须有相同的类型。各种运算符都有不同的优先级,与普通的数学一样,可以通过“( )”来改变优先级顺序。
(1)数值运算符:
| 运算符 | 含义 | 实例 | 优先级 |
| **或^ | 乘方 | 2**3=8 | |
| *或/ | 乘或除 | 2*4=8 | |
| % | 取余 | 10 % 3=1 | |
| +或- | 加或减 | 6-5=1 |
举例:?14/7+3^2-abs(-5) && 显示6.00
?(4-3)*(12/exp(2)) && 显示1.6240
?15%4+1 && 显示4
(2)字符运算符
字符运算符有如下3种:
+ : 字符串完全连接。将两个字符串首尾相接连成一个新字符串。
- : 字符串不完全连接。将运算符前的字符串尾部空格移到运算符后的字符串尾部,再连成一 个新的字符串。
$ : 字符串包含运算。若运算符前的字符串包含在运算符后的字符串中,运算结果为逻辑真;否则,运算结果为逻辑假。(注意其运算结果为逻辑值,而不是字符串)
$运算的优先级在字符运算中最高,+运算与-运算同级。
(3)关系运算符
关系表达式用于对同类型的数据进行比较,其运算结果为逻辑值。
| 运算符 | 含义 | 实例 |
| < | 小于 | 3<4=.f. |
| > | 大于等于 | "BA">"A"=.t. |
| = | 等于 | "ABC"="AB"=.T. |
| <>或#或= | 不等于 | "上海"<>"上饶"=.T. |
| <= | 小于等于 | 3<=3=.T. |
| >= | 大于等于 | "BA">="A"=.t. |
| == | 精确等于 | "ABC"=="AB"=.F. |
==与=两种运算符在用于字符串比较时是有区别的,==要求参与比较的两个字符串必须完全相同,才返回.T.,否则返回.F.;而=则不然,它以右边的字符串为基准,从第一个字符起进行比较,只要左边前几个字符与比较符右边的字符串相同,就返回.T.。所以,=通常称为模糊比较;而==称为精确比较。
(4)逻辑运算符
逻辑运算通常与关系运算相结合,以构成复杂的条件运算。逻辑运算符有3种,按优先级别从高到低排列如下:
.NOT.或! 非运算(对.NOT. 后的逻辑值进行取反)
.AND. 与运算(仅当运算符两边的值全为逻辑真时,运算结果才为真)
.OR. 或运算(仅当运算符两边的值全为逻辑假时,运算结果才为假)
各种逻辑运算的规则如下表所示:
| A | B | .NOT. A | A .AND. B | A .OR. B |
| .F. | .F. | .T. | .F. | .F. |
| .F. | .T. | .T. | .F. | .T. |
| .T. | .F. | .F. | .F. | .T. |
| .T. | .T. | .F. | .T. | .T. |
优先级别从高到低依次为:算术运算符(或字符运算符)、关系运算符、逻辑运算符。
(5)日期和时间运算符
日期和时间运算符只有两种:
+:一个日期类数据加上一个数值常量,其结果仍为日期
-:两个日期类数据相减(结果为数值)或日期类数据减去数值常量(结果仍为日期)
表达式
表达式是变量、操作符、常量、函数、字段名、控件以及属性的组合,求值结果为单个值。可以使用表达式对属性进行设置,为查询设置条件或定义计算结果字段。按 表达式的类型:
数值表达式:由算术操作符和数值型数据构成的表达式,其运算结果仍为数值型。
举例: ?14/7+3^2-abs(-5) && 显示6.00
?(4-3)*(12/exp(2)) && 显示1.6240
?15%4+1 && 显示4
字符表达式:由字符操作符和字符型数据构成的表达式,其运算结果一般为字符型,但$运算为逻辑值。
举例: ? 'Good ' + ' morning' && 显示 Good morning
? 'Good ' - ' morning' + ' Teacher' && 显示Good morning Teacher
? 'father' $ 'grandfather' && 显示.T.
? 'fer' $ 'grandfather' && 显示.F.
关系表达式:由关系运算符与相同类型的数据构成的表达式,其运算结果为逻辑型,比较成立返回.T.,否则返回.F.。
举例:nJsjcj=80
?nJsjcj>=60 && 显示.T.
?{01/01/92}>{01/01/95} && 显示.F
?"opening"=="open" && 显示.F.
?"opening"="open" && 显示.T.
逻辑表达式:由逻辑操作符和逻辑型数据构成的表达式,其运算结果为逻辑型。
举例:?.NOT. (50>20) && 显示.F.
?(10>20) .AND. (3+1>2) && 显示.F.
XSXB="女"
JSJCJ=80
?XSXB="男" .OR. JSJCJ>60 && 显示.T.
日期表达式:由日期操作符和日期、时间型数据构成的表达式。
举例:SET STRICTDATE TO 0 && 关闭严格日期格式
dDate1={01/10/99}
?dDate1+4 && 显示01/14/99
?dDate1-10 && 显示12/31/98
?dDate1-dDate2 && 显示9
说明:Visual FoxPro将一个无效日期视为空日期。
本节总结
数据库操作与程序设计都不能离开数据的运算。VFP中可以进行各种类型的运算如数值运算、字符运算、日期时间运算、关系运算以及逻辑运算等等。每一类运算都有对应的运算符,不同的运算符有不同的运算规则。与数算类似,VFP的运算符也有优先级顺序。
数据运算是依靠表达式来实现的,VFP有数值表达式、字符表达式、关系表达式、日期与时间表达式和逻辑表达式。不同的表达式有不同的运算结果,不同类型的表达式通过关系运算与逻辑运算可以构成复杂的运算。
本节练习
| 第一题 在Visual FoxPro中,下面4个关于日期或日期时间的表达式中,错误的是_____。 | |
| A.{^2002.09.01 11:10:10:AM}-{^2001.09.01 11:10:10AM} | B.{^01/01/2002}+20 |
| C.{^2002.02.01}+{^2001.02.01} | D.{^2002/02/01}-{^2001/02/01} |
| 第二题 表达式 'abc>bc'的值是__________。 | |
| A..NULL. | B.0 |
| C. .f. | D..t. |
| 第三题 表达式{06/18/99}-{06/15/99} 的值是__________。 | |
| A.3 | B.4 |
| C.0 | D.不能计算 |
| 第四题 算术、关系、逻辑运算的优先顺序为_____。 | |
| A.关系、算术、逻辑 | B.算术、关系、逻辑 |
| C.逻辑、关系、算术 | D.算术、逻辑、关系 |
| 第五题 表达式25%5的值是__________。 | |
| A.5 | B.0 |
| C.出错 | D.125 |
| 第六题 设XB为某表中的字符型字段,其宽度为2,则与XB="男".OR.XB="女"等价的表达式为__________。 | |
| A.XB$"男女" | B.IN(XB, "男女") |
| C.AT(XB,"男女") | D.ATC(XB,"男女") |
| 第七题 在.NOT.(SQR(B)>A+B .AND. B-A = 4) 表达式中,最后运算的是_____。 | |
| A.SQR | B.+ |
| C.AND | D.NOT |
| 第七题 已知n="1",m="2",x12="good则表达式x&n&m的值为__________。 | |
| A.X12 | B.12 |
| C.good | D.good12 |
| 1B 2C 3A 4B 5B 6A 7D 8C | |
