第十一讲(上午) 子程序之函数_第1页
第十一讲(上午) 子程序之函数_第2页
第十一讲(上午) 子程序之函数_第3页
第十一讲(上午) 子程序之函数_第4页
第十一讲(上午) 子程序之函数_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、2022-3-292007年马鞍山信息学竞赛夏令营1授课老师:成功学校 谷晓华老师更多的资源请关注2022-3-292007年马鞍山信息学竞赛夏令营2本次课程的主要内容本次课程的主要内容v子程序的概念v函数的定义和运用;v重点:熟练掌握函数在程序设计中的使用,进一步了解子程序的概念和结构化程序设计的思想。2022-3-292007年马鞍山信息学竞赛夏令营3v在前面的学习中,我们曾经学习了程序设计中的三种基本控制结构(顺序、分支、循环顺序、分支、循环)。用它们可以组成任何程序。但在应用中,还经常用到子程序结构。v通常,在程序设计中,我们会发现一些程序段在程序的不同地方反复出现,此时可以将这些程序

2、段作为相对独立的整体,用一个标识符给它起一个名字,凡是程序中出现该程序段的地方,只要简单地写上其标识符即可。这样的程序段,我们称之为子程序。v子程序的运用充分体现了结构化的程序设计的两个基本要点v&自顶向下,逐步求精的设计方法v&程序的模块化v子程序的使用不仅缩短了程序,节省了内存空间及减少了程序的编译时间,而且有利于结构化程序设计。因为一个复杂的问题总可将其分解成若干个子问题来解决,如果子问题依然很复杂,还可以将它继续分解,直到每个子问题都是一个具有独立任务的模块。这样编制的程序结构清晰,逻辑关系明确,无论是编写、阅读、调试还是修改,都会带来极大的好处。v在一个程序中可以只有

3、主程序而没有子程序(本章以前都是如此),但不能没有主程序,也就是说不能单独执行子程序。 2022-3-292007年马鞍山信息学竞赛夏令营4子程序的示意图子程序的示意图ProgramBegin.调用子程序一.调用子程序二.End.子程序一Begin.End;子程序二Begin.End;每个子程序都每个子程序都有独立的功能我们有独立的功能我们通过参数的传递来通过参数的传递来实现实现, ,子程序也是子程序也是先定义在使用先定义在使用2022-3-292007年马鞍山信息学竞赛夏令营5函数相关概念vpascal中子程序有两种形式:函数和过程。 v在此之前,我们曾经介绍并使用了pascal提供的各种标

4、准函数,如ABS,SUCC等等,我们通过参数和函数名来调用它们v比如 X:=SQRT(1000);一般来说函数都会返回一个处理过后一般来说函数都会返回一个处理过后的值的值)v这些函数为我们编写程序提供了很大的方便。但这些函数只是常用的基本函数,编程时经常需要自定义一些函数。v在pascal中,函数也遵循先规则,在程序中,。函数的结构主程序的结构很相似。2022-3-292007年马鞍山信息学竞赛夏令营6函数定义函数定义1:自定义函数的一般格式为: function 函数名(形式参数表): 类型; 函数首部 局部变量说明部分; begin 语句系列; 函数体 end;在此函数体中最终要将结果赋予

5、函数名在此函数体中最终要将结果赋予函数名说明: 函数由两部分组成。函数首部以关键字function开头。函数名是用户自定义的标识符。函数的类型也就是函数值的类型,所求得的函数值通过函数名传回调用它的程序。可见,。形式参数简称形参,形参即函数的自变量。自变量的初值来源于函数调用。在函数中,形参一般格式如下:变量名表1:类型标识符1;变量名表2:类型标识符2;;变量名表n:类型标识符n可见形参表相当于变量说明,对函数自变量进行说明,但应特别注意:此处只能使用类型标识符,而不能直接使用类型。此处只能使用类型标识符,而不能直接使用类型。2022-3-292007年马鞍山信息学竞赛夏令营7functio

6、n 函数名(形式参数表): 类型; 函数首部 局部变量说明部分; begin 语句系列; 函数体 end;在此函数体中最终要将结果赋予函数名在此函数体中最终要将结果赋予函数名说明说明: 当缺省形参表(当然要同时省去一对括号)时,称为无参函数。函数体与程序体基本相似,由说明部分和执行部分组成。函数体中的说明部分用来对本函数使用的标号、常量、类型、变量、子程序加以说明,这些量只在本函数内有效。函数体的执行部分由begin开头,end结束,中间有若干用分号隔开的语句,只是end后应跟分号,不能像程序那样用句号“.”。在函数体的执行部分,至少应该给函数名赋一次值,以使在函数执行结束后把函数值带回调用程

7、序。2022-3-292007年马鞍山信息学竞赛夏令营8(二)函数的调用(二)函数的调用v我们可以在任何与函数值类型兼容的表达式中调用函数,或者说,函数调用只能出现在允许表达式出现的地方,或作为表达式的一个因子。v函数调用方式与标准函数的调用方式相同。函数调用方式与标准函数的调用方式相同。 函数调用的一般格式:函数调用的一般格式:函数名函数名或或函数名(实在参数表)函数名(实在参数表)说明:v 实在参数简称实参。实参的个数必须与函数说明中形参的个数一致,实参的类型与形参的类型应当一一对应。调用函数时,一般的,实参必须有确定的值。函数调用的步骤为:计算实参的值,“赋给”对应的形参,然后通过函数运

8、算最终返回一个值到主程序中;2022-3-292007年马鞍山信息学竞赛夏令营9举例说明比如:我们定义了一个取两个数最大值的函数Function MAX_NUM(I,j:integer):integer;I,J称为形参BeginIf ij then max_num:=I else max_max:=j;End;调用时只需要在主程序中写 MAX_NUM(A,B);A,B我们称为实参将A,B运算后的值,交给形式参数I,J,然后将运算的结果代回到主函数过程中;v自定义函数只是主程序的说明部分,若主程序中没有调用函数,则系统不会执行函数子程序。当主程序调用一次函数时,则将实在参数的值传给函数的形式参数

9、,控制转向函数子程序去执行,子程序执行完毕后自动返回调用处。 2022-3-292007年马鞍山信息学竞赛夏令营10例题解析求任意输入的五个自然数的最大公约数。解:算法分析:算法分析:自定义一个专门求两自然数的最大公约数的函数GCD; 调用自定义函数,第一次求前两个数的最大公约数;从第二次开始,用每次求得的最大公约数与下一个数再求两个数最大公约数,直到最后。本题共四次“求两个数的最大公约数”, 设输入的五个自然数分别是a1,a2,a3,a4,a5,采用如下步骤:求a1, a2两个数的最大公约数 存入a1;求a1, a3两个数的最大公约数 存入a1;求a1, a4两个数的最大公约数 存入a1;求

10、a1, a5两个数的最大公约数 存入a1; 输出 a1,此时的a1已是五个数的最大公约数 2022-3-292007年马鞍山信息学竞赛夏令营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 yend; GCD:=y 将运算的结果赋予函数名将运算的结果赋予函数名end; Begin 主程序主程序 Write

11、(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); readlnEnd.2022-3-292007年马鞍山信息学竞赛夏令营12实例分析二例例2 求正整数A和B之间的完全数(AB).分析:所谓完全数是指它的小于该数本身的因子之和等于它本身,如6123,6即是一个完全数。因此我们可定义一个布尔型函数p

12、erfect(x),若x是完全数,其值为TURE,否则为FALSE。整个程序算法如下:1 for i:=A to B do2 if perfect(i) then writeln(i);2022-3-292007年马鞍山信息学竞赛夏令营13vprogram 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是否是完全数per

13、fect:=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.2022-3-292007年马鞍山信息学竞赛夏令营14自定义函数的缺陷v自定义函数通常被设计成求一个函数值,一个函数只能得到一个运算结果。若要设计成能得到若干个运算结果(比如交换两个数的值),或完成一系列处理,就需要自定义“

14、过程”来实现。 2022-3-292007年马鞍山信息学竞赛夏令营15思考一求输入的三个数字(0=N=10)的阶乘之和比如输入3 5 8,则输出3!+5!+8!的值提示:1:阶乘的运算的结果比较大,很容易超过INTEGER范围2:我们可以定义一个函数FUNCTION JIECHENG(I:INTEGER):INT64来实现阶乘的运算2022-3-292007年马鞍山信息学竞赛夏令营16思考二思考二v如果一个自然数除了1和本身,还有别的数能够整除它, 这样的自然数就是合数。例如15,除了1和15,还有3和5能够整除,所以15是合数。14,15,16是三个连续的合数,试求连续五个最小的合数。v要求定义一个函数求数字是不是合数2022-3-292007年马鞍山信息学竞赛夏

温馨提示

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

评论

0/150

提交评论