您好,欢迎访问三七文档
第五章过程二、过程调用引例:已知多边形的各条边的长度,要计算多边形的面积,计算多边形面积。分析:可将多边形分解成若干个三角形。计算三角形面积的公式如下:首先定义一个求三角形面积的过程,然后就像调用标准函数一样多次调用。)(21))()((zyxczcycxccarea5.1概述过程一、过程:有名称,能完成一定功能,可供其它程序调用的独立程序模块。abcdefgS1S2S3xyz定义函数过程:FUNCTIONarea(x!,y!,z!)DIMpASSINGLEp=1/2*(x+y+z)area=sqr(p*(p-x)*(p-y)*(p-z)ENDFUNCTION主函数:DECLAREFUNCTIONarea(x!,y!,z!)INPUT“a,b,c,d,e,f,g=”;a,b,c,d,e,f,gS1=area(a,b,c)S2=area(c,d,e):S3=area(e,f,g)S=s1+s2+s3PRINT“五边形的面积是:”;sENDc二、DECLARE语句格式:DECLARE{FUNCTION|SUB}过程名([参数表])功能:说明模块中调用的过程及调用过程时传递的参数。该语句只能出现在主程序中。5.2FUNCTI0N过程一、FUNCTION过程的建立格式:FUNCTION过程名[(参数表)]...[EXITFUNCTION]...过程名=表达式...ENDFUNCTION功能:定义FUNCTION过程,即定义一个函数过程.FUNCTIONarea(x!,y!,z!)p=1/2*(x+y+z)area=sqr(p*(p-x)*(p-y)*(p-z)ENDFUNCTION定义函数过程:二、FUNCTION过程的调用调用:过程名(实参表)S1=area(a,b,c):S2=area(c,d,e):S3=area(e,f,g)S=area(a,b,c)+area(c,d,e)+area(e,f,g)例1.求从n个不同元素中取k个元素的组合有几种。组合数是:C(n,k)=n!/(k!*(n-k)!)分析:用functionfac(m)过程求:m!;t=1FORi=1T0mt=t*INEXTifac=t主函数:输入n、k,3次调用m!分别求n!、k!和(n-r)!主程序如下:DECLAREFUNCTIONfac(m)INPUT“INPUTn,k(nk):”;n,kt=fac(k)*fac(n-k):c=fac(n)/tPRINT“C(“;n;”,”k;”)=”;cENDFUNCTIONfac(m)t=1FORi=1TOmt=t*i:NEXTifac=tENDFUNCTION运行结果:INPUTn,k(nk):?10,3C(10,3)=120m为形参,t为m的阶乘,通过fac=t返回m的阶乘值。注意:过程不能放在主程序中,应用“Edit”菜单的“NEWFUNCTION/NEWSUB”编写,用“View”菜单的SUBS查看。在主程序中,输入过程名后,系统可自动切换。总结:主程序中:输入数据,调用过程处理数据,输出数据过程中:处理/计算数据•分析:输入两个数,调用求其中大数的FUNCTION过程,两次调用,调用后求和。•过程名:max()•过程如下:•FUNCTIONENDFUNCTION主程序:•例3.编程任意输入两组数a与b,c与d,,求出各组数中大数的和。max(x,y)IFxyTHENmax=xELSEmax=y输入第1组数,调函数求最大值放m1;输入2组数,调函数求最大值放m2;求和并输出。DECLAREFUNCTIONmax(x,y)INPUT”a,b=”;a,bm1=max(a,b)INPUT”c,d=”;c,dm2=max(c,d)m=m1+m2PRINT”两最大数的和是:”;mENDFUNCTIONmax(x,y)IFxyTHENmax=xELSEmax=yENDFUNCTION5.3SUB过程一、SUB过程的建立格式:SUB过程名[(参数表)]…[EXITSUB]…ENDSUB说明:(1)SUB与ENDSUB必须成对出现。(2)过程名后参数表中的参数并不表示具体值,称为形式参数,简称形参。省参数表,表示是无参过程。二、SUB过程调用格式1:CALL过程名[(实参表)]格式2:过程名[(实参表)]*********################&&&&&&&&&&&&&&&&&&&&&&&&&例4.编一个程序,显示下列3个三角形构成的图形。要求:显示1个三角形的工作由一个过程实现。通过用不同的参数三次调用该过程,画出此图形。如:Callsub1(a,b)sub1(a,b)分析:三次显示的图形、行数不同:第一个参数用来传递组成图形的字符(字符型参数);第二个参数传递图形行数(整型参数)。子函数:SUBtx(b$,n%)主函数:CALLtx(*,3)*********################&&&&&&&&&&&&&&&&&&&&&&&&&DECLARESUBtx(b$,n%)CLSCALLtx(*,3)CALLtx(#,4)CALLtx(&,5)ENDSUBtx(b$,n%)FORi%=1TOn%PRINTTAB(8–i%);FORj%=1TO2*i%-1PRINTb$;NEXTj%PRINTNEXTi%ENDSUBDECLARESUBtx(b$,n%)FORi=1TO3INPUT“x$,n:”;x$,mCALLtx(x$,m)NEXTIENDSUB过程用法与FUNTION过程基本相同,主要区别在于:(1)FUNTION过程中含有将运算结果赋给过程名的赋值语句,而SUB过程则不能。(2)FUNTION主要用于过程名返回一个值;SUB过程主要用于执行一种操作(功能)或运算后返回多个值。说明:5.4过程的参数传递一、形式参数和实际参数形参是指出现在DECLARESUB,FUNCTION中参数表中的参数,实参是在调用过程时,传送给过程的常量、变量或表达式。如:调用CALLs1(a%,b,c$)←实参表↓↓↓过程定义SUBsl(x%,y,z$)←形参表实参和形参可同名也可不同名,但形参与实参的个数必须相同且类型也必须相同。例5。DECLARESUBs1(x%,y,z$)INPUTa%,b,c$CALLsl(a%,b,c$)’调用s1过程CALLs1(10,20,”**”)ENDSUBs1(x%,y,z$)’定义s1过程PRINTx%*x%,y+y,z$ENDSUB运行程序输入:3,15,“book”显示结果:930book10040**二.传址和传值传值---代进不代出传值的方法有三种:传递常数、传递表达式、传递用括号扩起来的变量(包括数组)。传址---代进代出不论是简单变量或数组作为实参,其默认方式是传递地址.例6。地址的传递:调用时x&-a,y$-b;返回:a-x&,b-y$;DECLARESUBs4(aASLONG,bASSTRING)x&=1:y$=”*”PRINTx&,y$x&y$CALLs4(x&,y$)a1b*PRINTx&,y$CALLs4(x&,y$)PRINTx&,y$ENDSUBS4(aASLONG,bASSTRING)a=a+1:b=b+”*”PRINTa,bENDSUB运行结果1*2**2**3***3***例7.传址和传值示例DECLARESUBfac(n,t)x=1:PRINTx=;xCALLfac(4,x)PRINTx=;xENDSUBfac(n,t)FORi=1TOnt=t*iNEXTiENDSUB问:运行结果?若将x扩起来?CALLfac(4,(x))运行结果?x=1x=1x=1x=24例8.写出下面程序的运行结果:DECLARESUBs1(a,b)m=100:n=100CALLs1(m,(n))PRINT“m=”;m,”n=”;nENDSUBs1(a,b)a=a+b:b=b+aPRINT“a=”;a,”b=”;bENDSUB运行结果为:a=200b=300m=200n=100上机作业:1。P192、4、5、6选作:P203用SUB作6题提示:将小数放第一个数(x)中,通过地址的传递,返回主函数输出。SUBmin(x,y,z)•作业4-6•DECLARESUBmin(x,y,z)•INPUTa,b,c=;a,b,c•callmin(a,b,c)•PRINTmin=;a•END•SUBmin(x,y,z)•IFxyTHENx=y•IFxzTHENx=z•ENDsub
本文标题:过程调用引例
链接地址:https://www.777doc.com/doc-3165362 .html