NOIP初赛资料-过程和函数.ppt
《NOIP初赛资料-过程和函数.ppt》由会员分享,可在线阅读,更多相关《NOIP初赛资料-过程和函数.ppt(40页珍藏版)》请在三一办公上搜索。
1、过程与函数,过程和函数,程 序 的基本结构,顺序结构,选择结构,循环结构,过程和函数,说明:程序中可以只有主程序而没有子程序,但不能没有主程序,也就是说不能单独执行子程序。,程序设计的基本思想:,自顶向下、逐步求精,程序的模块化,标准函数有:,标准函数的调用,X:=abs(-10);Y:=sqrt(81);Z:=round(35.9);,abs(x)/sqrt(x)/round(x),例1-1:编程求12221002 的和,PROGRAM sum(input,output);VAR i:integer;s:longint;BEGIN,s:=0;,for i:=1 to 100 do,s:=s+
2、sqr(i);,writeln(s=,s);,END.,例1_2:编程求1!2!3!10!的和。,fac(i),一、函数的定义及调用,Function 函数名(形参表):函数类型;局部变量说明;begin 语句1;;函数名:=表达式;end;,函数首部,函数体,将函数值传递给函数名,函数的类型,在表达式中调用:函数名(实参),如:x=Abs(n)abs为函数名,n为实参,函数类型为integer or real,注意:自定义函数先定义后使用。,函数值通过函数名传送回调用程序。,例1-2 编写一个求n!的函数fac.,function fac(n:integer):longint;var k:i
3、nteger;t:longint;begin t:=1;for k:=2 to n do t:=t*k;fac:=t;end;endfac,函数说明,函数首部,局部变量说明,形式参数,函数执行部分,将函数值传递到函数名中,函数的结果类型,注意:,1、使用函数前应先说明。,3、形参就是函数的自变量,其初值来源于主程序的调用,只有在程序的执行过程中调用了函数,形参才能得到具体的值并参与运算,得到函数值。注意:形参表类似于变量说明,但只能使用类型标识符,且不能直接使用类型。形参可缺省。,4、函数的类型也就是函数值的类型,函数值将通过函数名传送回调用程序。,5、函数体内所用的类型、常量、变量等只在本函
4、数内有效,退出函数体后,分配的存储单元被释放。这些量与函数体外的同名变量无关。,6、在函数体中至少有一条将函数值传给函数名的赋值语句。,2、函数首部以保留字function开头,函数名由用户自定义的一个标识符,用来存放最终函数值。,begin S:=fac(3)+fac(5)+fac(7);Writeln(s=,s)End.,例7-1 编写一个求n!的函数fac.,function fac(n:integer):longint;var k:integer;t:longint;begin t:=1;for k:=2 to n do t:=t*k;fac:=t;end;endfac,函数说明,函数
5、首部,局部变量说明,形式参数,函数执行部分,将函数值传递到函数名中,Program ex1-2a(input,output);var s:longint;,主程序,函数调用出现在表达式中,若求3!+5!+7!的值,如何修改程序?,调用函数时注意:,1、自定义函数中的形参,不是实际存在的变量,故又称为虚拟变量,它们并不占用内存单元,只是在调用函数时,才临时开辟相应的内存单元,存放实在参数的值,如fac(3)中的3。它是在调用函数时的所用的自变量。形参实质上是实参的一个“替身”。在调用函数时,实参将值赋给形参,因此实参的个数、类型应与形参一一对应,并且要有确定的值。,2、函数调用步骤是:首先在调用
6、程序中计算实参的值,传送给对应的形参,接着执行函数体,最后将函数值返回给调用程序。,3、函数的定义是静态的,若定义后未被调用,则该函数永远不会被执行。,例1-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;,a,b,c为三角形的边长,p为半周长,即p=(a+b+c)/2,Program ex1-2(input,output);var b1,b2,b3,b4,b5,b6,b7,s:real;,Begin readln(b1
7、,b2,b3,b4,b5,b6,b7);s:=area(b1,b5,b6)+area(b2,b6,b7)+area(b3,b4,b7);writeln(s=,s:10:3);End.,函数首部,三个形式参数,函数area结果类型为实型,给函数名area赋值,调用函数,分析:,2、过程定义及调用,标准过程有:,标准过程调用:,read/readln/write/writeln,Read(a,b,c);,自定义过程的格式:,Procedure 过程名(形参表);局部变量说明;begin 语句1;语句2;end;,过程首部,过程体,将例1-2中n!用过程fa来定义。,Procedure fa(n:i
8、nteger);var k:integer;begin t:=1;for k:=2 to n do t:=t*k;end;,t 在主程序中说明,为全程量。,n!的结果是如何回传给主程序的?,是通过t带回主程序的。,注意:,、过程体内所用的类型、常量、变量只在本过程内有效,退出过程体后,该单元被释放。,、不能给过程名赋值,过程名不能代表任何数据。,思考:n!的结果存放在哪里?,练习:1-3-b 定义一个求三角形面积的过程area。,Procedure area(a,b,c:real;var m:real);var p:real;begin p:=(a+b+c)/2;m:=sqrt(p*(p-a)
9、*(p-b)*(p-c);end;,a、b、c、m四个参数,a、b、c为值参,参数m前面有var,是变参。该过程被调用后,由变参m将结果传回调用程序。,过程调用:,过程名:实在参数表;,例:用过程编写程序求如图所示的五边形面积。,Program lx1-1(input,output);var b1,b2,b3,b4,b5,b6,b7,s,sum,real;,三角形的面积通过变参s传回主程序。,begin,Procedure area(a,b,c:real;var s:real);var p:real;begin p:=(a+b+c)/2;s:=sqrt(p*(p-a)*(p-b)*(p-c);
10、end;,readln(b1,b2,b3,b4,b5,b6,b7);,end.,sum:=0;,area(b1,b5,b6,s);,sum:=sum+s;,area(b2,b6,b7,s);,sum:=sum+s;,area(b3,b4,b7,s);,sum:=sum+s;,writeln(sum=,sum:10:3);,函数调用出现在表达式中,函数值是通过函数名传回调用程序,操作,完成一系列的数据处理,或与计算无关的各种操作,往往求一个函数值,结果类型,无,函数有类型,最终要将函数值传送给函数名。,调用方式,由独立的过程调用语句来完成,返回值的方法,通过变参将运算的结果传给调用程序,过程和函
11、数的主要区别:,例1-4 设计一个过程将数组中的元素从小到大排列。,将数组作为参数。,type atype=array1.10 of integer;var a:atype;I:integer;procedure sort(var p:atype);var I,j,k:integer;begin for I:=1 to 9 do for j:=I+1 to 10 do if pIpj then begin k:=pI;pI:=pj;pj:=k;end end;begin for I:=1 to 10 do read(aI);sort(a);for I:=1 to 10 do write(aI,
12、)end.,例1-4 设计一个过程将数组中的元素从小到大排列。,将数组作为参数。,type atype=array1.10 of integer;var a:atype;I:integer;procedure sort(var p:atype);var I,j,k:integer;begin for I:=1 to 9 do for j:=I+1 to 10 do if pIpj then begin k:=pI;pI:=pj;pj:=k;end end;begin for I:=1 to 10 do read(aI);sort(a);for I:=1 to 10 do write(aI,)e
13、nd.,注意:当函数或过程的形式参数为数组类型时,相应的实在参数必须是一致的数组类型。当形参为数组类型时,在TP中必须用类型名进行定义,而在FP中是可以这样定义的:,Procedure sort(var p:array1.10 of integer);,3、变量及其作用域,Program ex1-5(input,output);var m:integer;procedure test1;begin m:=100;end;begin m:=5;writeln(m=,m);test1;writeln(m=,m);end.,例1-5 a读程序写结果。,结果为:,m=5,m=100,全程量的作用域有两
14、种情况:,1、在全程变量和局部变量不同名时,其作用域是整个程序。,2、在全程变量和局部变量同名时,全程变量的作用域不包含同名局部变量的作用域。,m为全程变量。,例1-5b 读程序写结果。,Program ex1-5b(input,output);var m:integer;procedure test2;var m:integer;begin m:=100;end;begin m:=5;writeln(m=,m);test2;writeln(m=,m);end.,结果为:,m=5,m=5,M是局部量,结果被屏蔽,它不影响到全程量m的值。,全局变量:在主程序中被说明 作用域:整个程序;局部变量:
15、在子程序中被说明 作用域:主程序及其下级的程序。全程量的作用域分两种情况:当全程量和局部量不同名时,其作用域是整个程序。当全程量和局部量同名时,全程量的作用域不包含局部量的作用域。当局部变量所在子程序被调用时,局部变量才被分配有效的存储单元;当返回调用程序时,局部变量所占的存储单元就被释放。,练一练:,Program ex1-2(input,output);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;writ
16、eln(x,y);end.,结果为:,121 2,4、参数的传递,参数,形参,实参,值形参,变形参,Function fac(x,y:integer):real;,procdure fac(var x,y:integer);,a:=fac(5,6);,值参类似于局部变量,仅为过程和函数的执行提供初值而不影响调用时实际参数的值。,对变参操作实际上就是对实参本身的操作。,Program ex1-6-1(input,output);var a:integer;procedure sum(b:integer);begin b:=b+10;writeln(b=,b);end;begin a:=10;su
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NOIP 初赛 资料 过程 函数
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6513078.html