函数与过程201009

上传人:xzh****18 文档编号:236000696 上传时间:2022-01-06 格式:PPT 页数:25 大小:122KB
返回 下载 相关 举报
函数与过程201009_第1页
第1页 / 共25页
函数与过程201009_第2页
第2页 / 共25页
函数与过程201009_第3页
第3页 / 共25页
函数与过程201009_第4页
第4页 / 共25页
函数与过程201009_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《函数与过程201009》由会员分享,可在线阅读,更多相关《函数与过程201009(25页珍藏版)》请在金锄头文库上搜索。

1、函数与过程四会中学 徐琴 2010-09在结构化程序设计中,不但要求程序要采用顺序、分支和循环这几种基本结构,同时,在整个程序设计过程中,要求程序具有模块化,这样,子程序设计的显得非常有必要。 n1.细化算法的过程,可以将每一个子问题运用一段相对独立的小程序来解决;n2.一些具有相同或功能相似的程序段在程序中的不同位置反复出现,可以将这样的程序段做成一个整体,用一个标识符给它起一个名字,凡是需要这个程序段的地方只要简单地引用其标识符即可。n3.子程序包括过程和函数两种形式。 一个程序就由一个主程序和一些子程序(也叫模块)组成。这样一来主程序的功能就变成了组织功能,什么时候需要某一个功能就可以让

2、子程序去做,当然子程序也是你设计的,这样做的好处是为了便于编写和理解,特别是在大型的程序一般都由几百个子程序。主程序登录子程序计算子程序输出子程序一、函数和过程使用函数和过程有四个方面要清楚: 一是如何定义。二是在哪里定义(在哪里编写代码)。三是如何调用。四是如何向传递参数。一、标准过程和标准函数 由Pascal定义的过程和函数。如我们熟悉的read,write等为标准过程;ord,chr等为标准函数,程序员编程时直接引用就行了。一.函数与过程的关系和区别常用的标准函数:sqrt(x) , sqr(x) , abs(x) , exp(x)在程序设计中,怎样使用他们?不用定义,直接使用(pasc

3、al编译程序中集成了上述函数)。一.函数与过程的关系和区别有返回值,因此在程序设计中不能作为一个单独的语句来使用(只能成为表达式的一部分)y:=sqrt(x); /rightsqr(x); /errorread(a ,b ,c); /right过程 vs 函数区别:有且只有一个返回值(函数); 无返回值(过程);函数的定义格式Function 函数名():该函数返回值的类型例如: w:=upcase(ch); y:=sqrt(x);二、自定义过程和函数 由程序员在程序中定义后再使用。给某个语句序列组成的子程序赋于一个适当的名字。程序中凡是需要出现这个语句序列的地方,可以简单的写上子程序的名字。

4、这种完成一个操作的子程序称为过程。子程序的定义称为过程说明。 如果一个子程序执行后能够返回其结果值,那么它就可以用于表达式中,称这种子程序为函数,这种语句序列的定义称为函数说明。 一、过程使用过程有四个方面要清楚: 一是如何定义过程。二是在哪里定义(在哪里编写代码)。三是如何调用过程。四是如何向过程传递参数。三、函数和过程说明 Function 函数名(形式参数表): 函数类类型;说说明部分;begin语语句1;语语句2; 语语句n;函数名:=表达式 给该给该 函数赋赋返回值值end;Procedure 过过程名(形式 参数表); 说说明部分;begin语语句1;语语句2;语语句3;语语句n;

5、end;四、函数和过程的调用 1) 函数调用 函数在语法上相当于一个表达式,所以,调用时,函数不能独立成为一个语句;它只能出现在表达式可以出现的地方。如下形式:X:=函数名(实在参数表); X的类型与函数类型必须一致 如果函数类型是boolean,则还可以出现在条件语句中,充当条件表达式:if 函数名(实在参数表)then 2) 过程调用 过程在语法上相当于一个语句,在调用时,直接写下过程名即可: 过程名(实在参数表); 五、形参和实参 子程序调用(过程调用或函数调用)的执行顺序分为以下几步:实参和形参结合 执行子程序 返回调用 处继续执行 子程序说明的形式参数表对子程序体直接引用的变量进行说

6、明,详细指明这些参数的类别、数据类型要求和参数的个数。子程序被调用时必须为它的每个形参提供一个实参,按参数的位置顺序一一对应,每个实参必须满足对应形参的要求。 Turbo Pascal在处理数据传送时有两种方法:一种是传值,称为值参数;另一种是传地址,称为变量参数1值参数 例 计算|X|的函数function abs(x:real):real; var z:real;begin if x=0 then z:=x else z:=-x abs:=z;end; 2变量参数 在子程序执行过程中,对变量参数的操作,相当于对引用实参的操作。例 求出两个数中最大值的过程procedure largest(

7、a,b:integer;var c:integer ); a,b为值参数;c为变量参数begin if ab then c:=a else c:=b;end. 3无参过程 例 无参过程,例如模拟TAB键,在屏幕上跳8个空格位置的过程。procedure tab;var I:integer;begin For I:=1 to 8 do write( );End; 全程变量与局部变量n全程变量:主程序中说明部分说明的变量 它的作用域是整个程序.n局部变量:在过程或函数的说明部分说明的 变量,它的作用域是本过程或函数n小提示:n1.pascal语言的规则:先说明后使用n2.过程或函数中有形式参数也是

8、局部变量nVar x,y:integer;n procedure p( var x:integer; y:integer);n Beginn y:=x+y; x:= y mod 4;n write(x:6,y:6);n end; nBeginn x:=4; y:=5;n p(y,x); writeln(x:6,y:6);n p(x,x); writeln(x:6,y:6);n p(y,x); writeln(x:6,y:6);n readln;n end. 练习:四会中学 126页练一练函数的结果是一个具体的值, 在函数体中必须将所得到的运算结果赋给函数名;主程序通过调用函数得到函数的运算结果

9、。调用函数的一般格式为: 函数名 (实在参数表)调用函数时, 函数名后面圆括号内的参数必须有确定的值, 称为实在参数。调用时即把这些实际值传送给函数形参表中的相应形参变量。函数不是单独的语句, 只能作为运算赋值或出现在表达式中。 n例:编程找出由键盘任意输入五个整数中的最大整数。n解:设输入的五个整数为n1、n2、n3、n4、n5,为了便于处理,引入一个中间变量t1,按如下步骤处理:n令t1=n1;n将t1与n2比较,将两者中较大的数放入t1;n将t1与n3比较,将两者中较大的数放入t1;n将t1与n4比较,将两者中较大的数放入t1;n将t1与n5比较,将两者中较大的数放入t1;n经过以上5步

10、处理后,t1即为5个数中最大者。n从上面规划的步骤看来,从步骤到步骤需处理的目标是相同的,因此我们可以设计一段子程序Max(x1,x2),以找出x1和x2中最大的值并返回。 Var n1,n2,n3,n4,n5,t1 : integer;Function max(x1,x2 : integer) : integer;Begin If x1x2 then Max := x1 Else Max := x2;End;BeginReadln(n1,n2,n3,n4,n5);T1 := n1;T1 := Max(t1,n2);T1 := Max(t1,n3);T1 := Max(t1,n4);T1 :=

11、 Max(t1,n5);Writeln(Max number : ,t1);End.例4.2求任意输入的五个自然数的最大公约数。解:自定义一个专门求两自然数的最大公约数的函数GCD; 调用自定义函数,第一次求前两个数的最大公约数;从第二次开始,用每次求得的最大公约数与下一个数再求两个数最大公约数,直到最后。本题共四次“求两个数的最大公约数”, 设输入的五个自然数分别是a1,a2,a3,a4,a5,采用如下步骤:求a1, a2两个数的最大公约数 存入a1;求a1, a3两个数的最大公约数 存入a1;求a1, a4两个数的最大公约数 存入a1;求a1, a5两个数的最大公约数 存入a1; 输出 a

12、1,此时的a1已是五个数的最大公约数Var a1,a2,a3,a4,a5: integer;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:=yend;Begin readln(a1,a2,a3,a4,a5); Write(,a1,a2,a3,a4,a5,)=);a1:GCD(a1,a2); 调用函数GCD a1:GCD(a1,a3); a1:GCD(a1,a4); a1:GCD(a1,a5); Writeln(a1

13、); readln;End.思考与练习:1、 编程求出一整数N的所有质因数 。分析:可以求出N的所有的因数,然后判断每一个 因数是否为质因数。Var i,n: integer;function is_prime(m:integer):Boolean; var I:integer; Ok:Boolean; begin ok:=true; for I:=2 to trunc(sqrt(m) do if m mod I = 0 then begin ok:=false; break; end; is_prime:=ok end;begin write(n=);readln(n); for i:=2 to n do if n mod i = 0 then if is_prime(i) then write(i:5); writelnend.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号