pascal第二讲__过程和函数(修改).

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2008年冬令营过程与函数2008年冬令营过程和函数程序的基本结构顺序结构选择结构循环结构过程和函数说明:程序中可以只有主程序而没有子程序,但不能没有主程序,也就是说不能单独执行子程序。程序设计的基本思想:自顶向下、逐步求精程序的模块化2008年冬令营结构化程序设计思想:方法1、模块化:(1)把一个较大的程序划分为若干子程序,每一个子程序独立成为一个模块;(2)每一个模块又可继续划分为更小的子模块;(3)程序具有一种层次结构。注:运用这种编程方法,考虑问题必须先进行整体分析,避免边写边想。2008年冬令营结构化程序设计思想:方法2、自顶向下:(1)先设计第一层(即:顶层),然后步步深入,逐层细分,逐步求精,直到整个问题可用程序设计语言明确地描述出来为止。(2)步骤:首先对问题进行仔细分析,确定其输入、输出数据,写出程序运行的主要过程和任务;然后从大的功能方面把一个问题的解决过程分成几个问题,每个子问题形成一个模块。(3)特点:先整体后局部,先抽象后具体。2008年冬令营结构化程序设计思想:方法3、自底向上:(1)先设计底层,最后设计顶层;(2)优点:由表及里、由浅入深地解决问题;(3)不足:在逐步细化的过程中可能发现原来的分解细化不够完善;(4)注意:该方法主要用于修改、优化或扩充一个程序。2008年冬令营标准函数有:标准函数的调用X:=abs(-10);Y:=sqrt(81);Z:=round(35.9);abs(x)/sqrt(x)/round(x)…2008年冬令营例1-1:编程求12+22+...+1002的和PROGRAMsum(input,output);VARi:integer;s:longint;BEGINs:=0;fori:=1to100dos:=s+sqr(i);writeln('s=',s);END.例2_1:编程求1!+2!+3!+...+10!的和。fac(i)2008年冬令营一、函数的定义及调用Function函数名(形参表):函数类型;局部变量说明;begin语句1;…;函数名:=表达式;end;函数首部函数体将函数值传递给函数名函数的类型在表达式中调用:函数名(实参)如:x=Abs(n)abs为函数名,n为实参,函数类型为integerorreal注意:自定义函数先定义后使用。函数值通过函数名传送回调用程序。2008年冬令营例2-2编写一个求n!的函数fac.functionfac(n:integer):longint;vark:integer;t:longint;begint:=1;fork:=2tondot:=t*k;fac:=t;end;{endfac}函数说明函数首部局部变量说明形式参数函数执行部分将函数值传递到函数名中函数的结果类型2008年冬令营注意:1、使用函数前应先说明。3、形参就是函数的自变量,其初值来源于主程序的调用,只有在程序的执行过程中调用了函数,形参才能得到具体的值并参与运算,得到函数值。注意:形参表类似于变量说明,但只能使用类型标识符,且不能直接使用类型。形参可缺省。4、函数的类型也就是函数值的类型,函数值将通过函数名传送回调用程序。5、函数体内所用的类型、常量、变量等只在本函数内有效,退出函数体后,分配的存储单元被释放。这些量与函数体外的同名变量无关。6、在函数体中至少有一条将函数值传给函数名的赋值语句。2、函数首部以保留字function开头,函数名由用户自定义的一个标识符,用来存放最终函数值。2008年冬令营beginS:=fac(3)+fac(5)+fac(7);Writeln(‘s=‘,s)End.例7-1编写一个求n!的函数fac.functionfac(n:integer):longint;vark:integer;t:longint;begint:=1;fork:=2tondot:=t*k;fac:=t;end;{endfac}函数说明函数首部局部变量说明形式参数函数执行部分将函数值传递到函数名中Programex1-2a(input,output);vars:longint;主程序函数调用出现在表达式中若求3!+5!+7!的值,如何修改程序?2008年冬令营调用函数时注意:1、自定义函数中的形参,不是实际存在的变量,故又称为虚拟变量,它们并不占用内存单元,只是在调用函数时,才临时开辟相应的内存单元,存放实在参数的值,如fac(3)中的3。它是在调用函数时的所用的自变量。形参实质上是实参的一个“替身”。在调用函数时,实参将值赋给形参,因此实参的个数、类型应与形参一一对应,并且要有确定的值。2、函数调用步骤是:首先在调用程序中计算实参的值,传送给对应的形参,接着执行函数体,最后将函数值返回给调用程序。3、函数的定义是静态的,若定义后未被调用,则该函数永远不会被执行。2008年冬令营例2-3计算如图所示的多边形面积。functionarea(a,b,c:real):real;varp:real;beginp:=(a+b+c)/2;area:=sqrt(p*(p-a)*(p-b)*(p-c));end;用海伦公式求三角形的面积:s=p(p-a)(p-b)(p-c)a,b,c为三角形的边长,p为半周长,即p=(a+b+c)/2Programex1-2(input,output);varb1,b2,b3,b4,b5,b6,b7,s:real;Beginreadln(b1,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赋值调用函数分析:b1b5b6b2b3b4b72008年冬令营例2-4自定义一个专门求两自然数的最大公约数的函数GCD;functionGCD(x,y:integer):integer;Varn:integer;beginWhilexmody<>0dobeginn:=x;x:=y;y:=nmodyend;GCD:=yend;2008年冬令营思考:1、若求3个数的最大公约数,能否定义函数?求4个数最大公约数的函数能否定义?求N个数呢?2、函数中能否调用已定义函数?自己能否调用自己?2008年冬令营练习:设计一个函数digit(N,K),它能将自然数N的从右边开始的第K位上的数字取出来。例如:digit(13579,3)=5,digit(2468,6)=0,调用此函数,求出10次输入后,得到的第K位上的数字之和。拓展:1、从左边开始的第K位上的数字如何取出?2、从中间的第K位开始取M个数字如何取出?2008年冬令营*****************************************************************************************************************在屏幕上输出如图所示的图形。Programexam;varI,j:integer;beginfori:=1to3dobeginwrite(‘‘:(40-i));forj:=1to2*i-1dowrite('*');writeln;End.2008年冬令营2、过程定义及调用标准过程有:标准过程调用:read/readln/write/writelnRead(a,b,c);自定义过程的格式:Procedure过程名(形参表);局部变量说明;begin语句1;语句2;…end;过程首部过程体2008年冬令营********************************************************************************************************************************在屏幕上输出如图所示的图形。proceduredraw(n:integer);varI,j:integer;beginfori:=1tondobeginwrite(‘‘:(40-i));forj:=1to2*i-1dowrite('*');writeln;end;Begin{main}Draw(4);draw(6);draw(9);fork:=1to5dowriteln(‘*’:39);End.2008年冬令营将例2-2中n!用过程fa来定义。Procedurefa(n:integer);vark:integer;begint:=1;fork:=2tondot:=t*k;end;t在主程序中说明,为全程量。n!的结果是如何回传给主程序的?是通过t带回主程序的。注意:1、过程体内所用的类型、常量、变量只在本过程内有效,退出过程体后,该单元被释放。2、不能给过程名赋值,过程名不能代表任何数据。思考:n!的结果存放在哪里?2008年冬令营练习:2-3-b定义一个求三角形面积的过程area。Procedurearea(a,b,c:real;varm:real);varp:real;beginp:=(a+b+c)/2;m:=sqrt(p*(p-a)*(p-b)*(p-c));end;a、b、c、m四个参数,a、b、c为值参,参数m前面有var,是变参。该过程被调用后,由变参m将结果传回调用程序。2008年冬令营过程调用:过程名:实在参数表;b1b5b6b2b3b4b7例:用过程编写程序求如图所示的五边形面积。Programlx1-1(input,output);varb1,b2,b3,b4,b5,b6,b7,s,sum,real;三角形的面积通过变参s传回主程序。beginProcedurearea(a,b,c:real;vars:real);varp:real;beginp:=(a+b+c)/2;s:=sqrt(p*(p-a)*(p-b)*(p-c));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);2008年冬令营函数调用出现在表达式中函数值是通过函数名传回调用程序操作完成一系列的数据处理,或与计算无关的各种操作往往求一个函数值结果类型无函数有类型,最终要将函数值传送给函数名。调用方式由独立的过程调用语句来完成返回值的方法通过变参将运算的结果传给调用程序过程函数过程和函数的主要区别:2008年冬令营3、变量及其作用域Programex1-5(input,output);varm:integer;proceduretest1;beginm:=100;end;beginm:=5;writeln(‘m=‘,m);test1;writeln(‘m=‘,m);end.例1-5a读程序写结果。结果为:m=5m=100全程量的作用域有两种情况:1、在全程变量和局部变量不同名时,其作用域是整个程序。2、在全程变量和局部变量同名时,全程变量的作用域不包含同名局部变量的作用域。m为全程变量。2008年冬令营例1-5b读程序写结果。Programex1-5b(input,output);varm:integer;proceduretest2;varm:integer;beginm:=100;end;beginm:=5;writeln(‘m=‘,m);test2;writeln(‘m=‘,m);end.结果为:m=5m=5M是局部量,结果被屏蔽,它不影响到全程量m的值。2008年冬令营全局变量:在主程序中被说明作用域:整个程序;局部变量:在子程序中被说明作用域:主程序及其下级的程序。全程量的作用域分两种情况:①当全程量和局部量不同名时,其作用域是整个程序。②当全程量和局部量同名时,全程量的作用域不包含局部量的作用域。当局部变量所在子程序被

1 / 57
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功