
实验三 常用函数
【实验目的】
熟练掌握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出现的起始位置。