21常量与变量.doc_第1页
21常量与变量.doc_第2页
21常量与变量.doc_第3页
21常量与变量.doc_第4页
21常量与变量.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2.1常量与变量1.数值型常量数值型还可分成浮动型(F),整数型(I)和双精度型(B).2.货币型常量占8个字节加$符.例如$4.21.存储时只保留四位小数3.字符型常量由中文,英文,数字,空格等字符组成.每个字符占一个字节,一个汉字占两个字节.字符型数据的表示方法是用半角单引号,双引号或方扩号把字符串扩起来.这里的单引号,双引号或方扩号我们称之为定界符.方扩号常用在字符串本身包含有引号的场合.注意数字也可以是字符类型,但这时候的数字已经不再表示计数,而是表示数字本身这个字符.例如”6”是个字符型数据,可以显示,可以打印,但不能用”6”X5.不包含任何字符的字符串叫空串.空格本身也算一个字符.所以空串并不等于 .例2.1 显示几个字符型常量?”计算机”,123,数据,ABX”abc”?”学习”,字符串,“ ”,表示方法其中单问号?是换行输出命令,双问好?是不换行输出命令,即输出后面表达式的结果.4.日期型常量占8个字节.前面的数值型,货币型也都是占8个字节.日期型常量有输入格式和输出格式之分.输出格式可以定制.影响日期格式的设置命令:SET MARK TO约定:代表可选项.代表必选项用于指定显示日期值时所用的分隔符,如:SET MARK TO “.”则表示以”.”来做分隔符:如果省略日期分隔符,则表示恢复系统默认的斜杠分隔符/SET DATE TO AMERICAN|GERMAN|MDY|DMY|YMD用于设置日期的显示格式.默认值为AMERICANSET CENTURY ON|OFFON表示四位年份,OFF表示两位年份.默认值是OFF例(书P50,例2.2):设置不同的日期输出格式SET CENTURY ONSET MARK TOSET DATE TO YMD?2001-08-26主窗口显示:2001/08/26SET CENTURY OFFSET MARK TO “.”SET DATE TO MDY?2001-08-26主窗口显示:08.26.015.日期时间型常量日期,时间.其中时间部分的格式为:hh:mm:ssa|p或AM|PM.默认值为12:00:00.也占8个字节.6.逻辑型常量.T.t.Y.y.F.f.N.n. 只占1个字节2.1.1 变量常量通常指一个具体的,不变的值.而变量是用于存储数据的单元,它的值能够随时改变.每个变量有一个变量名,我们通过这个变量名来访问变量的取值.变量名必须以字母,汉字和下划线开头,不能以数字开头.例如2X则不能用做变量名.VF中的变量分为字段变量和内存变量两大类.字段变量是指数据表中的各字段的名字,内存变量是指内存中的一个存储单元.注意:在VF中,内存变量的类型是可以改变的(加上”内存”两字).也就是说,可以把不同类型的数据赋给同一个变量.1.简单内存变量给简单内存变量赋值前不必事先定义.赋值命令有两个格式:=STORE TO 注释:=命令一次只能给一个变量赋值,而STORE命令可以同时给若干个变量赋予相同的值.例: X=2 * 给变量X赋值2STORE X+3 TO Y,Z * 给变量Y,Z同时赋X+3的值5在VF中,一个变量在使用之前并不需要特别声明或定义.当给变量赋值时,如果该变量并不存在,那么系统自动创建它.可以通过对内存变量重新赋值来改变其取值和类型.当出现内存变量与字段变量同名时,若简单地用变量名访问,则系统默认为字段变量.如果要访问内存变量,则必须在变量名前加上前缀M.或M-,例如M.姓名2.数组在VF中,一个数组中的各元素类型可以不同.与简单内存变量不同,数组在使用前必须用DIMENSION或DECLARE命令来声明,格式为:DIMENSION|DECLARE (下标上限1,),.其中,使用DIMENSION还是DECLAR没有任何区别.下标的下限已经规定为1.数组在创建后,未赋值前,系统自动给每个数组元素赋以逻辑值假.F.在同一个运行环境下,数组名不能与简单变量名重复.例如:DIMENSION x(5),y(2,3)定义了两个数组:x(1),x(2),x(3),x(4),x(5)y(1,1),y(1,2),y(1,3)y(2,1),y(2,2),y(2,3)又例:DIMENSION A(3)A(2)=“ABC”A(3)=100?A(1),A(2),A(3)主窗口显示结果:.F. ABC 1002.1.3内存变量常用命令(略)2.2表达式表达式是由常量,变量和函数通过运算符连接起来的式子.1.数值表达式算术运算符: *或表示乘方求余运算: 符号%或MOD( ).如15%4或MOD(15,4)意义完全一样.运算法则: 若被除数与除数同号,结果为两数相除的余数 若异号,结果为.再加上除数.运算规律:结果的符号总是与除数符号相同运算要求:除数不能为0例:? MOD(10,3), MOD(10,-3), MOD(-10,3),MOD(-10,-3) 主窗口显示结果: 1 2 2 -1 ? 3 % -9 , 3 % -9, -3 % 9 主窗口显示结果: -3 -6 62.字符表达式由字符运算符连接字符型数据而形成的表达式,其结果依然是字符型数据.其中,字符运算符有加减运算符和$运算符两种,加减运算符:都表示连接,不同的是减号要把两个字符串连接处的空格移到新的字符串的尾部。例如: “中国”+”合肥”=”中国合肥” “中国”-“合肥”=”中国合肥” “AB”+“ AB”=“AB AB” “AB”-“ AB”=“ABAB ” “$”运算符:可以理解为“是否包含在”。返回的结果为逻辑值。例如: “中国”$“中国合肥”的值为“真”,“中合”$“中国合肥”的值为“假”3.日期时间表达式可以使用的运算符也有+和-两种.但这里的+-是指+-天数.如果是日期时间型,则指加减秒数.例:2004-01-01+5=2004-01-062004-01-01-5=2003-12-272004-01-01,+5=2004-01-06,12:00:05 AM3.关系表达式用于比较两个运算对象的大小或相等关系.由关系运算符连接而成.关系运算符有,=,=,=,!=或等组成特殊比较: 日期,时间型的比较:越晚越大 逻辑型的比较:.T.大于.F. 字符串比较:系统对两个字符串的字符从左向右逐个进行比较,一旦发现两个字符不同,就根据这两个字符的大小决定两个字符串的大小.排序的次序按照书P58下面第2点所述,即在字符集中排在前面的字符小,排在后面的字符大.对汉字默认按拼音排序,但可以重新设置例如: ?ab 主屏幕显示: .F. ?”飞机”飞船” 主屏幕显示: .T.另外,要注意相等比较运算和赋值运算的区别(P59中间.第4点)例:在Visual Foxpro中,可以比较大小的数据类型包括( )(A)数值型,字符型,日期型和逻辑型 (B)数值型,字符型和日期型(C)数值型和字符型 (D)数值型4.逻辑表达式由逻辑运算符连接逻辑型数据而形成的表达式.其结果依然是逻辑型数据.逻辑运算符有与或非三种,分别用符号.AND.,.OR.,.NOT.来表示.这里的定界符可以省略,加点不加点都可以.逻辑非表示取反.如果操作数为逻辑真,结果就是逻辑假,反之亦然.例如 NOT ab的值为.T.逻辑非是单目运算符.所谓单目运算符,只指它的操作对象只有一个.逻辑与表示”并且”的含义.只有当两个操作数的值均为逻辑真时,运算结果才为逻辑真,否则为假逻辑或表示”或者”的含义.两个操作数中只要有一个为真,则运算的结果就为真.否则为假.2.3常用函数函数用函数名加一对( )来调用,自变量放在( )里,如LEN(x).函数可以分为数值函数,字符处理函数,日期类函数,数据类型转换函数和测试函数五类.2.3.1数值函数1.绝对值函数ABS( )例如: ? ABS(-34) 结果为34。2. 符号函数SIGN( ) 正数,负数和0的返回值分别为1,-1和03. 平方根函数SQRT( )例如: ? SQRT (36) 结果为6 (只取正值)4. 圆周率函数PI( ) 无自变量.返回值为圆周率的值5. 取整函数 INT( ):返回整数部分 CEILING( ):返回大于或等于指定数值表达式的最小整数 FLOOR( ):返回小于或等于指定数值表达式的最大整数例(书P62例2.14): STORE 5.8 TO x?INT(x),INT(-x),CEILING(x),CEILING(-x),FLOOR(x),FLOOR(-x)主屏幕显示: 5 -5 6 -5 5 -66. 四舍五入函数ROUND( ) 格式: ROUND(,) 其中: 指的是要求的数值,指当前数小数点移动位数.如果该值为正,向右移(,移动后新小数点位置后数字全部换0);如果该值为负数,向左移(其后全部换0)例(书P62例2.15): X=345.345?ROUND(X,2),ROUND(X,1),ROUND(X,0),ROUND(X,-1)主屏幕显示: 345.35 345.3 345 3507.求余函数MOD( )8.求最大值和最小值函数MAX( )和MIN( )9.指数函数EXP( )例如: ? EXP(5) 结果为148.41。10.对数函数LOG例如: ? LOG(EXP(1) 结果为1.00。2.3.2 字符函数1. 求字符长度函数LEN( )返回指定字符表达式的字符个数.一个汉字算两个字符.一个空格也算一个字符.例(书例2.18): x=”中文Visual Foxpro6.0” ?LEN(x)主屏幕显示: 202. 大小写转换函数UP( )和LOWER( )3. 去除左空格函数LTRIM( )例如: ? “中国”+LTRIM(“ 北京”) 结果为: 中国北京4. 去除右空格函数RTRIM( )(书上是TRIM,功能一样)例如: ?“中国”+RTRIM(“科技 ”)+“大学” 结果为: 中国科技大学5. 去除左右空格函数ALLTRIM( )例如: ?ALLTRIM(“ VISUALFOXPRO ”) 结果为: VISUALFOXPRO6. 产生空格函数SPACE( )例如: ?“数据库”+SPACE(4)+“管理系统” 结果为: 数据库 管理系统7. 左截断函数LEFT( )例如: ?LEFT(“数据库管理系统”,4) 结果为: 数据8. 右截断函数RIGHT( )例如: ?RIGHT(“数据库管理系统”,4) 结果为: 系统9. 子串函数SUBSTR( )例如: ?SUBSTR(“数据库管理系统”,5,2) 结果为: 库?SUBSTR(“数据库管理系统”,5) 结果为: 库管理系统(如果不指定长度,则一直往右取完所有数值)10. 计算子串出现次数函数OCCURS( ) 格式: OCCURS(,) 返回字符表达式1在字符表达式2中出现的次数.若没有出现则返回011. 求子串位置函数AT( )和ATC( ) 格式: AT|ATC(,n) 返回字符表达式1在字符表达式2中第n次出现的位置.n缺省为112. 子串替换函数STUFF( ) 格式:STUFF(,) 把字符表达式1中的字符用字符表达式2来替换. 如果是0,则相当于在中从处插入 如果的值是空串,则相当于在中从处删除个字符.例(书例2.24): STORE GOOD BYE! TO s1 STORE MORNING TO s2 ?STUFF(s1,6,3,s2),STUFF(s1,1,4,s2) 主屏幕显示: GOOD MORNING MORNING BYE! ?stuff(s1,2,3,), stuff(s1,2,0, ) 主屏幕显示:G BYE! G OOD BYE!13. 字符替换函数CHRTRAN( ) 格式:CHRTRAN(,) 搜索中是否含有或部分含有,如果有则将其用来替换. 例(书例2.25): s1=CHRTRAN(ABACAD,ACD,X12) Y1=CHRTRAN(计算机ABC,计算机,电脑) ?s1,y1 主屏幕显示: XBX1X2 电脑ABC14. 字符串匹配函数LIKE( ) 格式:LIKE(,) 比较两个字符串对应位置上的字符,若完全匹配则返回逻辑值真,否则返回逻辑值假.注意与其他字符处理函数的不同:函数返回值的类型是逻辑型.中可以包含通配符*和?,其中*指代任意数目的字符,?指代单个字符.例: ?like(计?机,计算机) ,like(计*机,计算机)主屏幕显示: .F. .T.有通配符的地方可填入任意字符.例(书例2.26): STORE “abc” TO x STORE “abcd” TO y ?LIKE(“ab*”,x),LIKE(“ab*”,y),LIKE(x,y),LIKE(?b?,x),LIKE(Abc,x)主屏幕显示: .T. .T. .F. .T. .F.2.3.3日期和时间函数1.系统日期和时间函数DATE( ),TIME( )和DATETIME( )2.年月日函数YEAR( ),MONTH( )和DAY( )3.时分秒函数HOUR( ),MINUTE( )和SECOND( )2.3.4数据类型转换函数1.数值转字符STR( ) 格式: STR(,) 转换时根据需要自动进行四舍五入. 小数点本身算1位 如果指定的大于本身的长度,则字符串前面补加相应数量的空格 如果指定的大于等于整数部分的长度但小于的总长度,则优先满足整数部分的转换 如果指定的小于整数部分的长度,则返回一串*号. 如缺省,默认值为10;如缺省,默认值为0例(书例2.30): STORE -123.456 TO n ?n=+STR(n,8,3)主屏幕显示: n=-123.456 ?STR(n,9,2),STR(n,6,2),STR(n,3),STR(n,6),STR(n)主屏幕显示: -123.46 -123.5 * -123 -1232.字符转数值VAL( )如果字符串中有字母,则只取字符表达式中第一个字母前的数字;如果第一个字母前没有数字,则其结果为0.00。转换结果显示两位小数(四舍五入)。例如: 将字符串转换为数值:? VAL(“13”) 结果为13.00?VAL(“B13”) 结果为0.00?VAL(“13B”) 结果为13.00?VAL(“12.456”) 结果为12.46 (四舍五入)又例(书例2.31): STORE -123. TO xSTORE 45 TO ySTORE A45 TO z?VAL(x+y),VAL(x+z),VAL(z+y)主屏幕显示: -123.45 -123.00 0.003.字符转日期CTOD( )和CTOT( )4.日期转字符DTOC( )和TTOC( )后面有个可选项,1.如果加上,1,表示结果字符总是按照YYYYMMDD的形式,日期时间型则转换成YYYYMMDDHHMMSS的形式5.宏替换函数& 格式: &.替换出字符型变量的内容.替换时要除去定界符.如果该函数与其后的字符无明确分界,则要用”.”作函数结束标识.例(书例2.34) STORE “学生” TO DB USE &DB XM=”姓名” ?XM,&XM主屏幕显示: 姓名 李新2.3.5测试函数在VF程序运行过程中,有时用户需要了解操作对象的状态,例如,想看看要使用的文件是否存在,数据库的当前记录号,文件是否到了文件尾,检索是否成功等等信息.这时就要利用测试函数1.值域测试函数BETWEEN( )格式: BETWEEN(,)测试表达式T的值是否在表达式L和表达式H的值之间.如是则返回逻辑值真,否则返回逻辑值假.例外:如果表达式L和表达式H中有一个是空值NULL,则返回的函数值也是NULL例(书例2.35): STORE .NULL. TO x STORE 100 TO y ?BETWEEN(150,y,y+100),BETWEEN(90,x,y)主屏幕显示: .T. .NULL.2.空值测试函数ISNULL( )判断一个表达式的运算结果是否为NULL值.若是则返回逻辑值真,否则返回逻辑值假.NULL值又称空值常量,用一对点括起来.它指的是在数据处理过程中还没有定义或输入值的数据.给数据表中的某个字段输入NULL值的方法是按下CTRL+0,而不能用空着不输入或手敲.NULL.的方法!NULL不能参与比较运算,它使所有的比较失败.也就是说,两个NULL值彼此并不相等.NULL虽然不能参与比较运算,但却可以参与逻辑运算,结果如下表:逻辑表达式 表达式运算结果X=.T.X=.F.X=.NULL.X AND ,NULL.NULL.F.NULL.X OR .NULL.T.NULL.NULL.X NOT .NULL.F.T.NULL.3.”空”值测试函数EMPTY( )注意这里的”空”值与上面的空值的不同:空值: .NULL. 固定不变“空”值: 满足下表的数据才叫”空”值数据类型值字符空字符串,或只有空格、回车符等。数值0货币0浮点0整数0双精度0日期空日期,比如 empty(ctod()就返回 .T.。日期时间空日期时间,比如 empty(ctot()。逻辑假(.F.)备注空,即没有内容。通用型空,即没有 OLE 对象。图形空,没有图形。因此,EMPTY(.NULL.)返回值为.F.又如,以前我们检测一个字符变量是否为空往往是用如下两种方法:if trim(bl)= &即将空格消除后精确地等于空字符串。或者if len(trim(bl)=0 &即将空格消除后其长度为0。现在就不需要这么麻烦了,只需要:if empty(bl)即可。4.数据类型测试函数VARTYPE( )格式:VARTYPE(,)测试的类型,返回一个大写字母,函数值为字符型.字母的含义如书P69表2.7所示.特例: 当的运算结果是NULL值时,如果为.T.,就返回的类型;如果为.F.或缺省,则返回X(NULL型). 当是一个数组,则返回第一个数组元素的类型(思考:数组刚刚创建,还未被赋值以前,若使用VARTYPE( )则返回什么结果?)例(书例2.37): X=123 STORE 10 TO y STORE .NULL. TO x STORE $100.2 TO z ?VARTYPE(x),VARTYPE(x,.T.),VARTYPE(y),VARTYPE(z)主屏幕显示: X C N Y如果把第一句换成x=123,则输出结果为: X N N Y5.表尾测试函数EOF( )系统对数据表中的记录是逐条进行处理的,对于一个打开的表文件来说,在某一时刻只能处理一条记录.VF为每一个打开的表设置了一个内部使用的记录指针,指向正在被操作的记录,该记录称为当前记录.表文件的逻辑结构如书上P69图2.2所示 文件起始标识BOF 第1条记录,首记录,TOP 第2条记录 第i条记录 最后1条记录,尾记录,BOTTOM 文件结束标识EOF刚打开一个表文件时,记录指针总是指在第1条记录上.先补充介绍一下操作表和表记录的一些相关命令: 打开数据表: USE 关闭当前使用的数据表: USE 记录指针的定位命令:将记录指针指向某一个记录,使之成为当前记录。在表的“浏览”窗口中,当前记录前有一个黑三角标志。利用下述定位记录命令与函数,可以了解当前记录指针的位置。(1) 记录定位命令GO/GOTO其功能是将记录指针移到指定位置。GOTO命令和GO命令是等价的,也可以省略GOTO或GO命令而直接写出记录号。例如:GOTO 5;6;GO 7等都是合法的定位命令。另外,可以用TOP和BOTTOM来指代第1条记录和最后1条记录.如:GO TOP,即将记录指针定位在表的第1个记录上。(2) 记录移位命令SKIP确定了当前记录位置之后,可以用SKIP命令向前或向后移动若干条记录位置。其格式为SKIP nRecords。其中,nRecords可以是正或负的整数。缺省时为1。如果是正数则向后移动,如果是负数则向前移动。回到书上表尾测试函数EOF( ):测试指定表中的记录指针是否已经到了文件尾(注意:不是最后一条记录).若是则返回逻辑值真,否则返回逻辑值假.6.表头测试函数BOF( )测试当前的记录指针是否停在文件头(注意文件头与第一条记录的区别).若是则返回逻辑值真,否则返回逻辑值假.以上表头和表尾测试函数还有两个特例:如果打开的是空文件,则表头和表尾测试函数都返回逻辑值真.T.如果被测试的文件不存在,以上两种测试都返回逻辑值假.F.。例: 设表XSDA中已经存在10个记录。 USE Xsda ?BOF( ) * 结果是.F. SKIP 1 ?BOF( ) * 结果是.T. GOTO 4?BOF( ) * 结果是.F.USEUSE Xsda?EOF( ) * 结果是.F.GOTO BOTTOM * 移动指针到表的最底端?EOF( ) * 结果是.F.SKIP?EOF( ) * 结果是.T.7.记录号测试函数RECNO( ) 返回当前记录的记录号.如果当前记录在EOF处,函数返回当前表中的记录总数+1如果当前记录在BOF处,函数返回第1条记录的记录号.例如: 假定学生信息表中共有12条记录。测试记录指针当前位置。USE 学生信息GO BOTTOM?RECNO() * 结果是12SKIP?RECNO() * 结果是13GO TOP ?RECNO() * 结果是1SKIP -1?RECNO() * 结果是18.记录个数测试函数RECCOUNT( )返回当前表中的记录个数.如果指定工作区中没有打开表文件,则返回0.另外,这里的记录个数是指表文件中存在的记录个数,不管记录是否被逻辑删除过或是否被过滤过,都会把它们计算在内.9.条件测试函数IIF( )格式: IIF(,)测试的值,若为逻辑值真.T.,则返回的值,否则返回的值.和可以是不同类型.例(书例2.39): X=100 Y=300 ?IIF(X100,X-50,X+50),IIF(Y100,Y-50,Y+50)主屏幕显示: 150 25010.记录删除测试函数DELETED( )VF提供了非常丰富的标准函数,书中仅介绍了一些常用的函数.以后在编程中有可能还会碰到一些新的函数,查阅使用手册或帮助文档.2.4 程序与程序文件VF的操作方式有两种:交互式方式和程序提交方式.所谓交互式方式是指在命令窗口中逐条输入命令或通过选择菜单来执行相关操作.注意,如果是用复制粘贴的方式,则命令必须一条一条地粘入,而不能选择”命令块”.程序提交方式则不同,它把所有要执行的操作命令放在一个文本文件中,由程序自动地一次性批量执行.程序方式还有以下特点: 可以利用编辑器方便地输入,修改和保存程序(编辑器可以是任何文本编辑软件,如记事本等) 程序文件一旦建立,就可以被多次运行,而且一个程序在运行过程中还可以调用另一个程序. 在程序中可以出现在命令窗口中无法使用的命令和语句(例如流程控制语句IFELSE等.例(书例2.40)编写程序,计算圆的周长和面积CLEAR &清除主窗口*设置半径R=3*依此计算周长和面积P=2*PI()*rA=PI()*r2*输出计算结果?”周长=”,p?”面积=”,sRETURN带*号或&号后面的语句是注释部分,不是程序的真正代码.2.4.2 程序文件的建立与执行1.程序文件的建立有三种方法:”文件”新建”程序”在命令窗口输入命令MODIFY COMMAND 说明: 如不在系统默认目录下,需要写全路径 执行该命令后,系统首先检索该,如果指定文件已经存在,系统认为是修改文件,打开修改程序窗口;否则系统认为是建立文件,打开建立程序窗口.用文字编辑器建立程序文件,保存时将扩展名指定为.prg即可2.程序文件的修改对应建立,也有三种方法:”文件”打开”程序”在命令窗口输入命令MODIFY COMMAND 用文字编辑器修改程序文件,保存时将扩展名指定为.prg即可3.程序文件的执行两种常用方式:菜单方式:”程序”运行”在文件列表框(如项目管理器等)中选择要运行的程序文件,然后单击”运行”按钮命令方式:DO 该命令既可在命令窗口中输入,也可在程序中出现(即调用另一个程序)VF程序文件经过编译,连编,可以生成不同的目标代码文件,这些文件具有不同的扩展名.当用DO命令执行程序文件时,如果没有指定扩展名,系统将按以下顺序来寻找该程序文件:.exe.app.fxp.prg2.4.3简单的输入/输出命令1.INPUT命令格式: INPUT TO 程序执行到该命令时会暂停,等待用户从键盘输入数据.以回车键结束输入后,系统会将输入的内容送往中.输入的数据可以是常量,变量和任意类型的数据,但不能不输入任何内容而直接按回车.例: INPUT 请输入姓名: TO xm输入: 张三 系统报错:找不到变量名.输入: “张三”然后再执行命令 ?xm系统输出: 张三因此说,输入的格式有严格要求,必须符合相应的数据类型.2.ACCEPT命令格式: ACCEPT TO 与INPUT不同的是,该命令只接受字符型数据.因此,不需要再象上例那样为字符加上定界符.否则,系统会把定界符也作为字符串本身的一部分.另外,它允许不输入任何内容直接按回车.此时系统会把空串赋给指定的内存变量.3.WAIT命令2.5程序的基本结构2.5.1选择结构IFENDIF或IFELSEENDIF例2.41编写程序:先从键盘接收两个数x和y,然后判断x能否被3整除,如果能被3整除那么y的值增加x;否则y值不变CLEARINPUT “X=” TO xINPUT “Y=” TO yIF x/3=INT(x/3)Y=y+xENDIF?”Y=”,yRETURN例2.42根据输入的考试成绩,显示相应的成绩等级:CLEARINPUT “输入考试成绩:” TO chjDj=IIF(chj=90,”优秀”,”通过”)?”成绩等级:”+djRETURN编写程序,用IF型选择结构实现该命令序列CLEARINPUT “输入考试成绩:” TO chjIF chj60 dj=”不合格”ELSE IF chj90 dj=”通过” ELSE Dj=”优秀” ENDIFENDIF?”成绩等级:”+djRETURN DO CASEENDCASE或DO CASEOTHERWISEENDCASE注意:不管有几个CASE条件成立,只有最先成立的那个CASE条件的对应命令序列被执行.参考下例例2.43用DO CASE结构实现例2.42CLEARINPUT “输入考试成绩:” TO chjDO CASECASE chj60 Dj=”不合格”CASE chj90 Dj=”通过”OTHERWISE Dj=”优秀”ENDCASE?”成绩等级:”+djRETURN2.5.2循环结构DO WHILEENDDO格式:DO WHILE ENDDO执行该语句时,先判断是否是逻辑真,如果是则执行循环体,当执行到ENDDO后返回到DO WHILE,再次判断是否为真.直到为假时结束该循环,执行ENDDO后面的语句.如果第一次判断时就为逻辑假,则该循环体一次也不执行.例2.44计算s=1+2+100思路归纳为两点:1.设置两个变量s和i.s用来保存累加的结果,初值为0,i用来做循环累加的数据.2.重复执行命令s=s+i和i=i+1,直到i的值超过100.每一次执行,s的值增加i,i的值增加1CLEARs=0i=1DO WHILE i=100s=s+ii=i+1ENDDO?”s=”,sRETURN在循环体内还可以出现两条特殊的命令语句:LOOP(回去)和EXIT(出去).LOOP表示返回到循环体首部,EXIT表示跳出循环体.FORENDFOR该语句通常用于循环次数已知情况下的循环结构.格式: FOR = TO STEP ENDFOR说明: 步长默认值为1 EXIT和LOOP同样可以出现在循环体内.当执行到LOOP时就返回到循环体的第一步,并将循环变量+1;若执行到EXIT则跳出循环体.例2.46找出100999之间所有的”水仙花数”CLEARFOR i=100 TO 999a=INT(i/100)b=INT(i-100*a)/10)c=i-INT(i/10)*10IF i=a3+b3+c3 ?iENDIFENDFORRETURNSCANENDSCAN该语句一般用于处理表中记录,语句可指明需处理记录的范围及应满足的条件.格式:SCAN FOR WHILE ENDSCAN执行该语句时,记录指针自动,依此地在当前表的指定范围内满足条件的记录上移动,对每一条记录执行循环体内的命令.其中,的默认值为ALL例:编写程序输出”学生基本信息.DBF”中所有女学生的姓名,性别,学号和入学成绩USE 学生基本信息SCAN FOR 性别=女DISPLAY 姓名,性别,学号,入学成绩,专业ENDSCANUSERETURN2.6多模块程序设计模块是一个相对独立的程序段,它可以被其他模块所调用,也可以去调用其他模块.我们把被其他模块调用的模块称为子程序.调用其他模块的模块称为主程序.2.6.1模块的定义和调用1.模块及其定义VF中的模块可以是命令文件,也可以是过程.命令文件前面已经介绍过,现介绍过程的定义.过程定义的格式是:PROCEDURE|FUNCTION RETURN 表达式ENDPROC|ENDFUNC说明: 过程的头. 过程的尾.如缺省,则过程结束与下一条过程头语句或文件结尾.一般应写上过程尾. 过程返回.当执行到RETURN命令时,返回到调用程序或命令窗口,并返回表达式的值.如果缺省RETURN命令,则在过程结束处自动执行一条隐含的RETURN命令.若RETURN命令不带表达式,则返回逻辑真.T.2.模块的调用有两种格式:格式1: DO 格式2: ( )要调用过程文件中的过程,首先要打开过程文件.打开过程文件的命令格式为:SET PROCEDURE TO 过程文件名表ADDITIVE可以同时打开多个过程文件,放在过程文件名表中.一旦一个过程文件被打开,那么该过程中的所有过程都可以调用.如果选用ADDITIVE,则表示在打开过程文件时并不关闭原先已经打开的过程文件(追加方式)过程不再需要被调用时要及时关闭过程文件.命令格式为:SET PROCEDURE TO例2.48 有三个文件:f1.prg(包含一个过程p1) f2.prg f3.prg(包含两个过程p2和p3)*主程序:f1.prg?主程序开始SET PROCEDURE TO f3f2( )DO p1?主程序结束*过程p1PROCEDURE p1?过程p1开始?调用p3( )?返回值:,p3( )?过程p1结束ENDPROC*子程序:f2.prg?子程序f2开始?调用p2( )X=p2( )?返回值为:,x?子程序f2结束RETURN*过程文件: f3.prgPROCEDURE p2RETURNPROCEDURE p3RETURN 100运行的结果为:主程序开始子程序f2开始调用p2( )返回值为.T.子程序f2结束过程p1开始调用p3( )返回值:100过程p1结束主程序结束2.6.2参数传递形参:定义过程或函数时的形式参数实参:调用过程或函数时的具体参数例:定义正弦函数SIN(X),这里的X是形式参数.一旦调用此函数,例如SIN(90)或SIN(X/2+6)时,这里的90和X/2+6就叫实参前面讲过调用过程的两种格式.那么调用带参数的过程时也对应着这两种格式,只要在各自后面加上参数表就可以了:DO WITH (实参表)此时,实参和形参的值存在一个参数传递的问题.参数传递分两类:按值传递:形参变量值改变时不会影响到实参变量的取值引用传递: 形参变量值改变时,实参变量的值随之改变.在进行函数调用时,如果采用DOWITH形式进行调用,对于实参变量采用引用传递。如果采用模块名( )的形式进行调用,对于实参采用传递按值传递。我们可以使用命令SET UDFPARMS重新设置参数的传递方式。该命令的格式是:SET UDFPARMS TO VALUE|REFERENCEVALUE表示按值传递, REFERENCE表示引用传递。但此命令仅对模块名( )的调用形式有效,对于DO-WITH调用形式,不受SET UDFPARMS命令的影响。需要注意的是,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论