程序设计初步(精)_第1页
程序设计初步(精)_第2页
程序设计初步(精)_第3页
程序设计初步(精)_第4页
程序设计初步(精)_第5页
已阅读5页,还剩121页未读 继续免费阅读

下载本文档

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

文档简介

程序设计初步1程序设计基本内容程序文件的建立、运行和修改依次结构程序设计选择结构程序设计循环结构程序设计数组子程序及变量的局域性2程序文件由吩咐组成,计算机可以自动执行可由任何编辑软件生成(VFP本身有编辑器)文件名:程序源文件为.PRG

编译后的程序文件.FXP3程序设计概述进行程序设计一般要经过以下步骤:1.分析问题或任务,总结或抽象出问题的数学模型。2.依据数学模型确定解决问题的算法思想。3.依据算法思想确定要建立的数据表或数据库的基本结构及其数据表之间的关系。4.画出程序流程图。4程序设计概述5.编写程序,实现功能要求,并在计算机上调试通过。6.用典型数据对所编写的程序进行测试,验证程序的牢靠性。发觉问题进行修改,修改后再进行调试,直到程序正确运行为止。7.编写运用说明书,整理有关资料,进行总结。5程序文件的建立、运行和修改一、建立程序文件二、运行程序文件三、修改程序文件6建立程序文件一、菜单方式1.单击菜单[文件]→[新建]或者单击常用工具栏的"新建"按钮,再单击"程序"单选按钮,最终单击"新文件"大按钮。2.输入程序,最终保存文件。如:建立如下吩咐文件cx1.prg。7举例

a=2b=5c=a+b?"a=",a?"b=",b?a,"+",b,"=",c8留意以下几点:(1)一个吩咐语句中只能有一个吩咐动词;(2)每输入完一个语句按"回车"键表示该语句结束;(3)程序中用到的全部标点符号一律用半角符号;(4)每一个程序一般应有一个结束语句,以表示该程序的结束。9建立程序文件二、吩咐方式功能:打开一个编辑窗口,从中可以修改或创建程序文件。语法:MODIFYCOMMAND[<程序文件名>|?][NOEDIT]如:MODIFYCOMMANDCX2输入程序后保存文件。10运行程序文件一、菜单方式单击!常用工具栏按钮。单击[程序][执行],选择要执行的吩咐文件。二、吩咐方式功能:执行一个VisualFoxPro程序或过程。语法:DO<程序文件名>11修改程序文件一、菜单方式单击菜单[文件]→[打开]或单击常用工具栏上的"打开"按钮,启动"打开"对话框。在该对话框中选择想修改的程序文件名后单击"确定"按钮或干脆双击想修改的程序文件名。二、吩咐方式运用建立吩咐文件同样的吩咐。12依次结构程序设计5随意类型键盘输入吩咐INPUT1依次结构程序设计的概念2输出吩咐?|??3输出打印吩咐???4内存变量内部赋值吩咐STORE|=6字符型键盘输入吩咐ACCEPT13依次结构程序设计7程序暂停、等待接收单字符吩咐WAIT8计算表达式值吩咐=9终止程序运行吩咐CANCEL10程序注释吩咐11文本输出吩咐TEXT…ENDTEXT12输出文本行信息吩咐\|\\13输入输出吩咐14依次结构

程序设计的概念依次结构是一种线性结构,是程序设计中最基础的结构,该结构中各操作块依据各自出现的先后依次,依次逐块执行。ABC152输出吩咐?|??功能:计算一批表达式的值,然后按指定格式在VisualFoxPro主窗口、用户自定义窗口或打印机输出表达式的值。语法:?|??[<表达式>][PICTURE<模式符>][FUNCTION<功能符>][V<显示宽度>][AT<显示列数>][FONT<字模名>[,<字体大小>]][STYLE<字体风格>][……]如:?3*45/26AT2FONT'COURIER',34STYLE'BI'163输出打印吩咐???功能:将输出结果干脆送到打印机上。语法:???[字符表达式]174内存变量内部

赋值吩咐STORE|=功能:建立内存变量,并把一个数据保存到一个或多个内存变量中。语法:STORE<表达式>TO<内存变量表><内存变量>=<表达式>如:STOR34*56/8TOXY=45/3-67^218说明:1.内存变量的类型由<表达式>的类型而定。STORE1.0TOM2,M3STORE.T.TOL1STORE6*2>=18TOL2C1="xyzabc"L3=.F.Store{99/05/06}toD1D2=date()19说明:

2.可以给变量重新赋值,将以新值替代旧值。例:X=8?XX=16?X

X="abcd"?X20说明:3.STORE可以给多个变量同时赋同一个值,=只能给一个变量赋值。假如给多个变量赋不同的值,必需运用多条STORE|=吩咐。如:STOR0TOA,B,CA=0B=0C=021说明:4.引用变量的值不会变更被引用变量的值。如:A=5B=AC=B?A,B,C22说明:5.数值型变量可以与自身相加,字符型变量可以与自身相连接。例:X=10X=X+1?XX=X+12?XC="Good"C=C+"Morning!"?C23举例例6-1:已知X=16,Y=18,编写程序,将它们的值互换后输出。程序如下:CLEARX=16Y=18T=XX=YY=T?"X=",X,"Y=",YCANCEL程序运行结果:X=18Y=16

XYT161618161816181816181616246.2依次结构程序设计例6-1:已知X=16,Y=18,编写程序,将它们的值互换后输出。程序如下:CLEARX=16Y=18T=XX=YY=T?"X=",X,"Y=",Y,"T=",TCANCEL清屏X=16Y=18T=XX=YY=T输出X、Y、T程序结束25举例例6-2:鸡兔同笼,已知鸡兔总头数为16(heads),总脚数为40(feet),编写程序求鸡兔各有多少。解:设鸡为X只,兔为Y只,列出方程组为:X+Y=H解得:X=(4H-F)/22X+4Y=FY=(F-2H)/2程序如下:26举例H=16F=40X=(4*H-F)/2Y=(F-2*H)/2?"共有鸡:",x,"只"?"共有兔:",y,"只"CANCEL结果为:共有鸡:12只共有兔:4只275随意类型键盘

输入吩咐INPUT功能:建立内存变量,并且用键盘输入的方式将数值型、字符型、逻辑型或日期型数据赋值给内存变量。语法:INPUT[<提示>]TO<内存变量>例6-3:已知圆半径为R,计算圆面积S、球体积V,球表面积F(要求四舍五入保留三位小数)。公式分别为:S=πr2V=4/3πr3F=4πr228程序如下:INPUT"请输入圆半径R="TORS=ROUND(PI()*R^2,3)V=ROUND(4/3*PI()*R^3,3)F=ROUND(4*PI()*R^2,3)?"圆面积为:",S?"球体积为:",V?"球表面积为:",FCANCEL296字符型键盘

输入吩咐ACCEPT功能:建立内存变量,并用键盘输入的方式将字符型数据赋值给内存变量。语法:ACCEPT[<提示>]TO<内存变量>例6-4:假设JSDA.DBF数据表文件在A盘根书目下,编写一程序,打开数据表JSDA.DBF,运行程序时输入姓名,并将该姓名的记录内容显示出来。30程序如下:SETDEFATOA:\USEJSDAACCEPT"请输入姓名:"TONAMELOCATEALLFOR姓名=NAMEDISPLAYCancel317程序暂停、等待接收单字符吩咐WAIT功能:显示一条提示并暂停程序运行,直到按下任一键或鼠标按键,程序才接着执行。语法:WAIT[<提示>][TO<内存变量>][WINDOW[AT<行坐标>,<列坐标>]][NOWAIT][CLEAR|NOCLEAR][TIMEOUT<等待秒数>]32举例例6-5:用WAIT吩咐暂停显示。ClearWaittoa?a?"1VisualFoxPro"WAIT"请稍候,按随意键接着"?"2VisualFoxPro"WAIT"这是查看功能"WINDOWAT10,10?"3VisualFoxPro"WAITWINDOWTIMEOUT3CANCEL338计算表达式值吩咐=语法:=<表达式1>[,<表达式2>……]功能:计算一个或多个表达式的值,并且不返回其值。常用于须要执行一个系统函数或用户自定义函数的功能,但不须要将该函数的返回值赋给一个内存变量、数组或数组元素的状况下。如为了进入插入状态,可输入吩咐:=insmode(.t.)349终止程序

运行吩咐CANCEL语法:CANCEL功能:终止程序的运行,释放全部局部内存变量,返回到"吩咐"窗口。3510程序注释吩咐一、行首注释吩咐NOTE|*功能:在程序中加注释行信息。语法:NOTE|*[注释内容]二、行尾注释吩咐&&功能:在吩咐语句的尾部加注释信息。语法:&&[注释]例6-6:计算发放工资中各种大小钞票最少的程序。程序如下:(L6_6.PRG)36NOTE依据输入的钱数,计算各种面额*钞票张数最少的程序。INPUT"请输入总钱款数量(单位:元):"TOX&&单位为:元。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&&求剩余"零头"款额37X=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,"张"38?"50元票:",y50,"张"?"10元票:",y10,"张"?"5元票:",y5,"张"?"2元票:",y2,"张"?"1元票:",y1,"张"wait?"5角票:",j5,"张"?"2角票:",j2,"张"?"1角票:",j1,"张"?"5分票:",f5,"张"?"2分票:",f2,"张"?"1分票:",f1,"张"cancel3911文本输出吩咐TEXT…ENDTEXT功能:在屏幕上显示TEXT和ENDTEXT之间的全部文本信息。语法:TEXT文本信息ENDTEXT40举例例6-7:利用TEXT……ENDTEXT语句在屏幕上输出"21世纪是信息化时代!"cleartext21世纪是信息化时代!endtextcancel4112输出文本行

信息吩咐\|\\功能:输出文本行信息。语法:\<文本行信息>\\<文本行信息>\<文本行信息>:输出信息时,输出行以回车符开头。\\<文本行信息>:输出信息时,输出行不以回车符开头。42举例如输入下面两个吩咐:\计算机世界\计算机世界\\奇妙的明天执行结果为:计算机世界计算机世界奇妙的世界4313、输入输出格式吩咐显示输出并接受输入的吩咐(1)@<行坐标,列坐标>[SAY<"提示">]GET<变量>[PICTURE<字符表达式1>][FUNCTION<字符表达式2>][RANGE<下限,上限>](2)READ&&激活get语句,显示并可以修改(3)CLEARGETS&&不激活get后cleargets前的语句,使其只显示不能修改.称隔断语句44@...say...get....举例例:吩咐X="ASDFG"@10,10SAY"ZIFU"GETXCLEARGETSREAD例:打开JSDA.dbf表,显示该表每个记录的姓名,职称,基本工资字段,其中基本工资范围在2000元以内,要求以逗号格式显示且保留两位小数点,并且姓名只显示不能修改.(L7-2.prg)45L7-2.PRGUSEJSDASCANFORNOTEOF()@0,0SAY"姓名:"GET姓名CLEARGETS@0,14SAY"职称:"GET职称@0,32SAY"基本工资:"GET基本工资RANGE0,2000PICTURE"9,999.99"READENDSCANCANCEL46选择结构程序设计一、选择结构程序设计的概念二、单条件选择吩咐IF三、多分支选择吩咐DOCASE47选择结构

程序设计的概念

程序设计中的分支,是指在程序中从某一程序块分支出两个或两个以上相对独立、彼此不同的子程序块的现象,并称这些子程序块为它的分支。条件AB48选择结构

程序设计的概念一、双分支选择结构通常也称为单条件双分支选择结构,或单条件选择结构。它仅描述具有两个分支的分支现象,是最简洁的选择结构。二、多分支选择结构该分支机构的特点是:从多个选择结构中,选择一个条件为真的路途作为程序执行的路途。49单条件选择吩咐IF功能:该吩咐用来进行各种条件推断,使程序中的吩咐有条件的执行。语法:IF<条件>[吩咐组1][ELSE[吩咐组2]]ENDIFIFIFENDIFENDIFIFIFENDIFENDIF嵌套错误嵌套正确50举例例6-8:铁路托运行李,从甲地到乙地,按规定每张客票托运行李不超过50公斤时,每公斤0.25元,如超过50公斤,超过部分按每公斤0.45元计算。编写一个程序,把行李重量输入计算机,计算出运费,并打印出付款清单。运费公式为:p=0.25×w当W≤50p=50×0.25+(w-50)×0.45当W>5051程序如下:Input"请输入行李重量:"TOwIFw<=50P=0.25*wElseP=50*0.25+(w-50)*0.45Endif?"行李重量为:",w??"应付运费为:",pcancel从键盘输入数据WW<=50?P=0.25*WP=50*0.25+(W-50)*0.45YESNO输出W、P程序结束52举例例6-9:求表达式的值。Y=x3当X>10Y=X5当0≤X≤10Y=X2当X<0依据所给公式和条件,写出程序:input"请输入X的值:"tox53举例ifx>10y=x^3elseifx>=0y=x^5elsey=x^2endifendif?"X的值为:",x?"Y的值为:",ycancel54填空练习:input"请输入X的值:"toxifx>10y=x^3elseif———&&1y=x^5else———&&2endif————?"X的值为:",x?"Y的值为:",ycancel求表达式的值。Y=x^3当X>10Y=X^5当0≤X≤10Y=X^2当X<0程序如右,请填空55例:已知系数a、b、c,编写程序,求一元二次方程:ax2+bx+c=0的根。问题分析:解上述方程:得到求解方程为:依据一元二次方程的系数a、b、c的取值,有以下几种状况:561.当a<>0时,有两个根。当判别式b2-4ac>0时,有两个不同的实根;当判别式b2-4ac=0时,有两个相同的实根;当判别式b2-4ac<0时,有两个不同的虚根。2.当a=0,b<>0时,有一个根。3.当a=0,b=0时,方程无意义。依据分析,写出程序:57*解方程input"a="toainput"b="tobinput"c="tocifa<>0delta=b^2-4*a*cre=-b/(2*a)im=sqrt(abs(delta))/(2*a)

58ifdelta>=0root1=re+imroot2=re-im?"两个实根为:",root1,root2else?"两个虚根为:",re,"+",im,"i"?"",re,"-",im,"i"endif59elseifb<>0?"只有一个根:",-c/belse?"方程无解!"endifendifcancel60例:能打开随意表阅读的程序@5,10SAY"请输入表名"getbmdefaultspace(10)READBM=ALLTRIM(BM)IFFILE("&bm..dbf")Use&bm&&usebm是错误的,不能干脆用表名BrowseElseWait"该文件不存在"windowendif61多分支选择吩咐DOCASE功能:从多个选择结构中,选择一个条件为真的路途作为程序执行的路途。语法:DOCASECASE<条件1>[吩咐组1][CASE<条件2>[吩咐组2]]…[OTHERWISE[吩咐组n+1]]ENDCASE62例:设计个人纳税计算程序。按税法规定,工资、薪金所得,运用超额累进税率。以每月收入额减去800元后的余额,为应纳税所得额。(L6_11.PRG)其税率表为:级数全月应纳税所得额税率(%)1不超过500元52500-2000元1032000-5000元1545000-20000元2063级数全月应纳税所得额税率(%)520000-40000元25640000-60000元30760000-80000元35880000-100000元409100000元以上45分析:由于接受超额累计法计算,因此要计算出每级的纳税数额,设500元、2000元、…、100000元时应纳税数额为SW500、SW2000、…、SW100000。64问题分析:sw500=500*0.05sw2000=sw500+(2000-500)*0.10sw5000=sw2000+(5000-2000)*0.15sw20000=sw5000+(20000-5000)*0.20设收入-800为:23000js=sw20000+(23000-20000)*0.25依据分析,程序为L6_11.PRG框图为:65清屏计算各级别纳税额T<=500?输入工资总额TT=T-800T<=2000?YESJS=T*0.05YESJS=SW500+T*0.05NONOT>100000?YESJS=SW100000+T*0.45NO输出程序结束66sw500=500*0.05sw2000=sw500+(2000-500)*0.10sw5000=sw2000+(5000-2000)*0.15sw20000=sw5000+(20000-5000)*0.20sw40000=sw20000+(40000-20000)*0.25sw60000=sw40000+(60000-40000)*0.30sw80000=sw60000+(80000-40000)*0.35sw100000=sw80000+(100000-80000)*0.40input"请输入本月应纳税所得额(元):"totdocasecaset<=500js=t*0.05caset<=2000js=sw500+(t-500)*0.10caset<=5000js=sw2000+(t-2000)*0.15caset<=20000js=sw5000+(t-5000)*0.20caset<=40000js=sw20000+(t-20000)*0.25caset<=60000js=sw40000+(t-40000)*0.30caset<=80000js=sw60000+(t-60000)*0.35caset<=100000js=sw80000+(t-80000)*0.40otherwisejs=sw100000+(t-100000)*0.45endcase?"本月应纳税:",js,"元"cancel程序如右,可复制运行:67举例例6-12:任给一个年份,推断是否为闰年,并依据输入的月份,推断属于什么季节以及该月天数。(L_12.PRG)问题分析:闰年的条件是能被4整除但不能被100整除,或者能被400整除。依据闰年条件可得出闰年的逻辑表达式:MOD(Y,4)=0.AND.MOD(Y,100)<>0.OR.MOD(Y,400)=068*求闰年、季节、每月的天数CLEARinput"请输入年份:"toyifmod(y,4)=0.and.mod(y,100)<>0.or.mod(y,400)=0rn=.t.?y,"年是闰年。"Elsern=.f.?y,"年不是闰年。"EndifInput"请输入月份(1-12):"tomDocaseCasem=3.or.m=4.or.m=5?m,"月是春季(",m,"monthisspring.)"casem=6.or.m=7.or.m=8?m,"月是夏季(",m,"monthissummer.)"casem=9.or.m=10.or.m=11?m,"月是秋季(",m,"monthisAutumn.)"casem=12.or.m=1.or.m=2?m,"月是冬季(",m,"monthiswinter.)"endcasedocasecasem=4.or.m=6.or.m=9.or.m=11?m,"月有30天。"Casem=2Ifrn=.f.Days=28ElseDays=29Endif?m,"月有",days,"天。"Otherwise?m,"月有",31,"天。"EndcaseCancel程序如右,可复制运行:69循环结构程序设计1循环结构程序设计的概念2当型循环吩咐DOWHILE3步长型循环吩咐FOR4数据表扫描循环吩咐SCAN70循环结构

程序设计的概念所谓循环是指在程序设计中,从某处起先有规律地反复执行某一操作块(或程序块)的现象,并称重复执行的该操作块(或程序块)为它的循环体。按循环体内是否嵌套有从属的子循环,可分为单循环结构和多循环结构;按其循环体执行方式和条件,可分为当型、直到型与步长型循环结构。71调试工具工具/调试器(跟踪窗口和监视窗口)VFP3.0为:调试窗口和跟踪窗口72当型循环吩咐DOWHILE功能:当给定的条件为真时,就使DOWHILE…ENDDO之间的吩咐重复执行,实现程序循环。语法:DOWHILE<条件>[吩咐组][EXIT][LOOP]ENDDO73举例例:用循环语句打印5个"VisualFoxPro"字符串。X=1Dowhilex<=5?"VisualFoxPro"x=x+1ENDDOCANCEL74举例

例:有一张厚0.5毫米,面积足够大的纸,将它不断地对折。问对折多少次后,其厚度可达珠穆朗玛峰的高度(8848米)。问题分析:0.5,1,2,4,8,16,32,64,128,256,512,……h=0.5h=2*h=1h=2*h=2h=2*h=4n=0n=n+1=1n=n+1=2n=n+1=375n=0h=0.5dowhileh<8848000n=n+1h=2*henddo?"对折的次数:",n?"此时的H为:",hcancel76举例例:打开数据表JSDA.DBF,从键盘上输入某一职称(比如讲师),然后列出符合该职称的全部记录的内容,用循环来作,直到干脆按回车键时结束程序。(L6_15.PRG)外循环用来限制不同职称的输入,内循环用来限制满足条件的多条记录的输出。程序如下:77CLEARUSEjsdaSORTON职称TOjsda1USEjsda1DOWHILE.T.ACCEPT"请输入要查找的职称"TOZCIFZC==""EXITENDIFLOCATEFOR职称=ZCDOWHILE职称=ZCDISPOFFSKIPENDDOENDDOCANCEL78留意1.DOWHILE吩咐只能在程序中运用。2.每一个DOWHILE必需有一个ENDDO与其配对。3.在程序中应避开出现死循环。4.在吩咐组中可以嵌套IF……ENDIF、DOCASE……ENDCASE、DOWHILE……ENDDO、FOR……ENDFOR、SCAN……ENDSCAN结构。79步长型循环吩咐FOR功能:依据给定的次数重复执行一组吩咐,实现程序循环。语法:FOR<内存变量>=<初值>to<终值>[step<步长值>][吩咐组][EXIT][LOOP]ENDFOR|NEXT80举例例:求1+2+3+…+99+100的值。s=0forx=1to100s=s+xendfor?"s=",scancelXS011=123=1+236=1+2+3……1005050=1+…+10010181举例(FOR语句与DOWHILE语句)例:求1+2+3+…+99+100的值。s=0forx=1to100s=s+xendfor?"s=",scancelx=1s=0Dowhilex<=100x=x+1s=s+xenddo?"s=",scancel82举例例:求1+2!+3!+4!+…+20!S=0T=1ForN=1to20T=T*NS=S+TEndfor?"S=",SCANCEL

NTS10111=1!223=1!+2!369=1!+2!+3!……2020!1!+…+20!2183举例例:用双重循环打印九九乘法表。(l6_18.prg)clearFora=1to9Forb=1toap=a*b??str(a,1)+"×"+str(b,1)+"="+str(p,2)+""endfor?endfor84数据表扫描循环吩咐SCAN功能:在当前选择的表Table/.DBF文件中移动记录指针,假如遇到符合条件的记录就执行一组吩咐。语法:SCAN[NOOPTIMIZE][<范围>][FOR|WHILE<条件>][吩咐组][EXIT][LOOP]ENDSCAN85举例例:将xscj数据表中电脑成果不及格者的学号、姓名、电脑三个字段的值输出。(l6_19.prg)CloseallUsexscjClearScanfor电脑<60?学号,姓名,电脑endscanCancel86子程序及变量的局域性1子程序2内存变量的属性和作用域3调用子程序时的数据传递4用户定义函数5过程文件87子程序及变量的局域性子程序分类:子程序、函数、过程三类。功能:多次运用的可供其他程序(主程序)运用(调用)的程序(子程序)语法:子程序:…RETURN主程序:...DO<子程序名>…88子程序及变量的局域性内存变量主从内存变量:主程序定义,子程序返回的值,主程序接着运用;子程序定义,返回清除全局内存变量:功能:不管是主程序子程序定义,主程序子程序都可运用、修改。语法:PUBLIC<变量名>局部内存变量:功能:子程序中定义局部变量,隐藏上级同名变量,解决变量同名问题.语法:PRIVATE|LOCAL<变量名>89子程序及变量的局域性调用子程序时的数据传递主从变量:干脆传递数据(主变量)全局变量:干脆传递数据用参数传递数据:功能:利用形参与实参的对应关系(数量,依次)解决变量不同名问题.DO时,<实参><形参>(传递);RETURN时,<实参><形参>(返回)语法:主程序:DO…WITH<实参>子程序:PARAMETES<形参>90子程序及变量的局域性用户定义函数独立用户定义函数:说明:独立的程序文件,任何 程序都可以以函数形式或子程序形 式调用,函数名即文件名.语法:PARAMETES…RETURN<表达式>依附用户定义函数:说明:依附在程序后面,不独 立存在.

语法:FUNCTION…RETURN<表达式>91子程序及变量的局域性过程文件功能:由多个子程序组成的程序文件,一次打开(读入),可削减调用子程序时访问磁盘的次数。组成:由多个PROCEDURE〈子程序〉 …... RETURN 组成打开:SETPROCEDURETO<过程文件名> 调用子程序:DO<子程序名>92子程序能够完成确定功能的可供其它程序运用(调用)的独立程序段称为子程序。它独立存在,但可以被多次调用,调用的程序称为主程序。子程序结构分为:子程序、函数、过程三类。一、子程序的建立在程序的末尾放上RETURN语句即可。93子程序二、RETURN语句功能:终止一个程序、过程或用户定义函数的执行,返回到上一级调用序、最高级调用程序、另外一个程序或者吩咐窗口。语法:return[tomaster|to<程序名>|<表达式>]94子程序举例例:主程序r=10*s=0do程序2?"s=",scancel例:子程序(程序2)S=ROUND(PI()*R^2,2)RETURN95子程序举例例:写一个求P的阶乘的子程序。ps=1forI=1topps=ps*Iendforreturn以JC.PRG为文件名保存。96子程序一、子程序的调用调用子程序的吩咐DO:功能:执行一个VisualFoxPro主程序或调用一个子程序。语法:DO<程序文件名>|<过程名>[with<参数表>]如:DOJC97子程序应用举例例:编写计算求S=A!+B!+C!程序。clearinput"a="toainput"b="tobinput"c="tocps=1p=adojcs=psp=bdojcs=s+psp=cdojcs=s+ps?"s=",scancel98内存变量

的属性和作用域VisualFoxPro中内存变量按其属性可以分为主从型、全局型(public)和局部型(private)三种。一、主从型内存变量二、全局型内存变量三、局部型内存变量99一、主从型内存变量程序中运用的内存变量,凡未经特殊说明的均属于主从型内存变量,这些内存变量可以在本级程序及以下各级子程序中运用,其值可以在子程序中变更,返回主程序时保留变更后的值。100主从型内存变量举例例:主程序r=10*s=0&定义sdo程序2?"s=",s&返回有效cancel子程序(程序2)S=ROUND(PI()*R^2,2)RETURN101二、全局型内存变量全局型内存变量是指在上、下各级程序中都可运用、修改的内存变量。它可以由主程序定义,也可以由子程序定义,全局变量就像在一个程序中定义的变量一样,可以随意变更和调用,当程序执行完后,其值仍旧保存。若要清除全局变量,必需用release吩咐。102定义全局变量的吩咐功能:定义全局内存变量或数组。语法:a:PUBLIC<内存变量表>|ALL|ALLLIKE<梗概>|ALLEXCEPT<梗概>b:PUBLIC[ARRAY]<数组名>(<数值表达式1>[,<数值表达式2>])[,<数组名>(<数值表达式1>[<数值表达式2>]),…]例如:看例6—30103全局型内存变量举例例:主程序r=10*PUBLICS*s=0do程序2?"s=",scancel子程序(程序2)*PUBLICSS=ROUND(PI()*R^2,2)RETURN104说明:1.任何全局内存变量或者数组必需先定义,后赋值。2.定义后尚未赋值的全局变量其值为逻辑值.f.。3.全局变量在程序结束时不释放。4.在子程序里,可以用PRIVATE,或者用DO…WHILE<参数表>传递参数的方法将全局变量短暂隐藏起来。6.吩咐窗口中建立的变量为全局型。105三、局部型内存变量局部内存变量和内存变量数组只能在创建它们的过程或函数中运用和更改,不能被高层或低层程序访问。一旦包含局部内存变量和数组的过程或函数执行完毕,则释放这些局部内存变量和数组。用LOCAL创建的内存变量和数组都初始化为"假"(.F.)。必需在赋值之前把内存变量或数组声明为局部。不能缩写LOCAL。106三、局部型内存变量功能:创建局部内存变量和内存变量数组。语法:LOCAL<变量名表>—或者—LOCAL[ARRAY]<数组名1>(<数值表达式1>[,<数值表达式2>]) [,<数组名2>(<数值表达式3>[,<数值表达式4>])...例6-31107三、局部型内存变量语法:PRIVATE<内存变量表>|ALL|ALLLIKE<梗概>|ALLEXCEPT<梗概>语法中的参数含义与PUBLIC中的一样。对PRIVATE中内存变量的修改并不影响上级程序中与之同名的内存变量的值。此吩咐只对本级程序及以下各级子程序有效,当返回到上级程序时,被PRIVATE隐藏的当前程序中的内存变量自动被清除。108局部型内存变量举例例:主程序(程序1)clearX=1?"11",Xdo程序2?"22",XX=5?"33",Xdo程序3?"44",xcancel子程序(程序2)privatex*localxx=2?"程序2"xRETURN子程序(程序3)privatexx=3?"程序3",xreturn109调用子程序时

的数据传递一、用主从变量和全局变量实现数据传递二、用参数实现数据传递功能:指定子程序中的局部变量名,并由这些局部变量接收由上级程序传递来的参数,将其依次赋给<内存变量表>中的各局部变量,也可以返送子程序运行的结果。语法:PARAMETERS<内存变量表>110用主从变量和全局变量

实现数据传递例:主程序(程序1)g=5k=6*c=0do程序2?ccancel子程序(程序2)*publiccc=g*kRETURN111例:用参数实现数据传递主程序(程序1)g=5k=6mj=0do程序2withg,k,mj?mjcancel子程序(程序2)paramet

温馨提示

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

评论

0/150

提交评论