Visual FoxPro程序设计实践教程(第3版)
上QQ阅读APP看书,第一时间看更新

实验三 常用函数

【实验目的】

熟练掌握Visual FoxPro常用函数的功能和使用方法。

【实验内容】

1.首先执行以下语句对数组元素赋值,然后验证下列函数的值。

Dimension a(5)

a(1)=123.45

a(2)={^2014-10-1}

a(3)= '中国湖南长沙'

a(4)= 'abcba' (字符串的前面无空格,最后有一空格)


数值函数

?INT(a(1)), INT(-a(1))

?CEILING(a(1)), CEILING(-a(1))

?FLOOR(a(1)), FLOOR(-a(1))

?ROUND(a(1),1), ROUND(a(1),-1)

?MOD(INT(a(1)),4), MOD(INT(a(1)),-4)


字符函数

?LEFT(a(3),4), RIGHT(a(3),4), SUBSTR(a(3),5,4), SUBSTR(a(3),9)

?LEN(REPLICATE(a(4),2)), LEN(TRIM(REPLICATE(a(4),2)))

?AT(UPPER('aBc'),a(4)), AT(LOWER('aBc'),a(4)), OCCURS('a',a(4))

?LIKE('a*',a(4)), LIKE('a?',a(4)), LIKE(a(4),'a*')

?STUFF(a(3),5,4,'HUNAN'), CHRTRAN(a(4),'a','d')

?ASC(SPACE(1)), CHR(ASC('A')+10)


日期时间函数

?YEAR(a(2)), MONTH(a(2)), DAY(a(2)), CDOW(a(2))

?HOUR(DATETIME()), MINUTE(DATETIME()),SEC(DATETIME())


数据类型转换函数

?STR(a(1),5,1), STR(a(1),4,1), STR(a(1),5), STR(a(1),2)

?VAL(STR(a(1))+a(3))

?DTOC(a(2)), DTOC(a(2),1), CTOD('05/01/14')


测试函数

?BETWEEN(a(1),100,200), BETWEEN(a(2),{^2014-1-1},{^2014-12-31})

?ISNULL(a(5)), EMPTY(a(5))

?VARTYPE(a(1)), VARTYPE(a(2)), VARTYPE(a(3)), VARTYPE(a(5))

?IIF(a(1)>100, '通过', '未通过')

2.运用函数,写出下列表达式。

(1)圆周率的平方根,结果保留一位小数。

(2)判断a(2)是否属于2014年下半年(要求用两种不同的方法)。

(3)判断a(3)的第一个字符是否为字符’中’(要求用四种不同的方法)。

(4)用一个字符串表示系统的日期和时间,格式为2014年3月17日Monday 20时30分15秒(要求用两种不同的方法)。

【实验步骤】

1.启动VFP,在命令窗口首先依次执行定义数组和对数组元素赋值的语句。

再输入?命令和表达式查看表达式的值,结合函数的定义思考为什么会得到该结果。

2.在命令窗口中,输入?命令和通过函数的嵌套使用而形成的表达式。

提示:第(2)题可分别使用BETWEEN和YEAR MONTH函数,第(3)题可分别使用LEFT、AT、LIKE函数,第(4)题可分别使用DTOC和YEAR、MONTH等函数。

【答案解析】

1.首先执行以下语句对数组元素赋值,然后验证下列函数的值。

Dimension a(5)

a(1)=123.45

a(2)={^2014-10-1}

a(3)='中国湖南长沙'

a(4)= 'abcba' (字符串的前面无空格,最后有一空格)


数值函数

?INT(a(1)), INT(-a(1)) &&取整数部分函数 123,-123

?CEILING(a(1)), CEILING(-a(1)) &&取大于参数的最小整数函数 124,-123

?FLOOR(a(1)), FLOOR(-a(1)) &&取小于参数的最大整数函数 123,-124

?ROUND(a(1),1), ROUND(a(1),-1) &&四舍五入函数 123.5,120

?MOD(INT(a(1)),4), MOD(INT(a(1)),-4) &&取余数函数 3,-1


字符函数

?LEFT(a(3),4), RIGHT(a(3),4), SUBSTR(a(3),5,4), SUBSTR(a(3),9)

&&中国,长沙,湖南,长沙

&&左子串函数LEFT 右子串函数RIGHT 指定位置截取子串函数SUBSTR

?LEN(REPLICATE(a(4),2)), LEN(TRIM(REPLICATE(a(4),2)))

&&12, 11

&&字符串长度函数LEN,重复字符串函数REPLICATE,去掉尾部空格函数TRIM

?AT(UPPER('aBc'),a(4)), AT(LOWER('aBc'),a(4)), OCCURS('a',a(4))

&&0, 1, 2

&&UPPER转大写字母函数,LOWER转小写字母函数,AT求子串的起始位置函数

&&OCCURS求子串出现次数函数

?LIKE('a*',a(4)), LIKE('a?',a(4)), LIKE(a(4),'a*')

&&.T. .F. .F. ,LIKE字符串匹配函数

?STUFF(a(3),5,4,'HUNAN'), CHRTRAN(a(4),'a','d')

&&中国HUNAN长沙, dbcbd

&&STUFF字符串替换函数,CHRTRAN字符替换函数

?ASC(SPACE(1)), CHR(ASC('A')+10)

&&83, K

&&SPACE生成空格函数,ASC求ASCII码函数,CHR求码值对应字符函数


日期时间函数

?YEAR(a(2)), MONTH(a(2)), DAY(a(2)), CDOW(a(2))

&&2014,10,1, Wednesday

&&YEAR求年号函数 MONTH 求月份函数DAY求日号函数 CDOW求星期几函数

?HOUR(DATETIME()), MINUTE(DATETIME()),SEC(DATETIME())

&&DATETIME求系统的日期时间,HOUR返回小时,MINUTE返回分钟,SEC返回秒


数据类型转换函数

?STR(a(1),5,1), STR(a(1),4,1), STR(a(1),5), STR(a(1),2)

&&123.5, 123, 123, **,STR数值型转字符型函数

?VAL(STR(a(1))+a(3))

&&123.0 VAL字符型转数值型函数

?DTOC(a(2))), ?DTOC(a(2),1), CTOD('05/01/14')

&&10/01/2014, 20141001, 05/01/14

&&DTOC日期型转字符型函数,CTOD字符型转日期型函数


测试函数

?BETWEEN(a(1),100,200), BETWEEN(a(2),{^2014-1-1},{^2014-12-31})

&&.T. .T. BETWEEN判断第一个参数是否在后两个参数之间

?ISNULL(a(5)), EMPTY(a(5))

&&.T. .F. ISNULL判断是否NULL值函数,EMPTY判断是否空值函数

?VARTYPE(a(1)), VARTYPE(a(2)), VARTYPE(a(3)), VARTYPE(a(5))

&& N, D, C, L VARTYPE 判断数据类型函数

?IIF(a(1)>100, '通过', '未通过')

&&通过 IIF若第一个参数是真,返回第二个表达式的值,否则返回第三个参数的值

2.运用函数,写出下列表达式。

(1)圆周率的平方根,结果保留一位小数。

&&ROUND(SQRT(PI()),1)

(2)判断a(2)是否属于2014年下半年。

&&BETWEEN(A(2),{^2014-7-1},{^2014-12-31})

&&YEAR( A(2))=2014 ANDMONTH( A(2))>=1 AND MONTH( A(2))<=6

(3)判断a(3)的第一个字符是否为字符'中'。

&&LEFT(A(3),2)='中'

&&SUBSTR(A(3),1,2)='中'

&& AT('中',A(3))=1

&& LIKE(A(3),'中*')=.T.

(4)用一个字符串表示系统的日期和时间,格式为2014年3月17日Monday 20时30分15秒。

&& STR(YEAR(DATE()),4)+'年'+ STR(MONTH(DATE()),2)+'月'+ STR(DAY(DATE()),2)+'日'+LEFT(TIME(),2)+'时'+SUBSTR(TIME(),4,2)+'分' +RIGHT(TIME(),2)+'秒'

&& LEFT(TTOC(DATETIME(),1),4)+'年'+SUBSTR(TTOC(DATETIME(),1),5,2)+'月'+ SUBSTR(TTOC(DATETIME(),1),7,2)+'日'+SUBSTR(TTOC(DATETIME(),1),9,2)+'时'+SUBSTR(TTOC (DATE TIME(),1),11,2)+'分'+ RIGHT(TTOC(DATETIME(),1),2)+ '秒'

【实验作业】

1.变量a,b,c为一元二次方程ax2+bx+c=0的系数,使用函数求解方程的两个根x1和x2,并对其保留两位小数(设置a=3,b=12,c=6)。

2.变量xm表示姓名,变量sfzh表示身份证号。其中身份证号的1~6位表示该身份证所对应的行政区划的代码,7~14位表示其出生年月日,第17位(最后一位)表示性别,奇数为男性,偶数为女。使用函数写出下列表达式(设置xm='张明',sfzh='430105196801151042')。

(1)行政区划的代码。

(2)年龄。

(3)出生的日期(日期数据类型)。

(4)若其为男性,显示姓氏和先生(如张先生),否则显示姓氏和小姐。

(5)返回一个字符串,将身份证号码中的出生日期部分用8个*号替换。

(6)身份证号码的长度。

(7)身份证号码中字符0出现的次数,字符0出现的起始位置。