过程与函数精选PPT.ppt

上传人:石*** 文档编号:43112387 上传时间:2022-09-16 格式:PPT 页数:25 大小:1.38MB
返回 下载 相关 举报
过程与函数精选PPT.ppt_第1页
第1页 / 共25页
过程与函数精选PPT.ppt_第2页
第2页 / 共25页
点击查看更多>>
资源描述

《过程与函数精选PPT.ppt》由会员分享,可在线阅读,更多相关《过程与函数精选PPT.ppt(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、过程与函数第1页,此课件共25页哦提出函数与过程的理由提出函数与过程的理由 计算机程序设计和问题求解的最基本思想是:将一个计算机程序设计和问题求解的最基本思想是:将一个计算机程序设计和问题求解的最基本思想是:将一个计算机程序设计和问题求解的最基本思想是:将一个大的复杂的问题分解成更小、更简单和更容易处理的子大的复杂的问题分解成更小、更简单和更容易处理的子大的复杂的问题分解成更小、更简单和更容易处理的子大的复杂的问题分解成更小、更简单和更容易处理的子问题。在问题。在问题。在问题。在PascalPascal语言提供了函数和过程,使得问题的分解语言提供了函数和过程,使得问题的分解语言提供了函数和过程

2、,使得问题的分解语言提供了函数和过程,使得问题的分解和处理更加方便。和处理更加方便。和处理更加方便。和处理更加方便。函数或过程:将对应于一个子问题求精的语句写在一起,函数或过程:将对应于一个子问题求精的语句写在一起,函数或过程:将对应于一个子问题求精的语句写在一起,函数或过程:将对应于一个子问题求精的语句写在一起,作为一个单独的程序模块。作为一个单独的程序模块。作为一个单独的程序模块。作为一个单独的程序模块。通常通过子程序定义抽象操作,通常通过子程序定义抽象操作,实现程序的模块化。实现程序的模块化。第2页,此课件共25页哦一、函数一、函数 1。定义。定义函数说明一般形式:函数说明一般形式:函数

3、说明一般形式:函数说明一般形式:FUNCTION FUNCTION ():):):):;BEGINBEGIN END END;注意注意注意注意:(1 1)函数名由合法的标识符指出)函数名由合法的标识符指出)函数名由合法的标识符指出)函数名由合法的标识符指出;参数表由形式参数名表和说明参数的类型标识符组成参数表由形式参数名表和说明参数的类型标识符组成参数表由形式参数名表和说明参数的类型标识符组成参数表由形式参数名表和说明参数的类型标识符组成;函数类函数类函数类函数类型即结果类型型即结果类型型即结果类型型即结果类型,由类型标识符指明。由类型标识符指明。由类型标识符指明。由类型标识符指明。(2 2)

4、形式参数类似于数学函数中的自变量)形式参数类似于数学函数中的自变量)形式参数类似于数学函数中的自变量)形式参数类似于数学函数中的自变量,为函数子程序提供初始量。在一个形式参数表中,为函数子程序提供初始量。在一个形式参数表中,为函数子程序提供初始量。在一个形式参数表中,为函数子程序提供初始量。在一个形式参数表中,可以有多个参数。逗号用来分开同类型的各个参数名,分号用来分开不同类型的参数。可以有多个参数。逗号用来分开同类型的各个参数名,分号用来分开不同类型的参数。可以有多个参数。逗号用来分开同类型的各个参数名,分号用来分开不同类型的参数。可以有多个参数。逗号用来分开同类型的各个参数名,分号用来分开

5、不同类型的参数。例如:(例如:(例如:(例如:(x,y:real;m,n:integerx,y:real;m,n:integer)(3 3)说明部分对仅说明部分对仅在函数中使用的量加以说明在函数中使用的量加以说明,可以包括函数所需要的常量、说明类型、变量,可以包括函数所需要的常量、说明类型、变量说明,也可以包括其他函数或过程说明,一般称之为说明,也可以包括其他函数或过程说明,一般称之为局部变量局部变量。函数也可以没有说明。函数也可以没有说明。(4 4)函数体)函数体)函数体)函数体:(:(函数部分的程序体函数部分的程序体函数部分的程序体函数部分的程序体)其中至少要有一个给函数名赋值的语句,并以

6、分号结束函数体。其中至少要有一个给函数名赋值的语句,并以分号结束函数体。其中至少要有一个给函数名赋值的语句,并以分号结束函数体。其中至少要有一个给函数名赋值的语句,并以分号结束函数体。第3页,此课件共25页哦2.函数调用函数调用一般形式:一般形式:一般形式:一般形式:()解释:函数调用必须出现在表达式中。函数每次调用,是将解释:函数调用必须出现在表达式中。函数每次调用,是将解释:函数调用必须出现在表达式中。函数每次调用,是将解释:函数调用必须出现在表达式中。函数每次调用,是将每个实在参数的值赋给对应的形式参数,然后由函数完成规定每个实在参数的值赋给对应的形式参数,然后由函数完成规定每个实在参数

7、的值赋给对应的形式参数,然后由函数完成规定每个实在参数的值赋给对应的形式参数,然后由函数完成规定的处理,并回送处理结果。的处理,并回送处理结果。的处理,并回送处理结果。的处理,并回送处理结果。注意:注意:注意:注意:实在参数与形式参数的个数要相同,一一对应,类型上赋值实在参数与形式参数的个数要相同,一一对应,类型上赋值实在参数与形式参数的个数要相同,一一对应,类型上赋值实在参数与形式参数的个数要相同,一一对应,类型上赋值相容。相容。相容。相容。实在参数可以是表达式。实在参数可以是表达式。实在参数可以是表达式。实在参数可以是表达式。若没有形式参数,则若没有形式参数,则若没有形式参数,则若没有形式

8、参数,则 略去实在参数和括号。略去实在参数和括号。略去实在参数和括号。略去实在参数和括号。第4页,此课件共25页哦例例例例:编写一个求K!的函数,调用此函数计算:(0nm=0)and(nm)and(mn2thenlarger:=n1elselarger:=n2;end;largerbeginlargest:=larger(larger(f1,f2),f3);计算和返回f1,f2,f3的最大值end;largestlargest的函数说明指明了largest函数和它的子函数larger的结果值类型都为整数。子函数larger的结果值由赋值语句larger:=n1(或larger:=n2)确定;l

9、argest函数的结果值由赋值语句largest:=larger(larger(f1,f2),f3)确定。第6页,此课件共25页哦例例:求正整数A和B之间的完全数(AB).分析:所谓完全数是指它的小于该数本身的因子之和等于它本身,如6123,6即是一个完全数。因此我们可定义一个布尔型函数perfect(x),若x是完全数,其值为TURE,否则为FALSE。整个程序算法如下:1fori:=AtoBdo2ifperfect(i)thenwriteln(i);vari,a,b:integer;begin主程序开始write(Inputa,b:);repeat输入0a0)and(b0)and(ab);

10、writeln(Listofallperfectnumbers:);从a到b逐个判断,是完全数则打印出来fori:=atobdoifperfect(i)thenwriteln(i);end.functionperfect(x:integer):boolean;vark,sum:integer;begin累加x所有小于本身的因数sum:=1;fork:=2toxdiv2doifxmodk=0thensum:=sum+k;判断x是否是完全数perfect:=x=sum;将结果赋值给函数名end;endofperfect第7页,此课件共25页哦二、过程二、过程 1。定义。定义过程说明一般形式:过程说

11、明一般形式:过程说明一般形式:过程说明一般形式:PROCEDURE PROCEDURE (););););BEGINBEGIN END END;注意:注意:注意:注意:(1 1)形式参数表有两种格式:)形式参数表有两种格式:)形式参数表有两种格式:)形式参数表有两种格式:数值形参数值形参数值形参数值形参和以和以和以和以VARVAR开头的开头的开头的开头的变量形参变量形参变量形参变量形参。(2 2)过程体中没有也不可以有给过程名赋值的语句,返回值由变量形参提供。)过程体中没有也不可以有给过程名赋值的语句,返回值由变量形参提供。)过程体中没有也不可以有给过程名赋值的语句,返回值由变量形参提供。)过

12、程体中没有也不可以有给过程名赋值的语句,返回值由变量形参提供。2.2.过程调用一般形式:过程调用一般形式:过程调用一般形式:过程调用一般形式:()解释:与数值形参对应的实在参数可以是表达式,与变量形参对应的实在参数必须是变量,而不能是一般的解释:与数值形参对应的实在参数可以是表达式,与变量形参对应的实在参数必须是变量,而不能是一般的解释:与数值形参对应的实在参数可以是表达式,与变量形参对应的实在参数必须是变量,而不能是一般的解释:与数值形参对应的实在参数可以是表达式,与变量形参对应的实在参数必须是变量,而不能是一般的表达式。表达式。表达式。表达式。第8页,此课件共25页哦例:定义一个求三数中最

13、大值的过程例:定义一个求三数中最大值的过程procedurelargest(f1,f2,f3:integer;varir:integer);计算和返回f1,f2,f3的最大值irvarg:integer;procedurelarger(n1,n2:integer;varr:integer);largest的子过程,计算和返回n1,n2的最大值rbeginifn1n2thenr:=n1elser:=n2;end;largerbeginlarger(f1,f2,g);求出f1,f2中的最大值glarger(g,f3,ir);求出g,f3中的最大值Ir,作为f1,f2,f3中的最大值返回end;la

14、rgestLargest有四个类型为整型的形式参数:f1,f2,f3和Ir,前三个参数f1,f2,f3为调用者向被调用者传入的三个要求比较大小的整数,这三个参数仅用作传入数据,不传出计算结果,因此称为值参;第四个参数Ir用来向调用者传送三数中的最大值,这种用作传出计算结果的参数称为变量参数,由var标志。Largest使用的子过程larger有三个类型为整型的形式参数:n1,n2和r,前二个参数n1,n2为过程Largest向它传入的二个要求比较大小的整数,属于值参;第三个参数r用来向过程Largest传送n1和n2的最大值,属于变量参数。第9页,此课件共25页哦例:例:输出以下一个图形:*分

15、析:我们前面学习可用的二重循环打印出上图形,现我们设置一个过程打印出N个连续的*号。programex7_2;vari:integer;proceduredraw_a_line(n:integer);该过程打印出连续n个星号,并换行varj:integer;beginforj:=1tondowrite(*);writeln;end;beginfori:=1to6dodraw_a_line(i);调用过程,第I行打印i个连续星号end.第10页,此课件共25页哦例例 说明一个求两个整数的最大公约数和最小公倍数的过程说明一个求两个整数的最大公约数和最小公倍数的过程Procedure mab(a,b

16、:integer;var maxab,minab:integer);Var f:boolean;i:integer;Begin if ab then begin t:=a;a:=b;b:=t;end;f:=true;i:=a;while f and i0 do begin if (a mod i=0)and(b mod i=0)then begin maxab:=I;minab:=a*b div I;f:=false;end;i:=i-1;end;End;第11页,此课件共25页哦过程与函数的区别第12页,此课件共25页哦实参与形参子程序调用(过程调用或函数调用)的执行顺序分以下几步:实参与形

17、参结合执行子程序体返回调用处继续执行子程序说明的形式参数表对过程或函数内的语句序列直接引用的变量进行说明,详细指明这些参数的类别、数据类型要求和参数的个数。过程或函数被调用时必须为它的每个形参提供一个实参,按参数的位置顺序一一对应,每个实参必须满足对应形参的要求。Pascal子程序形参主要分类:1.值参数形式参数表中前面没有var,后有类型的参数。它类似过程和函数的局部变量,仅为过程和函数的执行提供初值而不影响调用时实际参数的值。在调用过程或应用函数时,值参数所对应的实际参数必须是表达式,而且它的值不能使文件类型或包括文件类型的值。实参必须和形参赋值相容。2.变量参数形式参数表中前面有var后

18、由类型的参数。如果需要子程序向调用程序返回值时,应采用变量参数。变量参数要求它的实参是和它同一类型的变量。因为在子程序执行时,遇到对相应形参的引用式定值,就是对相应实参的引用式定值,即对形参的任何操作就是对实参本身的操作。第13页,此课件共25页哦例输出两个数中最大值的过程Varx:y:integerprocedurelargest(a,b:integer);beginifabthenwriteln(a)elsewriteln(b);end.beginReadln(x,y);Lagest(x,y);End.实际引用时所用的参数x,y,是主程序定义的变量过程中定义的形式参数a,b,在实际引用过程

19、时,将被实际参数代替第14页,此课件共25页哦过程、函数的数据传递过程、函数的数据传递在程序调用子程序时,调用程序将数据传递给被调用的过程或函数,而当子程序运行结束后,结果又可以通过函数名、变参。当然也可以用全局变量等形式实现数据的传递。接下来我们,就来研究参数传递与局部变量、全局变量等问题。第15页,此课件共25页哦数值形参数值形参 和和 变量形参变量形参Procedure show(a:integer)值形参和对应的实参必须一一对值形参和对应的实参必须一一对应,包括个数和类型。应,包括个数和类型。对应的实在参数可为表达式对应的实在参数可为表达式与实在参数之间传递关系是传值与实在参数之间传递

20、关系是传值仅视作输入参数,它有入口值,而无仅视作输入参数,它有入口值,而无出口值,故不能表示计算的结果出口值,故不能表示计算的结果值形参作为子程序的局部量,当值形参作为子程序的局部量,当控制返回程序后,值形参的存控制返回程序后,值形参的存储单元释放。储单元释放。实参和值形参之间数据传递是单实参和值形参之间数据传递是单向的,只能由实参传送给形参,向的,只能由实参传送给形参,相当赋值运算。相当赋值运算。Procedure show(var a:integer)对应的实在参数必须为变量对应的实在参数必须为变量与实在参数之间传递关系是传地址与实在参数之间传递关系是传地址既可视作输入参数,又可视作输出既

21、可视作输入参数,又可视作输出参数,它可有入口值,也可无入口参数,它可有入口值,也可无入口值,但一般应有出口值,以表示调值,但一般应有出口值,以表示调用过程的返回结果用过程的返回结果变量形参与对应的实参的类型必须完全相变量形参与对应的实参的类型必须完全相同。同。对变量形参,运行时不另外开辟存储单元,对变量形参,运行时不另外开辟存储单元,而是与对应的实参使用相同的存储单元。而是与对应的实参使用相同的存储单元。也就是说,调用子程序时,是将实参的地也就是说,调用子程序时,是将实参的地址传送给对应的变量形参。当控制返回到址传送给对应的变量形参。当控制返回到调用程序后,变量形参的存储单元不释放,调用程序后

22、,变量形参的存储单元不释放,但变量形参本身无定义,即不得再使用。但变量形参本身无定义,即不得再使用。一般在函数中使用值形参,而在过程中才使用变量形参,但也有例外。一般在函数中使用值形参,而在过程中才使用变量形参,但也有例外。第16页,此课件共25页哦写出下列两个程序的运行结果。写出下列两个程序的运行结果。programex1;programex2;vara,b:integer;vara,b:integer;procedure swap(x,y:integer);procedure swap(Var x,y:integer);vart:integer;vart:integer;beginbegi

23、nt:=x;x:=y;y:=t;t:=x;x:=y;y:=t;end;end;beginbegina:=1;b:=2;a:=1;b:=2;writeln(a:3,b:3);writeln(a:3,b:3);swap(a,b);swap(a,b);writeln(a:3,b:3);writeln(a:3,b:3);end.end.分析:这两个程序唯一的区别是ex1中将x,y作为值形参,而ex2中将x,y作为变量形参,因此在ex2中对x,y的修改实际上是对调用该过程时与它们对应的变量a,b的修改,故最后,a,b的值为2,1。而ex1中调用swap过程时,只是将a,b的值传递给x,y,之后在过程中的

24、操作与a,b无关。ex1的运行结果为:ex2的运行结果为:12121221第17页,此课件共25页哦全局变量和局部变量全局变量和局部变量局部变量:局部变量:凡是在子程序内部作用的变量子程序内部作用的变量,应该在本子程序内加以说明。这种在子程序内部说明的变量称为局部变量局部变量。形式参数形式参数也只是在该子程序中有效,因此也属于局部变量。一个变量的作用域是指在程序中能对此变量进行存取的程序范围。因此,局部变量的作用域就是其所在的子程序局部变量的作用域就是其所在的子程序。实际上,局部变量只是当其所在的子程序被调用时才具有确定的存储单元,当控制从子程序返回到调用程序后,局部变量的存储单元就被释放,从

25、而变得无定义。全局变量:全局变量:是指在主程序的说明部分中说明的量。全局变量的作用域分两种情况:当全局变量和局部量不同名时,其作用域是整个程序范围(自定义起直到主程序结束)。当全局变量和局部量同名时,全局变量的作用域不包含局部量的作用域。在子程序的执行部分使用的是与全局变量同名的局部变量。在子程序的执行部分使用的是与全局变量同名的局部变量。在子程序的执行部分使用的是与全局变量同名的局部变量。在子程序的执行部分使用的是与全局变量同名的局部变量。第18页,此课件共25页哦求程序输出的结果varx,y:integer;procedurea;varx:integer;beginx:=2;writeln

26、(#,x,#);writeln(#,y,#);end;ofabeginmainprogramx:=1;y:=2;writeln(*,x,*,y);a;writeln(*,x,*,y);end.分析:程序中x,y是全局变量,但在过程a中也有变量x,故全程变量x的作用域为除过程a外的任何地方。而y的作用域包含了子程序a,即整个程序。运行结果如下:*1*2#2#2#*1*2第19页,此课件共25页哦求程序输出的结果programex(input,output);varx,y,z:integer;procedures(x:integer;vary:integer);varz:integerbeginx

27、:=5;y:=6;z:=7;end;beginx:=1;y:=2;z:=3;s(x,y);writeln(x,y,z);end.第20页,此课件共25页哦求程序输出的结果programrange(input,output);varx,y:integer;procedurep1;varx,z:integer;beginx:=10;y:=y+1;z:=10;writeln(x,y,z);end;beginx:=1;y:=1;writeln(x,y);p1;writeln(x,y,z);end.输出结果:111021012(error)第21页,此课件共25页哦递归调用直接递归直接递归子程序内引用子

28、程序本身。例如按递归定义形式写出fac(n)函数的说明如下:functionfac(n:integer):integer;beginifn=0thenfac:=1elsefac:=n*fac(n-1);end;fac第22页,此课件共25页哦例:骨牌铺法骨牌铺法有1*n的一个长方形,用一个1*1、1*2和1*3的骨牌铺满方格。例如n=3时为1*3的方格。此时用1*1、1*2和1*3的骨牌铺满方格,共有四种铺法。图列出了四种铺法。输入n(0n30),输出铺法总数。题解题解varn:integer;格子数functionf(i:integer):longint;输入格子数,计算和返回铺法总数beg

29、inifiin1.2递归边界thenf:=ielseifi=3thenf:=4elsef:=f(i-1)+f(i-2)+f(i-3);递归end;fbeginreadln(n);输入格子数writeln(f(n);计算和返回1*n的长方形的铺法总数end.main“铺砖问题”有推广价值。例如某人走n级的楼梯,每步可以走1级、2级或3级,走完n级楼梯共有多少走法。这个问题的数学意义和解法与“铺砖问题”相同。第23页,此课件共25页哦函数的递归调用varn:integer;functioncount(n:integer):integer;beginifn=1thencount:=0elseifnm

30、od2=0thencount:=count(ndiv2)+2elsecount:=count(n*3+1)+2;end;beginreadln(n);writeln(count(n);end.输入:20第24页,此课件共25页哦读程序写结果 var a,b,c,d:integer;procedure p(a:integer;var b:integer);var c:integer;begin a:=a+1;b:=b+1;c:=2;d:=d+1;writeln(m,a,b,c,d);if a3 then p(a,b);writeln(n,a,b,c,d)end;begin a:=1;b:=1;c:=1;d:=1;writeln(x,a,b,c,d);p(a,b);writeln(y,a,b,c,d);end.X1111M2222M3323N3323N2323y1313第25页,此课件共25页哦

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 资格考试

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁