Pascal子程序之函数.pps

上传人:za****8 文档编号:15668944 上传时间:2020-08-28 格式:PPS 页数:16 大小:184KB
返回 下载 相关 举报
Pascal子程序之函数.pps_第1页
第1页 / 共16页
Pascal子程序之函数.pps_第2页
第2页 / 共16页
Pascal子程序之函数.pps_第3页
第3页 / 共16页
点击查看更多>>
资源描述
第九讲 子程序之函数,程序设计基础班 A班,2020/8/28,2007-2008 下学期讲稿,2,本次课程的主要内容,子程序的概念 函数的定义和运用; 重点:熟练掌握函数在程序设计中的使用,进一步了解子程序的概念和结构化程序设计的思想。,2020/8/28,2007-2008 下学期讲稿,3,引言,在前面的学习中,我们曾经学习了程序设计中的三种基本控制结构(顺序、分支、循环)。用它们可以组成任何程序。但在应用中,还经常用到子程序结构。 通常,在程序设计中,我们会发现一些程序段在程序的不同地方反复出现,此时可以将这些程序段作为相对独立的整体,用一个标识符给它起一个名字,凡是程序中出现该程序段的地方,只要简单地写上其标识符即可。这样的程序段,我们称之为子程序。 子程序的运用充分体现了结构化的程序设计的两个基本要点 ,子程序二 Begin . . . End;,每个子程序都有独立的功能我们通过参数的传递来实现,子程序也是先定义在使用,2020/8/28,2007-2008 下学期讲稿,5,函数相关概念,pascal中子程序有两种形式:函数和过程。 在此之前,我们曾经介绍并使用了pascal提供的各种标准函数,如ABS,SUCC等等,我们通过参数和函数名来调用它们 比如 X:=SQRT(1000);一般来说函数都会返回一个处理过后的值) 这些函数为我们编写程序提供了很大的方便。但这些函数只是常用的基本函数,编程时经常需要自定义一些函数。 在pascal中,函数也遵循先说明后使用的规则,在程序中,函数的说明放在调用该函数的程序(主程序或其它子程序)的说明部分。函数的结构主程序的结构很相似。,2020/8/28,2007-2008 下学期讲稿,6,函数定义,1:自定义函数的一般格式为: function 函数名(形式参数表): 类型; 函数首部 局部变量说明部分; begin 语句系列; 函数体 end;在此函数体中最终要将结果赋予函数名 说明: 函数由首部与函数体两部分组成。函数首部以关键字function开头。函数名是用户自定义的标识符。函数的类型也就是函数值的类型,所求得的函数值通过函数名传回调用它的程序。可见,函数的作用一般是为了求得一个值。形式参数简称形参,形参即函数的自变量。自变量的初值来源于函数调用。在函数中,形参一般格式如下:变量名表1:类型标识符1;变量名表2:类型标识符2;;变量名表n:类型标识符n可见形参表相当于变量说明,对函数自变量进行说明,但应特别注意:此处只能使用类型标识符,而不能直接使用类型。,2020/8/28,2007-2008 下学期讲稿,7,function 函数名(形式参数表): 类型; 函数首部 局部变量说明部分; begin 语句系列; 函数体 end;在此函数体中最终要将结果赋予函数名 说明: 当缺省形参表(当然要同时省去一对括号)时,称为无参函数。 函数体与程序体基本相似,由说明部分和执行部分组成。 函数体中的说明部分用来对本函数使用的标号、常量、类型、变量、子程序加以说明,这些量只在本函数内有效。 函数体的执行部分由begin开头,end结束,中间有若干用分号隔开的语句,只是end后应跟分号,不能像程序那样用句号“.”。 在函数体的执行部分,至少应该给函数名赋一次值,以使在函数执行结束后把函数值带回调用程序。,2020/8/28,2007-2008 下学期讲稿,8,(二)函数的调用,我们可以在任何与函数值类型兼容的表达式中调用函数,或者说,函数调用只能出现在允许表达式出现的地方,或作为表达式的一个因子。 函数调用方式与标准函数的调用方式相同。 函数调用的一般格式:函数名或函数名(实在参数表)说明: 实在参数简称实参。实参的个数必须与函数说明中形参的个数一致,实参的类型与形参的类型应当一一对应。调用函数时,一般的,实参必须有确定的值。函数调用的步骤为:计算实参的值,“赋给”对应的形参,然后通过函数运算最终返回一个值到主程序中;,2020/8/28,2007-2008 下学期讲稿,9,举例说明,比如:我们定义了一个取两个数最大值的函数 Function MAX_NUM(I,j:integer):integer;I,J称为形参 Begin If ij then max_num:=I else max_max:=j; End; 调用时只需要在主程序中写 MAX_NUM(A,B);A,B我们称为实参 将A,B运算后的值,交给形式参数I,J,然后将运算的结果代回到主函数过程中; 自定义函数只是主程序的说明部分,若主程序中没有调用函数,则系统不会执行函数子程序。当主程序调用一次函数时,则将实在参数的值传给函数的形式参数,控制转向函数子程序去执行,子程序执行完毕后自动返回调用处。,2020/8/28,2007-2008 下学期讲稿,10,例题解析,求任意输入的五个自然数的最大公约数。 解:算法分析: 自定义一个专门求两自然数的最大公约数的函数GCD; 调用自定义函数,第一次求前两个数的最大公约数;从第二次开始,用每次求得的最大公约数与下一个数再求两个数最大公约数,直到最后。本题共四次“求两个数的最大公约数”, 设输入的五个自然数分别是a1,a2,a3,a4,a5,采用如下步骤: 求a1, a2两个数的最大公约数 存入a1; 求a1, a3两个数的最大公约数 存入a1; 求a1, a4两个数的最大公约数 存入a1; 求a1, a5两个数的最大公约数 存入a1; 输出 a1,此时的a1已是五个数的最大公约数,2020/8/28,2007-2008 下学期讲稿,11,参考程序,Program Exam42; Var a1,a2,a3,a4,a5: integder; function GCD(x,y: integer): integer; 自定义函数 Var n:integer;局部变量 begin While x mod y 0 do begin n:=x; x:=y; y:=n mod y end; GCD:=y 将运算的结果赋予函数名 end; Begin 主程序 Write(input 5 Numper:); readln(a1,a2,a3,a4,a5); 输入五个数 Write(,a1,a2,a3,a4,a5,)=); a1:GCD(a1,a2); 调用函数GCD,a1,a2是实参 a1:GCD(a1,a3); a1:GCD(a1,a4); a1:GCD(a1,a5); Writeln(a1); readln End.,2020/8/28,2007-2008 下学期讲稿,12,实例分析二,例2 求正整数A和B之间的完全数(AB).分析:所谓完全数是指它的小于该数本身的因子之和等于它本身,如6123,6即是一个完全数。因此我们可定义一个布尔型函数perfect(x),若x是完全数,其值为TURE,否则为FALSE。整个程序算法如下:1 for i:=A to B do2 if perfect(i) then writeln(i);,2020/8/28,2007-2008 下学期讲稿,13,program ex7_1;var i,a,b : integer;function perfect(x:integer):boolean;var k,sum : integer;beginsum:=1; 累加x所有小于本身的因数 for k:=2 to x div 2 doif x mod k=0 then sum:=sum+k;判断x是否是完全数perfect:=x=sum; 将结果赋值给函数名end;end of perfectbegin主程序开始write(Input a,b:);readln(a,b);writeln(List of all perfect numbers:);for i:=a to b do 从a到b逐个判断,是完全数则打印出来 if perfect(i) then writeln(i);end.,2020/8/28,2007-2008 下学期讲稿,14,自定义函数的缺陷,自定义函数通常被设计成求一个函数值,一个函数只能得到一个运算结果。若要设计成能得到若干个运算结果(比如交换两个数的值),或完成一系列处理,就需要自定义“过程”来实现。,2020/8/28,2007-2008 下学期讲稿,15,思考一,求输入的三个数字(0=N=10)的阶乘之和 比如输入3 5 8,则输出3!+5!+8!的值 提示: 1:阶乘的运算的结果比较大,很容易超过INTEGER范围 2:我们可以定义一个函数 FUNCTION JIECHENG(I:INTEGER):INT64 来实现阶乘的运算,2020/8/28,2007-2008 下学期讲稿,16,思考二,如果一个自然数除了1和本身,还有别的数能够整除它, 这样的自然数就是合数。例如15,除了1和15,还有3和5能够整除,所以15是合数。14,15,16是三个连续的合数,试求连续五个最小的合数。 要求定义一个函数求数字是不是合数,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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