辽师大版信息技术九年《函数与过程》ppt课件](共29张PPT)_第1页
辽师大版信息技术九年《函数与过程》ppt课件](共29张PPT)_第2页
辽师大版信息技术九年《函数与过程》ppt课件](共29张PPT)_第3页
辽师大版信息技术九年《函数与过程》ppt课件](共29张PPT)_第4页
辽师大版信息技术九年《函数与过程》ppt课件](共29张PPT)_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、函数和过程函数和过程1、计算机程序设计和问题求解的基本思想是将一个、计算机程序设计和问题求解的基本思想是将一个复杂问题分解成更小、更简单的容易处理的子问题。复杂问题分解成更小、更简单的容易处理的子问题。为此提出了结构化程序设计思想为此提出了结构化程序设计思想 。 子程序是实现结构化程序设计的主要手段之一。子程序是实现结构化程序设计的主要手段之一。2、子程序:是指本身不能单独执行,需要其他程序调、子程序:是指本身不能单独执行,需要其他程序调用才能执行的程序。如用才能执行的程序。如Pascal提供的标准函数和过程等。提供的标准函数和过程等。与子程序相对应的是我们所设计的程序称为主程序。与子程序相对

2、应的是我们所设计的程序称为主程序。程序是从主程序开始执行的,通过主程序去调用子程序。程序是从主程序开始执行的,通过主程序去调用子程序。一个完整的一个完整的Pascal程序可以包含一个主程序和若干个子程序可以包含一个主程序和若干个子程序。程序。子程序常见的两种形式:函数和过程子程序常见的两种形式:函数和过程一、函数一、函数(把完成某种计算的子程序定义为函数,每调用把完成某种计算的子程序定义为函数,每调用 一次一次产生一个结果产生一个结果)2、自定义函数:、自定义函数:只能在定义它的程序中被调用。只能在定义它的程序中被调用。一般定义形式:一般定义形式:function 函数名函数名(形式参数表形式

3、参数表):类型标识符;:类型标识符; 局部变量说明部分局部变量说明部分 begin 语句语句; 语句语句 end;1、标准函数:、标准函数:直接输入函数名和参数进行调用即可。可用在直接输入函数名和参数进行调用即可。可用在不同的程序中。可随时进行调用。不同的程序中。可随时进行调用。函数首部函数首部函数体函数体例例1:设计一个求累加和的函数。输入一个正整数,然后:设计一个求累加和的函数。输入一个正整数,然后计算从计算从1到此数的累加和。到此数的累加和。Function sum(n:integer):integer;Var s,I:integer;Begin s:=0; for I:=1 to n

4、do s:=s+I; sum:=s; end;函数首部和函数体的说明见教材函数首部和函数体的说明见教材P76和和P77例如:要调用上面的函数,主程序如下:例如:要调用上面的函数,主程序如下:Var x:integer;begin readln(x); write(sum(x);End.3、函数调用、函数调用函数名(实在参数表)函数名(实在参数表)详细说明见教材详细说明见教材P77P77下和下和P78P78上上例例2:计算如图示多边形的面积:计算如图示多边形的面积b1b2b3b4b5b6b7分析:分析: 求五边形的面积可以变成求求五边形的面积可以变成求3个三角形面积个三角形面积之和。在这个程序中

5、要计算三次三角形面积,为之和。在这个程序中要计算三次三角形面积,为程序简单起见,可将计算三角形面积定义为函数,程序简单起见,可将计算三角形面积定义为函数,然后在主程序中调用然后在主程序中调用3次,并相加得到五边形的次,并相加得到五边形的面积。面积。 三角形的面积可用海伦公式计算。三角形的面积可用海伦公式计算。Function area(a,b,c:real):real;Var p:real;Begin p:=(a+b+c)/2; area:=sqrt(p*(p-a)*(p-b)*(p-c);End;Var b1,b2,b3,b4,b5,b6,b7,s:real;Begin readln(b1,

6、b2,b3,b4,b5,b6,b7); s:=area(b1,b5,b6)+area(b2,b6,b7)+area(b3,b4,b7);Writeln(s=,s:8:2);End.二、过程二、过程2、自定义过程一般定义形式:课本、自定义过程一般定义形式:课本P81procedure 过程标识符过程标识符(形式参数表)(形式参数表); 变量说明部分变量说明部分 begin 语句部分语句部分 end;过程首部过程首部过程体过程体方括号内为方括号内为可选部分可选部分在过程首部的过程标识符之后若无可选部分,在过程首部的过程标识符之后若无可选部分,称为无参过程;否则称为带参过程。称为无参过程;否则称为带

7、参过程。过程与程序有相同的块结构形式。过程与程序有相同的块结构形式。在过程说明中的说明部分可以对过程内使用的常量、变量、行号、类型、过程在过程说明中的说明部分可以对过程内使用的常量、变量、行号、类型、过程和函数进行说明,但它们的作用范围(辖域)只能在过程内,离开过程后,其和函数进行说明,但它们的作用范围(辖域)只能在过程内,离开过程后,其所占的内存释放。另外,过程可以通过(形式参数表)与主程序交换信息,即所占的内存释放。另外,过程可以通过(形式参数表)与主程序交换信息,即调用时可以使用不同数据替换这些参数。调用时可以使用不同数据替换这些参数。1、标准过程:、标准过程:如读语句如读语句read(

8、 );写语句写语句write( )等等procedure fiveline; var i:integer; begin for i:=1 to 5 do writeln end;procedure nlines(n:integer); var i:integer; begin for i:=1 to n do writeln end;无参过程,输出无参过程,输出5 5个空行个空行带参过程,输出带参过程,输出n n个空行个空行过程调用过程调用过程名过程名 (实在参数表)(实在参数表) 实在参数若有,是用逗号隔开的变量或表达式,他们必须实在参数若有,是用逗号隔开的变量或表达式,他们必须与形式参数顺

9、序一一对应,个数相同,类型一致,而实参的名与形式参数顺序一一对应,个数相同,类型一致,而实参的名字与形参取名无关字与形参取名无关如:如:procedure lowterm(var n,d:integer);lowterm(n,d);lowterm(n+d);lowterm(n,n/d);实参只有一个实参只有一个第二个实参是实型,而对应的形参是整型第二个实参是实型,而对应的形参是整型过程调用是一个独立的语句,当执行到该语句时,则将实参中的信息传送过程调用是一个独立的语句,当执行到该语句时,则将实参中的信息传送给相应的形参(若有的话),然后转去执行过程说明中的语句,执行完毕给相应的形参(若有的话)

10、,然后转去执行过程说明中的语句,执行完毕后返回到调用位置后返回到调用位置例例3:定义一个打印由:定义一个打印由“”组成的三角形的过程,然组成的三角形的过程,然后,在主程序中输入行数,并调用该过程输出三角形。后,在主程序中输入行数,并调用该过程输出三角形。Procedure sjx(x:integer);Var I,j:integer;Begin for I:=1 to x do begin for j:=1 to I do write(); writeln; end;End;Var a:integer;Begin read(a); sjx(a);End.函数与过程的区别(课本函数与过程的区别(

11、课本P83P84)1、保留字不同:、保留字不同:function与与procedure2、过程说明允许没有形式参数表、过程说明允许没有形式参数表3、在函数说明的首部必须指出函数的数据类型、在函数说明的首部必须指出函数的数据类型4、在函数体中,必须有对函数名进行赋值的语句、在函数体中,必须有对函数名进行赋值的语句5、过程本身可以单独作为程序语句、过程本身可以单独作为程序语句练习练习1:分别用函数和过程计算:分别用函数和过程计算S=1/7!+1/9!+1/13!Procedure f(n:integer;var fac:real); var i:integer;k:longint; begin k

12、:=1; for i:=2 to n do k:=k*i; fac:=1/k end;Var s1,s2,s3:real;begin f(7,s1); f(9,s2); f(13,s3); s1:=s1+s2+s3; writeln(s1)end.Function f(n:integer):real; var i:integer;k:longint; begin k:=1; for i:=2 to n do k:=k*i; f:=1/k end;Var s:real; begin s:=f(7)+f(9)+f(13); writeln(s) end.三、参数传递三、参数传递形参有形参有4种:值

13、参数、变量参数、过程参数、函数参数种:值参数、变量参数、过程参数、函数参数形式参数表中前无形式参数表中前无var,后有类型的参数后有类型的参数 形式参数表中前有形式参数表中前有var后有类型的参数后有类型的参数 形参形参实参实参值参值参类型赋值相容的表达式类型赋值相容的表达式变量参数变量参数同一类型的变量同一类型的变量例:例:var x:real;i:integer;procedure change(y:real); begin end;change(sin(x)+0.5);change(1.0);change(x);change(i);若将过程首部改为:若将过程首部改为:procedure(

14、var y:real);只有只有change(x)正确正确形参是值参:形参是值参:过程或函数被调用时,系统为每个值参开辟临时过程或函数被调用时,系统为每个值参开辟临时存储单元,然后将对应实参的值赋给值参。由于值参与实参是存储单元,然后将对应实参的值赋给值参。由于值参与实参是不同的存储单元,所以过程体中对值参的改变不会影响实参,不同的存储单元,所以过程体中对值参的改变不会影响实参,数据的传送是单向的,当流程返回到调用程序时,值参所占的数据的传送是单向的,当流程返回到调用程序时,值参所占的存储单元被释放。存储单元被释放。形参是变量参数:形参是变量参数:进入过程体前,系统将实参的存储地址传送进入过程

15、体前,系统将实参的存储地址传送给形参,过程体执行期间,对变量参数的操作就是对相应实参给形参,过程体执行期间,对变量参数的操作就是对相应实参的操作,从而达到调用函数与被调函数之间的操作,从而达到调用函数与被调函数之间互相传送数据的目互相传送数据的目的。的。参考课本参考课本P84P86例例Program transmit; var a,b:integer; procedure p(var x:integer;y:integer); begin x:=x+5; y:=y+5; writeln(x=,x,y=,y) end; begin a:=3;b:=3; p(a,b); p(a,b); write

16、ln(a=,a,b=,b) end.x=8 y=8x=13 y=8a=13 b=3阅读课本例阅读课本例69P86四、标识符的作用域四、标识符的作用域在主程序中说明的常量、类型、变量、过程名等标识符,它们在主程序中说明的常量、类型、变量、过程名等标识符,它们的作用域是整个程序,故称为全程量。而在过程或函数中说明的作用域是整个程序,故称为全程量。而在过程或函数中说明的常量、类型、变量、参数以及嵌套在其内的过程名等标识符,的常量、类型、变量、参数以及嵌套在其内的过程名等标识符,作用域是说明它的过程或函数分程序之内,在之外不能使用,作用域是说明它的过程或函数分程序之内,在之外不能使用,这些标识符成为局

17、部量。这些标识符成为局部量。如果在过程或函数中局部量与全程量(或非局部量)同名,则如果在过程或函数中局部量与全程量(或非局部量)同名,则阻碍了过程或函数对同名全程量(或非局部量)的访问。阻碍了过程或函数对同名全程量(或非局部量)的访问。Program example; var x,y:integer; procedure change; var x:integer; begin x:=2;y:=2; writeln(x,y) end; begin x:=1;y:=1; writeln(x,y); change; writeln(x,y) end.全局量与局部量分析全局量与局部量分析结果结果11

18、2212五、嵌套五、嵌套一个函数或过程可能要求调用另一个函数或过程,一个函数或过程可能要求调用另一个函数或过程,我们称这种调用为函数与过程的嵌套我们称这种调用为函数与过程的嵌套Program nest; procedure outer1; procedure inner(z:real); begin . end;inner begin end;outer1 procedure outer2; begin end; begin主程序主程序 end.调用原则(函数同过程):调用原则(函数同过程):1、外层的主程序或过程可以调用相邻、外层的主程序或过程可以调用相邻内层的过程,但不允许隔层调用内层的过

19、程,但不允许隔层调用2、内层可以调用外层过程、内层可以调用外层过程3、同一层的过程可以相互调用,但要、同一层的过程可以相互调用,但要遵守遵守“向前说明向前说明”的原则的原则nestouter1outer2inner一、教材一、教材P94P96的应用实例要看会。的应用实例要看会。二、练习二、练习1、设计一个过程,计算圆的面积。在主程序中输入一个半径、设计一个过程,计算圆的面积。在主程序中输入一个半径值,然后调用该过程,并输出圆的面积。值,然后调用该过程,并输出圆的面积。2、读入正整数、读入正整数n,利用函数求,利用函数求2到到n之间所有的素数。之间所有的素数。3、编写一个函数,根据参数指定的、编

20、写一个函数,根据参数指定的n,计算出函数值,计算出函数值x,计算,计算公式如下:公式如下:并在主程序中调用此函数,计算并在主程序中调用此函数,计算X函数值(保留六位小数)函数值(保留六位小数)4、在程序中定义一函数、在程序中定义一函数digit(n,k),它能分离出整数它能分离出整数n从右边从右边数第数第K个数字,并在主程序中调用此函数。如:个数字,并在主程序中调用此函数。如:digit(31859,3)=8, digit(2076,5)=0参考答案:参考答案: 1、设计一个过程,计算圆的面积。在主程序中输入、设计一个过程,计算圆的面积。在主程序中输入一个半径值,然后调用该过程,并输出圆的面积

21、。一个半径值,然后调用该过程,并输出圆的面积。const pi=3.1415926;var r,s:real;procedure yuan(x:real;var y:real); begin y:=pi*x*x; end;begin readln(r); yuan(r,s); writeln(s=,s:6:2);end.2、读入正整数、读入正整数n,利用函数求,利用函数求2到到n之间所有的素数。之间所有的素数。var n,i:integer;function sushu(x:integer):boolean;var j:integer; b:boolean;begin j:=2; while

22、x mod j0 do j:=j+1; if j=x then sushu:=true else sushu:=false;end;begin readln(n); for i:=2 to n do if sushu(i) then write(i:5);end.3、编写一个函数,根据参数指定的、编写一个函数,根据参数指定的n,计算出函数值,计算出函数值x,var n:integer;function f(m:integer):real;var i:integer; t:real;begin i:=1; while i1function fac(n:integer):integer; begi

23、n if n=0 then fac:=1 else fac:=n*fac(n-1); end;fac这个函数说明的最大优点是这个函数说明的最大优点是fac(n)的解的的解的表达简明,程序结构紧凑。这种从问题定表达简明,程序结构紧凑。这种从问题定义出发构造程序解的方法最便于人们阅读义出发构造程序解的方法最便于人们阅读和理解。但问题是,递归子程序的执行过和理解。但问题是,递归子程序的执行过程比较复杂,子程序的状态变化比较难掌程比较复杂,子程序的状态变化比较难掌握。以握。以fac(3)为例,它的执行流程如图为例,它的执行流程如图 一般来说,递归子程序在调用本身前应有条件语句控制何时继一般来说,递归子程序在调用本身前应有条件语句控制何时继续递归,何时结束递归,这个条件语句就是递归边界。例如续递归,何时结束递归,这个条件语句就是递归边界。例如facfac函数体中的函数体中的“if n=0 then facif n=0 then fac:=1”:=1”。例:例:(hanoi tower)有三个圆柱有三个圆柱A,B,C。n个圆盘按照由小至个圆盘按照由小至大的顺序摞在大的顺序摞在A柱上。如何以最少次数将圆盘从柱上。如何以最少次数将圆盘从A柱移至柱移至C柱。柱。输出方案,移动必须满足三个条件:输出方案,移动必须满足三个条件:1、能利用、能利用A,

温馨提示

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

评论

0/150

提交评论