《程序设计初步》PPT课件.ppt_第1页
《程序设计初步》PPT课件.ppt_第2页
《程序设计初步》PPT课件.ppt_第3页
《程序设计初步》PPT课件.ppt_第4页
《程序设计初步》PPT课件.ppt_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

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

文档简介

1,程序设计初步,2,程序设计基本内容,程序文件的建立、运行和修改,顺序结构程序设计,选择结构程序设计,循环结构程序设计,数组,子程序及变量的局域性,3,程序文件,由命令组成,计算机可以自动执行 可由任何编辑软件生成(VFP本身有编辑器) 文件名:程序源文件为 .PRG 编译后的程序文件 .FXP,4,程序设计概述,进行程序设计一般要经过以下步骤: 1分析问题或任务,总结或抽象出问题的数学模型。 2根据数学模型确定解决问题的算法思想。 3根据算法思想确定要建立的数据表或数据库的基本结构及其数据表之间的关系。 4画出程序流程图。,5,程序设计概述,5编写程序,实现功能要求,并在计算机上调试通过。 6用典型数据对所编写的程序进行测试,验证程序的可靠性。发现问题进行修改,修改后再进行调试,直到程序正确运行为止。 7编写使用说明书,整理有关资料,进行总结。,6,程序文件的建立、运行和修改,一、建立程序文件,二、运行程序文件,三、修改程序文件,7,建立程序文件,一、菜单方式 1. 单击菜单文件新建或者单击常用工具栏的“新建“按钮,再单击“程序“单选按钮,最后单击“新文件“大按钮。 2. 输入程序,最后保存文件。 如:建立如下命令文件cx1.prg。,8,举例,a=2 b=5 c=a+b ? “a=“,a ? “b=“,b ? a,“+“,b,“=“,c,9,注意以下几点:,(1)一个命令语句中只能有一个命令动词; (2)每输入完一个语句按“回车“键表示该语句结束; (3)程序中用到的所有标点符号一律用半角符号; (4)每一个程序一般应有一个结束语句,以表示该程序的结束。,10,建立程序文件,二、命令方式 功能:打开一个编辑窗口,从中可以修改或创建程序文件。 语法:MODIFY COMMAND |?NOEDIT 如:MODIFY COMMAND CX2 输入程序后保存文件。,11,运行程序文件,一、菜单方式 单击!常用工具栏按钮。 单击程序执行,选择要执行的命令文件。 二、命令方式 功能:执行一个Visual FoxPro程序或过程。 语法:DO ,12,修改程序文件,一、菜单方式 单击菜单文件打开或单击常用工具栏上的“打开“按钮,启动“打开“对话框。在该对话框中选择想修改的程序文件名后单击“确定“按钮或直接双击想修改的程序文件名。 二、命令方式 使用建立命令文件同样的命令。,13,顺序结构程序设计,5 任意类型键盘输入命令INPUT,1 顺序结构程序设计的概念,2 输出命令?|?,3 输出打印命令?,4 内存变量内部赋值命令STORE|=,6 字符型键盘输入命令ACCEPT,14,顺序结构程序设计,7 程序暂停、等待接收单字符命令WAIT,8 计算表达式值命令=,9 终止程序运行命令CANCEL,10 程序注释命令,11 文本输出命令TEXTENDTEXT,12 输出文本行信息命令|,13 输入输出命令,15,顺序结构 程序设计的概念,顺序结构是一种线性结构,是程序设计中最基础的结构,该结构中各操作块按照各自出现的先后顺序,依次逐块执行。,16,2 输出命令?|?,功能:计算一批表达式的值,然后按指定格式在Visual FoxPro主窗口、用户自定义窗口或打印机输出表达式的值。 语法:?|? PICTUREFUNCTIONVATFONT,STYLE 如: ? 3*45/26 AT 2 FONT COURIER, 34 STYLE BI,17,3 输出打印命令?,功能:将输出结果直接送到打印机上。 语法:? 字符表达式,18,4 内存变量内部 赋值命令STORE|=,功能:建立内存变量,并把一个数据保存到一个或多个内存变量中。 语法: STORE TO = 如:STOR 34*56/8 TO X Y=45/3-672,19,说明:,1.内存变量的类型由的类型而定。 STORE 1.0 TO M2,M3 STORE .T. TO L1 STORE 6*2=18 TO L2 C1=“xyzabc“ L3=.F. Store 99/05/06 to D1 D2=date(),20,说明:,2. 可以给变量重新赋值,将以新值替代旧值。例: X=8 ?X X=16 ?X X=“abcd“ ? X,21,说明:,3.STORE可以给多个变量同时赋同一个值,=只能给一个变量赋值。如果给多个变量赋不同的值,必须使用多条STORE|=命令。 如:STOR 0 TO A,B,C A=0 B=0 C=0,22,说明:,4引用变量的值不会改变被引用变量的值。 如: A=5 B=A C=B ?A,B,C,23,说明:,5数值型变量可以与自身相加,字符型变量可以与自身相连接。例:,X=10 X=X+1 ?X X=X+12 ?X,C=“Good“ C=C+“ Morning!“ ?C,24,举例,例6-1:已知X=16,Y=18,编写程序,将它们的值互换后输出。程序如下:,CLEAR X=16 Y=18 T=X X=Y Y=T,?“X=“,X,“Y=“,Y CANCEL 程序运行结果: X=18 Y=16,X Y T 16 16 18 16 18 16 18 18 16 18 16 16,25,6.2 顺序结构程序设计,例6-1:已知X=16,Y=18,编写程序,将它们的值互换后输出。程序如下: CLEAR X=16 Y=18 T=X X=Y Y=T ?“X=“,X,“Y=“,Y,“T=“,T CANCEL,26,举例,例6-2:鸡兔同笼,已知鸡兔总头数为16(heads),总脚数为40(feet),编写程序求鸡兔各有多少。 解:设鸡为X只,兔为Y只,列出方程组为: X+Y=H 解得:X=(4H-F)/2 2X+4Y=F Y=(F-2H)/2 程序如下:,27,举例,H=16 F=40 X=(4*H-F)/2 Y=(F-2*H)/2 ?“共有鸡:“,x,“只“ ?“共有兔:“,y,“只“ CANCEL,结果为: 共有鸡:12 只 共有兔:4 只,28,5 任意类型键盘 输入命令INPUT,功能:建立内存变量,并且用键盘输入的方式将数值型、字符型、逻辑型或日期型数据赋值给内存变量。 语法:INPUTTO 例6-3:已知圆半径为R,计算圆面积S、球体积V,球表面积F(要求四舍五入保留三位小数)。公式分别为: S=r2 V=4/3r3 F=4r2,29,程序如下:,INPUT “请输入圆半径R=“ TO R S=ROUND(PI()*R2,3) V=ROUND(4/3*PI()*R3,3) F=ROUND(4*PI()*R2,3) ?“圆面积为:“,S ?“球体积为:“,V ?“球表面积为:“,F CANCEL,30,6 字符型键盘 输入命令ACCEPT,功能:建立内存变量,并用键盘输入的方式将字符型数据赋值给内存变量。 语法:ACCEPT TO 例6-4:假设JSDA.DBF数据表文件在A盘根目录下,编写一程序,打开数据表JSDA.DBF,运行程序时输入姓名,并将该姓名的记录内容显示出来。,31,程序如下:,SET DEFA TO A: USE JSDA ACCEPT “ 请输入姓名:“ TO NAME LOCATE ALL FOR 姓名=NAME DISPLAY Cancel,32,7 程序暂停、等待接收单字符命令WAIT,功能:显示一条提示并暂停程序运行,直到按下任一键或鼠标按键,程序才继续执行。 语法:WAIT TO WINDOWAT ,NOWAITCLEAR|NOCLEARTIMEOUT,33,举例,例6-5:用WAIT命令暂停显示。 Clear Wait to a ?a ?“1 Visual FoxPro“ WAIT “请稍候,按任意键继续“ ?“2 Visual FoxPro“ WAIT “这是查看功能“ WINDOW AT 10,10 ?“3 Visual FoxPro“ WAIT WINDOW TIMEOUT 3 CANCEL,34,8 计算表达式值命令=,语法:=, 功能:计算一个或多个表达式的值,并且不返回其值。常用于需要执行一个系统函数或用户自定义函数的功能,但不需要将该函数的返回值赋给一个内存变量、数组或数组元素的情况下。 如为了进入插入状态,可输入命令: =insmode(.t.),35,9 终止程序 运行命令CANCEL,语法:CANCEL 功能:终止程序的运行,释放所有局部内存变量,返回到“命令“窗口。,36,10 程序注释命令,一、行首注释命令NOTE|* 功能:在程序中加注释行信息。 语法:NOTE|* 注释内容 二、行尾注释命令& 功能:在命令语句的尾部加注释信息。 语法:&注释 例6-6:计算发放工资中各种大小钞票最少的程序。程序如下:(L6_6.PRG),37,NOTE 根据输入的钱数,计算各种面额 * 钞票张数最少的程序。 INPUT “请输入总钱款数量(单位:元):“ TO X & 单位为:元。 Y100=int(x/100) &求100元最少张数 X=x-100*y100 &求剩余款额 Y50=int(x/50) &求50元最少张数 X=x-50*y50 &求剩余款额 Y10=int(x/10) &求10元最少张数 X=x-10*y10 &求剩余款额 Y5=int(x/5) &求5元最少张数 X=x-5*y5 &求剩余款额 Y2=int(x/2) &求2元最少张数 X=x-2*y2 &求剩余款额 Y1=int(x) &求1元最少张数 X=x-y1 &求剩余“零头“款额,38,X=x*10 &将“零头“化为角 J5=int(x/5) &求5角最少张数 X=x-5*j5 &求剩余款额 J2=int(x/2) &求2角最少张数 X=x-2*j2 &求剩余款额 J1=int(x) &求1角最少张数 X=(x-j1)*10 &将剩余零头化为分 F5=int(x/5) &求5分最少张数 X=x-5*f5 &求剩余款额 F2=int(x/2) &求2分最少张数 X=x-2*f2 &求剩余款额 F1=int(x) &求1分最少张数 * 以下为输出部分: ?“100元票:“,y100,“张“,39,?“50元票:“,y50,“张“ ?“10元票:“,y10,“张“ ?“5元票: “,y5,“张“ ?“2元票: “,y2,“张“ ?“1元票: “,y1,“张“ wait ?“5角票: “,j5,“张“ ?“2角票: “,j2,“张“ ?“1角票: “,j1,“张“ ?“5分票: “,f5,“张“ ?“2分票: “,f2,“张“ ?“1分票: “,f1,“张“ cancel,40,11 文本输出命令TEXTENDTEXT,功能:在屏幕上显示TEXT和ENDTEXT之间的所有文本信息。 语法: TEXT 文本信息 ENDTEXT,41,举例,例6-7:利用TEXTENDTEXT语句在屏幕上输出“21世纪是信息化时代!“ clear text 21世纪是信息化时代! endtext cancel,42,12 输出文本行 信息命令|,功能:输出文本行信息。 语法: :输出信息时,输出行以回车符开头。 :输出信息时,输出行不以回车符开头。,43,举例,如输入下面两个命令: 计算机世界 计算机世界 美好的明天 执行结果为: 计算机世界 计算机世界美好的世界,44,13、输入输出格式命令,显示输出并接受输入的命令 (1) SAY GET PICTURE FUNCTION RANGE (2)READ &激活get语句,显示并可以修改 (3)CLEAR GETS &不激活get后clear gets前的语句,使其只显示不能修改.称隔断语句,45,.say.get举例,例:命令 X=“ASDFG“ 10,10 SAY “ZIFU“ GET X CLEAR GETS READ 例:打开JSDA.dbf表,显示该表每个记录的姓名,职称,基本工资字段,其中基本工资范围在2000元以内,要求以逗号格式显示且保留两位小数点,并且姓名只显示不能修改. (L7-2.prg),46,L7-2.PRG USE JSDA SCAN FOR NOT EOF() 0,0 SAY “姓名:“ GET 姓名 CLEAR GETS 0,14 SAY “职称:“ GET 职称 0,32 SAY “基本工资:“ GET 基本工资 RANGE 0,2000 PICTURE “9,999.99“ READ ENDSCAN CANCEL,47,选择结构程序设计,一、选择结构程序设计的概念,二、单条件选择命令IF,三、多分支选择命令 DO CASE,48,选择结构 程序设计的概念,程序设计中的分支,是指在程序中从某一程序块分支出两个或两个以上相对独立、彼此不同的子程序块的现象,并称这些子程序块为它的分支。,49,选择结构 程序设计的概念,一、双分支选择结构 通常也称为单条件双分支选择结构,或单条件选择结构。它仅描述具有两个分支的分支现象,是最简单的选择结构。 二、多分支选择结构 该分支机构的特点是:从多个选择结构中,选择一个条件为真的路线作为程序执行的路线。,50,单条件选择命令IF,功能:该命令用来进行各种条件判断,使程序中的命令有条件的执行。 语法: IF 命令组1 ELSE 命令组2 ENDIF,51,举例,例6-8:铁路托运行李,从甲地到乙地,按规定每张客票托运行李不超过50公斤时,每公斤0.25元,如超过50公斤,超过部分按每公斤0.45元计算。编写一个程序,把行李重量输入计算机,计算出运费,并打印出付款清单。 运费公式为: p=0.25w 当W50 p=500.25+(w-50)0.45 当W50,52,程序如下:,Input “请输入行李重量:“ TO w IF w=50 P=0.25*w Else P=50*0.25+(w-50)*0.45 Endif ?“行李重量为:“,w ?“应付运费为:“,p cancel,53,举例,例6-9:求表达式的值。 Y=x3 当X10 Y=X5 当0X10 Y=X2 当X0 根据所给公式和条件,写出程序: input “请输入X的值:“ to x,54,举例,if x10 y=x3 else if x=0 y=x5 else y=x2 endif,endif ?“X的值为:“,x ?“Y的值为:“,y cancel,55,填空练习: input “请输入X的值:“ to x if x10 y=x3 else if &1 y=x5 else &2 endif ?“X的值为:“,x ?“Y的值为:“,y cancel,求表达式的值。 Y=x3 当X10 Y=X5 当0X10 Y=X2 当X0 程序如右,请填空,56,例:已知系数a、b、c,编写程序,求一元二次方程: ax2+bx+c=0的根。 问题分析:解上述方程:得到求解方程为: 根据一元二次方程的系数a、b、c的取值, 有以下几种情况:,57,1. 当a0时,有两个根。 当判别式b2-4ac0时,有两个不同的实根; 当判别式b2-4ac=0时,有两个相同的实根; 当判别式b2-4ac0时,有一个根。 3. 当a=0,b=0时,方程无意义。 根据分析,写出程序:,58,*解方程 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),59,if delta=0 root1=re+im root2=re-im ?“两个实根为:“,root1,root2 else ?“两个虚根为:“,re,“+“,im,“i“ ?“ “,re,“-“,im,“i“ endif,60,else if b0 ?“只有一个根:“,-c/b else ?“方程无解!“ endif endif cancel,61,例:能打开任意表浏览的程序,5,10 SAY “请输入表名“ get bm default space(10) READ BM=ALLTRIM(BM) IF FILE(“&bmdbf“) Use &bm & use bm是错误的,不能直接用表名 Browse Else Wait “该文件不存在“ window endif,62,多分支选择命令 DO CASE,功能:从多个选择结构中,选择一个条件为真的路线作为程序执行的路线。,语法: DO CASE CASE 命令组1 CASE 命令组2, OTHERWISE 命令组n+1 ENDCASE,63,例:设计个人纳税计算程序。按税法规定,工资、薪金所得,使用超额累进税率。以每月收入额减去800元后的余额,为应纳税所得额。 (L6_11.PRG) 其税率表为: 级数 全月应纳税所得额 税率(%) 1 不超过500元 5 2 500-2000元 10 3 2000-5000元 15 4 5000-20000元 20,64,级数 全月应纳税所得额 税率(%) 5 20000-40000元 25 6 40000-60000元 30 7 60000-80000元 35 8 80000-100000元 40 9 100000元以上 45 分析:由于采用超额累计法计算,因此要计算出每级的纳税数额,设500元、2000元、100000元时应纳税数额为SW500、SW2000、SW100000。,65,问题分析: sw500=500*0.05 sw2000=sw500+(2000-500)*0.10 sw5000=sw2000+(5000-2000)*0.15 sw20000=sw5000+(20000-5000)*0.20 设收入-800为:23000 js=sw20000+(23000-20000)*0.25 根据分析,程序为 L6_11.PRG 框图为:,66,67,sw500=500*0.05 sw2000=sw500+(2000-500)*0.10 sw5000=sw2000+(5000-2000)*0.15 sw20000=sw5000+(20000-5000)*0.20 sw40000=sw20000+(40000-20000)*0.25 sw60000=sw40000+(60000-40000)*0.30 sw80000=sw60000+(80000-40000)*0.35 sw100000=sw80000+(100000-80000)*0.40 input “请输入本月应纳税所得额(元):“ to t do case case t=500 js=t*0.05 case t=2000 js=sw500+(t-500)*0.10 case t=5000 js=sw2000+(t-2000)*0.15 case t=20000 js=sw5000+(t-5000)*0.20 case t=40000 js=sw20000+(t-20000)*0.25 case t=60000 js=sw40000+(t-40000)*0.30 case t=80000 js=sw60000+(t-60000)*0.35 case t=100000 js=sw80000+(t-80000)*0.40 otherwise js=sw100000+(t-100000)*0.45 endcase ?“本月应纳税:“,js,“元“ cancel,程序如右,可复制运行:,68,举例,例6-12:任给一个年份,判断是否为闰年,并根据输入的月份,判断属于什么季节以及该月天数。(L_12.PRG) 问题分析:闰年的条件是能被4整除但不能被100整除,或者能被400整除。根据闰年条件可得出闰年的逻辑表达式: MOD(Y,4)=0.AND.MOD(Y,100)0.OR.MOD(Y,400)=0,69,*求闰年、季节、每月的天数 CLEAR input “请输入年份:“ to y if mod(y,4)=0.and.mod(y,100)0.or.mod(y,400)=0 rn=.t. ?y,“年是闰年。“ Else rn=.f. ?y,“年不是闰年。“ Endif Input “请输入月份(1-12):“ to m Do case Case m=3.or.m=4.or.m=5 ?m,“月是春季(“,m,“month is spring.)“ case m=6.or.m=7.or.m=8 ?m,“月是夏季(“,m,“month is summer.)“ case m=9.or.m=10.or.m=11 ?m,“月是秋季(“,m,“month is Autumn.)“ case m=12.or.m=1.or.m=2 ?m,“月是冬季(“,m,“month is winter.)“ endcase do case case m=4.or.m=6.or.m=9.or.m=11 ?m,“月有30天。“ Case m=2 If rn=.f. Days=28 Else Days=29 Endif ?m,“月有“,days,“天。“ Otherwise ?m, “月有“,31,“天。“ Endcase Cancel,程序如右,可复制运行:,70,循环结构程序设计,1 循环结构程序设计的概念,2 当型循环命令DO WHILE,3 步长型循环命令FOR,4 数据表扫描循环命令SCAN,71,循环结构 程序设计的概念,所谓循环是指在程序设计中,从某处开始有规律地反复执行某一操作块(或程序块)的现象,并称重复执行的该操作块(或程序块)为它的循环体。按循环体内是否嵌套有从属的子循环,可分为单循环结构和多循环结构;按其循环体执行方式和条件,可分为当型、直到型与步长型循环结构。,72,调试工具,工具/调试器 (跟踪窗口和监视窗口) VFP 3.0 为:调试窗口和跟踪窗口,73,当型循环命令DO WHILE,功能:当给定的条件为真时,就使DO WHILE ENDDO之间的命令重复执行,实现程序循环。 语法:DO WHILE 命令组 EXIT LOOP ENDDO,74,举例,例:用循环语句打印5个“Visual FoxPro“字符串。 X=1 Do while x=5 ?“Visual FoxPro“ x=x+1 ENDDO CANCEL,75,举例,例:有一张厚0.5毫米,面积足够大的纸,将它不断地对折。问对折多少次后,其厚度可达珠穆朗玛峰的高度(8848米)。 问题分析: 0.5,1,2,4,8,16,32,64,128,256,512,h=0.5 h=2*h=1 h=2*h=2 h=2*h=4 n=0 n=n+1=1 n=n+1=2 n=n+1=3,76,n=0 h=0.5 do while h8848000 n=n+1 h=2*h enddo ?“对折的次数:“,n ?“此时的H为:“,h cancel,77,举例,例:打开数据表JSDA.DBF,从键盘上输入某一职称(比如讲师),然后列出符合该职称的所有记录的内容,用循环来作,直到直接按回车键时结束程序。(L6_15.PRG) 外循环用来控制不同职称的输入,内循环用来控制满足条件的多条记录的输出。程序如下:,78,CLEAR USE jsda SORT ON 职称 TO jsda1 USE jsda1 DO WHILE .T. ACCEPT “请输入要查找的职称“ TO ZC IF ZC=“ EXIT ENDIF LOCATE FOR 职称=ZC DO WHILE 职称=ZC DISP OFF SKIP ENDDO ENDDO CANCEL,79,注意,1DO WHILE 命令只能在程序中使用。 2每一个DO WHILE 必须有一个ENDDO与其配对。 3在程序中应避免出现死循环。 4在命令组中可以嵌套IFENDIF、DO CASEENDCASE、DO WHILEENDDO、FORENDFOR、SCANENDSCAN结构。,80,步长型循环命令FOR,功能:根据给定的次数重复执行一组命令,实现程序循环。 语法:FOR = to step 命令组 EXIT LOOP ENDFOR|NEXT,81,举例,例:求1+2+3+99+100的值。,s=0 for x=1 to 100 s=s+x endfor ?“s=“,s cancel,X S 0 1 1=1 2 3=1+2 3 6=1+2+3 100 5050=1+100 101,82,举例(FOR语句与DO WHILE 语句),例:求1+2+3+99+100的值。,s=0 for x=1 to 100 s=s+x endfor ?“s=“,s cancel,x=1 s=0 Do while x=100 x=x+1 s=s+x enddo ?“s=“,s cancel,83,举例,例:求1+2!+3!+4!+20!,S=0 T=1 For N=1 to 20 T=T*N S=S+T Endfor ? “S=“,S CANCEL,N T S 1 0 1 1 1=1! 2 2 3=1!+2! 3 6 9=1!+2!+3! 20 20! 1!+20! 21,84,举例,例:用双重循环打印九九乘法表。(l6_18.prg) clear For a=1 to 9 For b=1 to a p=a*b ?str(a,1)+“+str(b,1)+“=“+ str(p,2)+“ “ endfor ? endfor,85,数据表扫描循环命令SCAN,功能:在当前选择的表Table/.DBF文件中移动记录指针,如果遇到符合条件的记录就执行一组命令。 语法:SCAN NOOPTIMIZE FOR|WHILE 命令组 EXITLOOP ENDSCAN,86,举例,例:将xscj数据表中电脑成绩不及格者的学号、姓名、电脑三个字段的值输出。(l6_19.prg) Close all Use xscj Clear Scan for 电脑60 ?学号,姓名,电脑 endscan Cancel,87,子程序及变量的局域性,1 子程序,2 内存变量的属性和作用域,3 调用子程序时的数据传递,4 用户定义函数,5 过程文件,88,子程序及变量的局域性,子程序 分类:子程序、函数、过程三类。 功能:多次使用的可供其他程序(主程序)使用(调用)的程序(子程序) 语法:子程序: RETURN 主程序: . DO ,89,子程序及变量的局域性,内存变量 主从内存变量:主程序定义,子程序返回的值, 主程序继续使用;子程序定义,返回清除 全局内存变量:功能:不管是主程序子程序定义,主 程序子程序都可使用、修改。 语法:PUBLIC 局部内存变量:功能:子程序中定义局部变量,隐藏 上级同名变量,解决变量同名问题. 语法:PRIVATE | LOCAL ,90,子程序及变量的局域性,调用子程序时的数据传递 主从变量:直接传递数据(主变量) 全局变量:直接传递数据 用参数传递数据: 功能:利用形参与实参的对应关系(数量, 顺序)解决变量不同名问题. DO时, (传递); RETURN时, (返回) 语法:主程序:DOWITH 子程序:PARAMETES ,91,子程序及变量的局域性,用户定义函数 独立用户定义函数:说明:独立的程序文件,任何 程序都可以以函数形式或子程序形 式调用,函数名即文件名. 语法:PARAMETES RETURN 依附用户定义函数:说明:依附在程序后面,不独 立存在. 语法:FUNCTIONRETURN ,92,子程序及变量的局域性,过程文件 功能:由多个子程序组成的程序文件,一次打开(读入),可减少调用子程序时访问磁盘的次数。 组成:由多个 PROCEDURE 子程序 . RETURN 组成 打开: SET PROCEDURE TO 调用子程序: DO ,93,子程序,能够完成一定功能的可供其它程序使用(调用)的独立程序段称为子 程序。它独立存在,但可以被多次调用,调用的程序称为主程序。 子程序结构分为:子程序、函数、过程三类。 一、子程序的建立 在程序的末尾放上RETURN语句即可。,94,子程序,二、RETURN语句 功能:终止一个程序、过程或用户定义函数的执行,返回到上一级调用序、最高级调用程序、另外一个程序或者命令窗口。 语法:return to master |to |,95,子程序举例,例:主程序 r=10 *s=0 do 程序2 ?“s=“,s cancel,例:子程序(程序2) S=ROUND(PI()*R2,2) RETURN,96,子程序举例,例:写一个求P的阶乘的子程序。 ps=1 for I=1 to p ps=ps*I endfor return 以JC.PRG为文件名保存。,97,子程序,一、子程序的调用 调用子程序的命令DO: 功能:执行一个Visual FoxPro主程序或调用一个子程序。 语法:DO | with 如:DO JC,98,子程序应用举例,例:编写计算求S=A!+B!+C!程序。,clear input “a=“ to a input “b=“ to b input “c=“ to c ps=1 p=a do jc s=ps,p=b do jc s=s+ps p=c do jc s=s+ps ?“s=“,s cancel,99,内存变量 的属性和作用域,Visual FoxPro 中内存变量按其属性可以分为主从型、全局型(public)和局部型(private)三种。,一、主从型内存变量,二、全局型内存变量,三、局部型内存变量,100,一、主从型内存变量,程序中使用的内存变量,凡未经特殊说明的均属于主从型内存变量,这些内存变量可以在本级程序及以下各级子程序中使用,其值可以在子程序中改变,返回主程序时保留改变后的值。,101,主从型内存变量举例,例:主程序 r=10 *s=0 &定义s do 程序2 ?“s=“,s &返回有效 cancel,子程序(程序2) S=ROUND(PI()*R2,2) RETURN,102,二、全局型内存变量,全局型内存变量是指在上、下各级程序中都可使用、修改的内存变量。它可以由主程序定义,也可以由子程序定义,全局变量就像在一个程序中定义的变量一样,可以任意改变和调用,当程序执行完后,其值仍然保存。 若要清除全局变量,必须用release命令。,103,定义全局变量的命令,功能:定义全局内存变量或数组。 语法: a:PUBLIC |ALL|ALL LIKE|ALL EXCEPT b:PUBLIC ARRAY(,),(), 例如:看例630,104,全局型内存变量举例,例:主程序 r=10 *PUBLIC S *s=0 do 程序2 ?“s=“,s cancel,子程序(程序2) *PUBLIC S S=ROUND(PI()*R2,2) RETURN,105,说明:,1.任何全局内存变量或者数组必须先定义,后赋值。 2.定义后尚未赋值的全局变量其值为逻辑值.f.。 3.全局变量在程序结束时不释放。 4.在子程序里,可以用PRIVATE,或者用DOWHILE传递参数的方法将全局变量暂时隐蔽起来。 6.命令窗口中建立的变量为全局型。,106,三、局部型内存变量,局部内存变量和内存变量数组只能在创建它们的过程或函数中使用和更改,不能被高层或低层程序访问。一旦包含局部内存变量和数组的过程或函数执行完毕,则释放这些局部内存变量和数组。 用 LOCAL 创建的内存变量和数组都初始化为“假“(.F.)。必须在赋值之前把内存变量或数组声明为局部。 不能缩写 LOCAL。,107,三、局部型内存变量,功能:创建局部内存变量和内存变量数组。 语法:LOCAL 或者 LOCAL ARRAY ( , ) , ( , ). 例6-31,108,三、局部型内存变量,语法:PRIVATE |ALL|ALL LIKE|ALL EXCEPT 语法中的参数含义与PUBLIC中的一样。 对PRIVATE中内存变量的修改并不影响上级程序中与之同名的内存变量的值。此命令只对本级程序及以下各级子程序有效,当返回到上级程序时,被PRIVATE隐蔽的当前程序中的内存变量自动被清除。,109,局部型内存变量举例,例:主程序(程序1) clear X=1 ?“11“,X do 程序2 ?“22“,X X=5 ?“33“,X do 程序3 ?“44“,x cancel,子程序(程序2) private x *local x x=2 ?“程序2“ x RETURN,子程序(程序3) private x x=3 ?“程序3“ ,x return,110,调用子程序时 的数据传递,一、用主从变量和全局变量实现数据传递 二、用参数实现数据传递 功能:指定子程序中的局部变量名,并由这些局部变量接收由上级程序传递来的参数,将其依次赋给中的各局部变量,也可以返送子程序运行的结果。 语法:PARAMETERS ,111,用主从变量和全局变量 实现数据传递,例:主程序(程序1) g=5 k=6 *c=0 do 程序2 ?c cancel,子程序(程序2) *public c c=g*k RETURN,112,例:用参数实现数据传递,主程序(程序1) g=5 k=6 mj=0 do 程序2 with g,k,mj ?mj cancel,子程序(程序2) parameters g1,k1,m1 m1=g1*k1 RETURN,113,说明,1.该命令必须放在子程序的首行。 2.该命令必须和D

温馨提示

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

评论

0/150

提交评论