程序设计基础知识.doc_第1页
程序设计基础知识.doc_第2页
程序设计基础知识.doc_第3页
程序设计基础知识.doc_第4页
程序设计基础知识.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

2008年重庆市普通高校“专升本”大学计算机复习资料程序设计基础知识摘要:拿到一个问题后,首先拟定并写出算法,画出结构流程图,然后再根据算法书写程序,是一个良好的习惯.这样做不仅可提高所写程序的正确性,也容易修改程序,提高整个程序设计.关键词:设计,算法类别:专题技术来源:牛档搜索(Niudown.COM)本文系牛档搜索(Niudown.COM)根据用户的指令自动搜索的结果,文中内涉及到的资料均来自互联网,用于学习交流经验,作品其著作权归原作者所有。不代表牛档搜索(Niudown.COM)赞成本文的内容或立场,牛档搜索(Niudown.COM)不对其付相应的法律责任!29重庆专升本网 内部资料程序设计基础知识 程序是为了完成一项任务而编写的指令的集合,在某种程度上VFP中的程序设计同传统的程序设计有很大的不同。在VFP中可以同时应用面向过程和面向对象两种编程方法,面向对象的程序设计是其主要特色。一般来说,对于制作简单、较小的应用程序,使用过程编程方式比较容易,同时这也是面向对象编程方式的基础。本章主要介绍的是面向过程的编程方法。4.1 程序设计概念4.1.1程序设计与算法简介 程序设计从某种意义上来说, 是根据算法步骤把命令、函数、变量、常量、表达式等以逻辑的方式组合成程序文件或系统。确定算法和编写程序是两个重要步骤。 算法是指为解决一个问题而采取的方法和步骤,或者说解决步骤的精确描述。算法分为数值运算算法和非数值运算算法。数值运算算法的目的是计算数值解,如求方程的根,求函数的定积分等。非数值运算算法,包括的范围很广,常见的办公室自动化系统、管理领域、商业领域及医学应用等等,主要是描述其解决应用问题的逻辑步骤。描述实现算法的逻辑步骤,一般采用流程图方式,流程图分传统流程图;N-S流程图等。传统流程图是用一些图框,流程线以及文字说明来描述操作过程,这样的表示算法,直观,形象,容易理解。如图4.1和图4.2:.“起止框”用来表示算法的开始和结束。 “处理框”用来表示一般的数据处理。“输入/出框”表示输入,输出操作。“流程线”表示流程的方向(执行方向)。“连接点”用于将画在不同地方的线连接起来。 “判断框”用来根据给定条件是否满足,决定执行两条路径中的某一路径。图4.1拿到一个问题后,首先拟定并写出算法,画出结构流程图,然后再根据算法书写程序,是一个良好的习惯。这样做不仅可提高所写程序的正确性,也容易修改程序,提高整个程序设计的效率4.1.2源程序实例 例:显示”student.dbf”表中“总成绩 “小于360的所有学生的学号,姓名,总成绩. 分析问题:逐一判断每条记录的总成绩字段的值是否大于360,如果大于就显示,否则不显示.根据分析结果画出结构流程图,如:图4.2,然后写出源程序如下: SET TALK OFFCLEAROPEN DATABASE STUDENTSUSE STUDENT1DO WHILE !EOF()初始化打开数据库和表是否表末尾总成绩360显示,移记录指针移记录指针结束 IF 总成绩=360 ? 学号,姓名,总成绩 SKIP ELSE YSKIP ENDIF NENDDOCLOSE DATABASENYNRETURN NY4.1.3 程序的创建、编辑和运行 VFP6.0 源程序文件的扩展名是.PRG, 程序运行时,系统自动编译产生扩展名为.FXP 的文件, 其文件主名与.PRG为扩展名的文件主名相同, 在VFP下若修改了.PRG 为扩展名的文件,系统也会自动重新编译.4131程序文件的创建图4.2创建VFP6.0 源程序文件,可使用任何文本编辑器建立;本系统中使用自身编辑器创建,编辑源程序文件。VFP提供了以下三种方法。图4-3编辑文件窗口图4-2新建 文件方法一 可以在VFP主窗口的 “文件“ 菜单中选择“新建“或工具栏中的“新建” 按钮,选择“程序“ 如图 4-2所示。然后单击“新建文件”,这时系统将打开一个编辑窗口,可以往里输入程序,如图4-3所示。 源程序输完后, 利用文件菜单进行保存。 也可立即利用 【程序】【运行】菜单和【程序】【编译】菜单,进行编译和运行程序。程序执行结果显示在主窗口中。 方法二 在命令窗口中执行命令: MODIFY COMMAND 这时,系统将打开一个如图4-3的编辑窗口,可以往里输入程序代码。编辑完毕,使用CTRL+W键,则存盘退出。方法三 在“项目管理器”中选择“代码”选项卡中的程序选项,选择“新建”命令。系统将打开编辑窗口,可以创建一个程序,如图4-4所示。图4-4在项目管理器中建立程序 4132 程序的保存 程序输入完毕后,可以选择“文件”菜单中的“保存”项保存程序文件。 图4-5 关闭没有保存的程序时将出现询问若用户要关闭一个没有保存的程序,则会弹出相应的对话框,提示用户是保存还是放弃已作的修改,如图4-5所示。若用户保存了一个由“项目管理器”创建的程序,则该程序被加入项目中。若用户保存了一个尚未命名的程序,则会打开“另存为。”对话框,用户应该从中选择或输入正确的盘符、路径、文件名。程序保存后,用户可以在其后任一时刻运行或修改程序。4133程序的修改程序的修改即对源程序文件打开进行编辑。有以下方法:方法一 若程序包含在某一个项目中,则可以在“项目管理器“中选定它,并选择“修改”方法二 在“文件”菜单中选择“打开”命令,这时将出现一个包含文件列表的“文件类型”对话框。从中选择“程序”,然后找到要编辑修改的程序,选定后单击“确定”按钮,如图4-6所示。 图4-6 在打开文件窗口中选定要修改的程序方法三 在“命令”窗口中键入如下命令: MODIFY COMMAND 然后将出现程序文件编辑窗口,如图 4-3 所示。接下来可对显示在编辑窗口中的程序进行修改。4134 程序的运行 程序创建或修改完毕,最终需要运行。运行程序有如下几种方法。方法一 在“程序”菜单中选择“运行”菜单项,然后选择一个程序文件,如图4-6方法二 在命令窗口中运行命令:DO 方法三 若程序包含在一个项目中,则可以在“项目管理器”中选定它并选择“运行”命 令,如图4-4 所示。42常用命令和语句 VFP的一个特点,是大量使用系统环境设置命令以及其他一些控制命令,以帮助用户进行数据处理、安全管理、程序调试、结果输出等方面的工作。本节主要介绍一些常用的命令和语句。421基本输入、输出语句 程序最基本的操作就是输入、输出。输入是从键盘或鼠标等设备中接收数据。输出是指将计算机所做的运算结果输出到屏幕或打印机。4211输入命令 1)字符型键盘输入命令 ACCEPT 格式:ACCEPT TO 功能: 建立内存变量,并用键盘输入的方式将字符型数据赋值给内存变量。说明:表示需输入内容的提示信息,是命令执行时显示的内容。一般为字符型常量,字符型变量或字符型表达式。 表示存储字符数据的字符变量或数组元素。 输入的数据作为字符型数据处理,不需要定界符括起来。若使用定界符,则定界符成为输入字符的一部分。输入回车健则按空字符处理。 例11-2输入班级编号和姓名,并打印出来。ACCEPT “请输入班级编号:”TO numberACCEPT “请输入姓名:”TO name?“班级编号:”,number,“姓名:”,name2)任意类型键盘输入命令INPUT格式:INPUT TO 功能: 建立内存变量,并用键盘输入的方式将数值型,字符型,逻辑型或日期型数据赋值给内存变量。 说明:是命令执行时显示的提示内容。可是一个字符型表达式。 可为数组元素。内存变量不必事先定义。 从键盘输入的数据可以是命令允许的四种类型表达式。执行该命令时计算键盘输入的表达式的值,将其赋给内存变量。 字符型常量必须有定界符,且不能单用回车输入。3)程序暂停,等待接收单字符命令WAIT 格式:WAIT TO WINDOW AT TIMEOUT 功能: 显示提示并暂停程序运行,直到按下任意一键或鼠标按键程序才继续执行。 说明: 表示要显示提示的内容,省略提示,系统给出“按任意键继续。”。 TO表示键盘的输入以字符形式存入指定的内存变量。内存变量类型为字符型,宽度为1。 WINDOW表示在Visual FoxPro主窗口右上角出现的系统消息窗口的位置中显示消息。WAIT WINDOW 支持多行消息。 AT指Visual FoxPro主窗口中消息窗口的位置。 NOWAIT表示在消息被显示后不移去消息窗口,立即继续执行程序。省略时,程序暂停直到按下一个键或鼠标按钮,并将消息窗口从主窗口中移走。4212 格式输出命令格式: SAY PICTUREFUNCTION功能:在指定坐标位置按格式输出表达式的值。例11-5 在程序编辑窗口输入如下内容 *ex1.PRG Vb1=49562.89 Vb2=-0.5 3,10 SAY Vb1 FUNCTION”B” 5,10 SAY Vb1 FUNCTION”C” 7,10 SAY Vb2 FUNCTION”X”运行ex1.PRG 结果显示49562.8949562.89CR _0.5DB4213 格式输入命令格式:SAYGET FUNCTIONPICTURE RANGE,VALID READSAVE 功能:在指定行、列首先显示,接着按规定的格式反显GET后变量的值;当执行命令READ时,子命令GET被激活,其变量值处于编辑状态。一个READ语句可以激活多个在它前面的GET子命令。说明: 命令中的功能符和模式符代码及其含义如下表11-1和表11-2 命令的执行过程是,系统先在指定的行列显示SAY后的提示信息,在提示信息后显示GET变量的值,此前GET 后的变量必须赋值,且变量值反显,当顺序执行READ语句后,反显的变量值被激活,此时,可编辑变量的值,按回车键可结束此过程。 一个READ命令可激活多个GET的编辑区,因此,只要GET 语句是在READ 语句前,当第一个GET 激活变量值编辑后光标可自动跳到下一个 编辑区,依次执行。 RANGE中数值表达式1和2,表示数据编辑和显示的下限和上限。 VALID表示数据编辑和显示的条件范围。 表4-1 PICTURE模式符代码表代码含义 代码 含义 A 只允许字母 L 只允许逻辑型数据N 只允许字母或数字 X 允许任何字符Y 只允许逻辑数据且小写换大写 G 只允许数字允许数字,空格和正负号 ! 小写转换成大写¥数值前显示货币符号 指定小数点位置,分隔多位数 * 数值前显示星号 表4-2 FUNCTION功能符代码表代码含义 代码含义A 只允许字符字母 B数值数据在显示区左对齐C 在正数之后显示CR表示贷款 D 使用当前的SetDate日期格式E 使用欧洲日期格式Dd/mm/yy L 数值显示时显示前导,而不是空格 X 在负数后面显示DB表示借贷 T 去掉表达式首尾空格S(n) 限制字符显示的宽度为n个字符Z 数值为时刻用空格显示C 将负数括在括号内 !将小写字母转化成大写字母用科学计数法显示 ¥用Set CURRENCY指定货币格式显示 例4-6 指定坐标位置的格式输出例1。*exp.prgva1=47612.78va2=-0.64,10 say va1 function “B”8,10 say va1 function “c”10,10 say va2 function “x”将以上程序存盘,并运行。 结果显示: 47612.78 47612.78CR -0.6DB例4-7 格式输出例2。*exp.prgvbr1=space(20)vbr2=0vbr3=date()var4=.F.clear4,15 say “编辑字符:” get vbr1 function “s14!”5,15 say “编辑数字:” get vbr2 picture “999999.99”RANGE 1000,400006,15 say “编辑日期:” get vbr3 VLALID vbr3ctod(“99/12/31”) 7,15 say “编辑逻辑:” get vbr4 picture “Y”read执行上述程序时,依次输入数据:“World Wide Web Virtual Hospital”,8888.88,98/09/01,和y。其中Vbr1可以接收20个字符,显示前14个。屏幕显示为:编辑字符:WORID WIDE WEB编辑数字:8888.88编辑日期:98-09-01编辑逻辑:y 422注释语句和续行语句42. 2. 1注释语句顾名思义,注释语句用来给程序加注释,以提高程序的可读性。有以下两种注释语句1) 注释行格式 * 或 NOTE 2) 行末注释格式 & 例:* 这是一个示例程序* 1999.9.9SET STATU ON & 显示状态栏 NAME=“张三”* ACCEPT “姓名:” TO NAME ?NAME CANCEL4222 续行标志 VFP 允许一个语句行最多可又254 个字符长,这一长度足以满足绝大多数语句格式的要求,但是,为了使程序便于阅读,往往需要将一行程序分作几行来写。将一行分作几行来写时,要使用续行标志“;”,表示本语句尚未结束。例如: REPLACE 应发工资 WITH 基本工资*1.15+职务津贴+奖金; 扣款 WITH 房租水电+医药费+应发工资*所得税率; 是发工资 WITH 应发工资-扣款4223 指定缺省驱动器和目录 由于数据库应用通常包括大量的文件,为了应用程序的顺利进行,应当将这些文件集中在一个专属目录中。然后将此专属目录指定为缺省驱动器和目录,这样既可大大地方便程序开发工作,又能保证应用程序的顺利进行。将一专属目录指定为缺省驱动器和目录,有两种方式:(1) 在程序或命令窗口中使用SET DEFAULT 命令,命令格式为SET DEFAULT TO 例如:指定C:mysystemgzl 为缺省 目录;SET DEFAULT TO C:MYSYSTEMGZL若执行不带路径的 SET DEFAULT 命令,则恢复系统缺省设置。(2) 修改系统缺省设置。在缺省系统配置文件 CONFIG.FPW或专属系统配置文件(如:MYCONFIG.FPW)中,假如下面一行:DEFAULT=C:MYSYSTEMGZL4.2 控制结构 VFP的程序结构,与其他高级语言一样,分为三种控制结构,即顺序结构、分支结构和循环结构,各个结构可以实现不同的功能。图4-7语句系列2语句系列1431顺序结构顺序结构是程序结构设计中最常用,最简单,最基础的基本结构。该结构的特点表明语句排列的顺序就是命令的执行顺序, 其间既没有分支跳转、也没有重复。如图4-7。组成顺序结构的语句,一般包括赋值语句、输入、输出、注释和终止语句以及有关系统环境设置等。432选择结构 选择结构:选择结构是程序设计中的基本结构之一。它用选择命令描述分支现象,确定程序执行的路径。常用的选择命令有单条件选择和多条件选择。如图4-8Y命令组1N命令组2条件1、IF条件选择命令 格式:IF 条件表达式THEN 命令组1 ELSE 命令组2 ENDIF功能:若的值为真,执行;否则(即的值为假)执行;无论哪种情况,命令组系列执行完后,就执行ENDIF下的第一个命令。如图4-8所示.说明: 可为关系或逻辑表达式,其逻辑值为T或F;当ELSE-命令组2不存在时,的值为真,执行后,就转到执行ENDIF之后的第一个命令;若的值为假,则不执行IF与ENDIF之间的命令系列,而直接转到执行ENDIF之后的第一个命令。 IFENDIF结构命令必须配对使用;并且可以通过多层嵌套以实现多条件的选择。例11-9 铁路拖运行李,从甲地到乙地,按规定每张客票拖运行李不超过50公斤时,每公斤0.25元,如超过50公斤,超过部分按每公斤0.45元计算。编程,把行李重量输入计算机,计算出运费,并打印付款清单。问题分析:设行李重量W公斤,应付运费P元,则运费公式为: 0.25*W 当W50 P= 50*0.25+(W-50)*0.45 当W50编写程序为: INPUT“请输入行李重量:”TO W IF W=50 P=0.25*W ELSE P=50*0.25+(W-50)*0.45 ENDIF ?“应付运输费为:”,P,“元” CANCEL2、IF嵌套条件选择结构在IF条件选择结构中,允许包含新的选择结构,一层套一层形成嵌套结构。注意:形成嵌套结构中,只允许嵌套,不允许交叉,层次必须分明。 例 11-10 已知系数a,b,c编写程序,求一元二次方程ax2+bx+c=0的根。 例题分析:当a0时,有两个根; 当0 时,有两个不同的实根; 当=0 时,有两个相同的实根; 当0 时,有两个不同的根; 当a=0,b0时,有一个根; 当a=0,b=0 时,方程无意 根据以上分析,写出程序: INPUT “a=” TO a INPUT “b=” TO b INPUT “c=” TO c IF a0 delta=b2-4*a*c re=-b/(2*a) im=SQRT(ABS(delta)/(2*a) IF delta=0 root1=re+im root1=re-im ? “两个根为:“,root1,root2 ELSE ? “两个根为:“,re,”+”,im,”I”, re,”-”,im,”I” ENDIF ELSE IF b0 ? “只有一个根:”,-c/b ELSE ? “方程退化” ENDIF ENDIF CANCEL3、DO CASE多条件选择命令格式:DO CASE CASE CASE 命令组 CASE OTHERWISE ENDCASE图4-9多条件分支语句 语句组n语句组1语句组2条件2语句组3条件3Otherwise 条件1功能:执行时,系统将依次检查每一个条件表达式的值,当找到有一个条件为真时,则执行该条件下的命令系列,接着再执行ENDCASE后面的语句,当前面几个条件表达式值均为假时,若有OTHERWISE就执行语句序列n+1。否则就直接执行ENDCASE后面的语句。如图4-9所示:说明: 在DO CASE与第一个CASE之间不能有任何命令,并且在一个DO CASE结构中,最多只能执行一个CASE语句。 可以为关系表达式或逻辑表达式,根据其逻辑值进行判断,若为.T.,就执行该命令组,直到遇到下一个CASE或OTHERWISE就转向ENDCASE后面的第一条命令。 如果没有一个为.T.,就执行OTHERWISE后面的命令组,转到ENDCASE之后的语句。如果没有OTHERWISE,则不作任何操作就转向ENDCASE之后的第一条命令。 DO CASE与ENDCASE必须正确配对;并且本命令结构只能在程序中使用,且DO CASE,CASE,OTHERWISE,ENDCASE必须各占一行,。 例11-11 设计一个按不同幼儿年龄服药的程序,年龄变量为AGE,每次服药次数COUNT,每次服药量MOUNT。程序为: MEDICINE=阿司匹林 INPUT输入年龄:TO AGE DO CASE CASE AGE5 COUNTS=4次/天 MOUNT=每次1片 CASE AGE10 COUNTS=4次/天 MOUNT=每次2片 OTHERWISE COUNTS=3次/天 MOUNT=每次2片 ENDCASE ?MEDICINE+服法是+COUNTS+ +MOUNT RETURNDO CASE 命令表示程序的多分支结构,与IF命令一样允许多重嵌套,既可以多个DO CASE-ENDCASE一层层嵌套,也可以DO CASE-ENDCAS与IF-ENDIF嵌套。例11-12 对students库中3个表student.dbf scure1.dbf 和symbolic.dbf 用CASE命令实现在不同的条件下显示不同的文件记录。 SET TALK OFF ACCEPT “输入表文件名:” TO NAME OPEN OPENDATABASE STUDENTS DO CASE CASE NAME=”student” USE student DISPLY ALL FOR 专业= “临床医学” CASE NAME=”scure1” USE scure1 AVERGE 生物 TO t1 FOR SUBSTR(学号,7,1)=”4” AVERGE 生物 TO t2 FOR SUBSTR(学号,7,1)”4” ? “T1=”,t1,”T2=”,t2 CASE NAME=”symbolic” USE symbolic LIST FOR “96” $ 学号 ENDCASE use &NAME WAIT LIST CLOSE DATABASE RETURN433循环结构程序设计图4-10循环结构流程图NYexitloop语句组条件循环结构是程序设计的一种基本结构。描述循环现象的命令主要为实现某一段程序有规律的反复执行。VFP中给出三种循环结构命令,“当型”,“步长型”和“表扫描型”。VFP中各循环结构的基本流程是一样的 ,如图4-10所示。1、当循环命令DO WHILEENDDO格式:DO WHILE EXIT LOOP ENDDO功能:当的计算值为真时,就使DO WHILEENDDO之间 的命令序列重复执行,以实现循环;当条件表达式的值为假时,退出循环执行ENDDO后的命令。说明: 循环结构的DO WHILE为循环起始语句,ENDDO为循环终端语句,在DO WHILE与ENDDO之间的语句称循环体。 的值是逻辑值。执行时,系统先检测逻辑值的真、假而确定是否执行循环体。ENDDO命令是将循环返回到循环的起始语句。执行过程如图4-10所示。强制退出循环命令EXIT,表示执行该命令后从控制从DO WHILEENDDO循环中跳出,而去执行ENDDO后的命令。LOOP执行该命令后,将控制直接转回到DO WHILE子句,而不执行LOOP和ENDDO之间的命令,LOOP称为无条件循环命令,并且只能在循环结构中使用。一般情况下,在循环体中出现LOOP或EXIT命令时就会有IF条件选择命令的配合使用。do while .enddo 必须成对出现,并且do while .enddo 可进行嵌套,形成多重循环。例11-13 有一张厚0.5毫米,面积足够大的纸,将它不断对折。问对折多少次后,其厚度可达珠穆郎玛峰的高度(8848米)。 问题分析: 每次对折都是上次厚度的2倍,然后用此厚度与珠穆郎玛峰的高度作比较,每次循环作一次计数,以便统计对折的次数。N=0H=0.5DO WHILE H 88488000 N=N+1 H=2*HENDDO?“对折次数为:”,HCANCEL例11-14 在数据库STUDENTS.DBC的表Student.DBF 中找出所有男性的学生。 SET TALK OFF OPEN DATABASE STUDENTS USE STUDENT DO WHILE .T. IF 性别 男 SKIP Else DISPLAY SKIP ENDIF IF EOF( ) EXIT ENDIF ENDDO CLOSE DATABASE RETURN 当循环结构的嵌套。循环结构嵌套是在一个循环体内又完整的包含另一个循环,当循环可以嵌套形成多重循环,但要求每层循环DO WHILEENDDO 必须成对出现,不能交叉。如: DO WHILE DO WHILE内 ENDDO 外 DO WHILE 内 ENDDOENDDO例11-15 打印九九乘法表。 程序(EXP.PRG)如下:Set talk offClearA=1B=1Do while A=9 Do while B=9 T=A*B? TB=B+1ENDDOA=A+1?Enddo Cancel 以上双循环执行过程是:当第一次进入外循环DO WHILE A=9ENDDO时,内循环DO WHILE B=9ENDDO 中的循环体需执行9次,输出1,2,9。当第十次执行DO WHILE B=9时,由于B=9为假时,需跳到执行A=A+1和?命令。当第二次进入DO WHILE A=9ENDDO的循环体时,内循环又执行9次输出为2,4,18。当第十次执行内循环DO WHILE B=9时,B=9为假,跳出内循环,这样重复下去外循环循环9次,内循环共循环81次,直到输出T的值为81。然后整个程序结束。2、步长型循环(或计数循环)FORENDFOR格式 FOR = TO STEP EXITLOOPENDFOR(或NEXT)功能:执行时,系统首先给循环变量赋初值,然后判断循环变量的值是否超过终值(即循环终值),若超过则跳出循环,执行ENDFOR后面的命令,否则重复依次执行循环体命令组序列及语句。说明: FOR循环起始语句,ENDFOR为循环终端语句,在FORENDFOR之间的语句序列为循环体。 循环变量的初值,终值和步长确定循环次数。INT(终值-初值)/ 步长)+1为循环次数。 步长值可为正值和负值,步长缺省时,系统默认步长值为1。 EXIT和LOOP命令的用法与DO WHILE循环结构中的使用相同。 FORENDFOR循环可嵌套使用。例11-17 求1!+2!+3!+N!的值 S=O T=1 INPUT “请输入N的值:“ TO N FOR X=1 TO N T=T*X S=S+T ENDFOR ? “S=”;S CANCEL例11-18 设计一个保密口令程序,要求用户使用某个系统时,必须回答口令,该程序口令为“49712”才能允许进入系统,但最多只允许输入三次,否则,退 FoxPro系统。程序如下:SET TALK OFFFOR I=1 TO 3CLEAR 10,10 SAY “请输入口令:“ SET CONSOLE OFF ACCEPT TO k1 SET CONSOLE ON IF k1=“49712” WAIT“欢迎使用本系统!”TIMEOUT 10 EXIT ELSE WAIT“口令错,请按任意键后重新输入!” ENDIF ENDFOR IF I3 WAIT “对不起,你不能使用本系统!“TIMEOUT 10 QUIT ENDIFRETURN3、循环结构SCAN_ENDSCAN对数据表和记录的处理,用DO WHILEENDDO和FORENDFOR循环命令编程时,需要编写记录指针的移动和控制移动的多条命令。由于,这两条命令用于操作数据记录的编程不够理想,效率不高。VFP提供了SCANENDSCAN命令,使用该命令编写处理记录的程序时,不仅形式简练,而且程序执行速度和效率都能得到提高。格式:SCANNOOPTIMIZE SCOPEFORWHILE命令组LOOPEXITENDSCAN功能:对当前数据表中符合指定条件的数据记录按照命令组序列进行处理(SCAN表示循环开始,并按指定条件移动记录指针;ENDSCAN表示一次循环结束,使循环返回。)说明: NOOPTIMIZE参数禁止扫描Rushmore优化。若VFP使用Rushmore技术来优化数据处理。刚技术可以提高其性能。 SCOPE参数指定扫描范围,只有在范围内的记录才能扫描,扫描范围为ALL、NEXT、RECORD N和REST,缺省为ALL FOR exp1是一个过滤条件,它能够过滤掉不扫描的记录。WHILE exp2指定条件表达式,只要其值为真,命令就执行。 LOOP使控制直接返回到,放在SCAN和ENDSCAN之间任意位置,EXIT使控制转向ENDSCAN 后的第一条命令。用法与在Do While 循环结构中使用一样。 例4-19 输出临床医学,学制五年的全体学生的学号,姓名,专业,学制.SET TALK OFFCLEAROPEN DATABASE STUDENTS USE STUDENT CLEAR SCAN FOR 专业= “临床医学”.AND. 学制= 五 ? 学号,姓名,专业,学制 ENDSCANCLOSE DATABASESCANCEL44数组及其应用 数组是VFP中处理数据而采用的一种重要内存变量表达形式。当处理大批量数据时,若使用简单变量就不胜其烦,而使用数组就显得相当方便,简洁。数组是将一组排列有序的,个数有限的变量作为一个整体,用一个统一的名字来表示,这些有序变量的全体称为数组。如S(1),S(2),S(50)等称为数组S,构成数组的成员为数组元素,也称下标变量,如S(15),S为数组名,用园括号括起来的15为下标(即序号),S(15)是一个数组元素或数组变量。数组使用时具有以下特点: 一个数组下标变量的作用域和类型与一个简单内存变量一样,并且都可存放一个数据,都可被赋值和引用。 数组变量的类型取决最初一次被赋值的类型。VFP中,不同类型的数据可同时存在于同一数组中。 数组在内存中以一片连续区域存储,每个数组元素可通过下标来访问;数组元素的下标可以是变量,常量,表达式,如a(4),a(I),a(I+4),且下标必须是整数值。44. 1 数组的创建 VFP支持一维数组和二维数组,编程中可用命令DIMENSION,DECLARE,PUBLIC和LOCAL建立变量数组(或称声明数组变量),本书只对前两条命令建立数组作较详细介绍。建立数组命令DIMENSION和DECLARE格式:DIMENSION (,下标2),(,下标2)DICLARE (,下标2),(,下标2)功能:两条命令都是建立一维或二维内存变量数组。说明: 数组名最长达254字符,包含字母,数字及下划线。若只选择数值表达式1,则定义数组的一维。次数组为一维数组。若既选择数值表达式1,有选择数值表达式2,则数组的二维下标(或行下标,列下标)数组为二维数组。 数组中的表达式为非整数要取整,下标计算的下界为1,不能为负数或0。 数组的维数确定此数组能表示的数组元素个数,元素的个数为:一维数组一般为下标的最大数(上界),二维数组为行下标与列下标上界的乘积。如DIMENSION myarray12,5即表示拥有12*5=60个元素。又如,DECELARE myarry1(5)表示拥有5个数组元素。 在VFP中,每个数组最多可拥有65000个元素。内存是多的情况,最多可建立65000个数组。如DIMENSION a1(7),ab1(12,3),xy(9) 二维数组中的存储单元按行的次序顺序排列,因此二维数组也可当作为一维数组去存取。44. 2 数组变量的赋值和引用用命令定义数组后,数组元素的值一般为逻辑值F,只有在用赋值命令Store、=或SCATTER命令,对数组元素赋值后,数据的类型确定数组中各元素的类型,因此同一数组中各数组元素可采用不同的数据类型。举例: DIMENSION xx(2,3)DISPLAY MENMORY LIKE xx 显示:Xx PUB A (1,1) L F (1,2) L F (1,3) L F (2,1) L F (2,2) L F (2,3) L F显示表明,数组定义后,没有赋值前,数组元素中的值都是逻辑值F。用Store或=赋值后,各数组单元内容发生了变化,如应用以下命令,可得到:举例:Store”AA”Toxx(1,2) Store 5 TO xx(6) Xx(1)=t Xx(2,2)=”HELLO” DISPLAY MENMORY LIKE xx 显示: Xx PUB A (1,1) L T (1,2) C “AA” (1,3) L F (2,1) L F (2,2) C “HELLO” (2,3) N 5(5.0000000)举例: DIMENSON YY(5) Store O TO yy DISPLAY MENMORY显示: Yy PUB A ( 1) N O ( 2) N O ( 3) N O ( 4) N O ( 5) N O此例说明给数组变量赋值时,不指明数组的下标,表明该数组的所有元素赋同一值。一维数组和二维数组都可重新定义维数,即一维数组可重新定义成二维数组,二维数组可重新定义为一维数组。443 数组与数据表之间的数据传递:数组和表之间的数据传递VFP提供多种方法,但SCATTER和GATHER命令使用较为灵活。以下予以介绍。 将数据表中的数据传递给数组的命令格式:SCATTER FIELDS TO 功能:将当前表文件中当前记录指定的值顺序的传递给数组中各数组元素。 在传递时,从第一字段开始依次向数组中相应次序的元素传递,该元素的类型由响应字段类型决定。如数组元素的个数比字段个数少,则SCATTER 命令先删除该数组,再重建立一个同名的数组,其元素个数正好等于字段的个数。 将数组中的数据传递给数据表的命令格式:GATHER FROMFIELDS功能:将数组中的数据顺序传递给当前表文件当前记录中指定的字段,注意,数组与表文件各字段的类型必须一致。备注字段不受本命令的影响,当遇到备注字段时就越过它处理下一个字段。例:将STUDENT.DBF 的首记录复制到最末尾。 CLEAR MEMORY DIME ARRAY(10) USE STUDENT SCATTER TO ARRAY LIST MEMORY GOTO BOTTOM APPEND BLANK GATHER FROM ARR

温馨提示

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

评论

0/150

提交评论