函数和过程精.ppt

上传人:石*** 文档编号:91238717 上传时间:2023-05-24 格式:PPT 页数:28 大小:1.18MB
返回 下载 相关 举报
函数和过程精.ppt_第1页
第1页 / 共28页
函数和过程精.ppt_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《函数和过程精.ppt》由会员分享,可在线阅读,更多相关《函数和过程精.ppt(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、函数和过程第1页,本讲稿共28页函数v如果我们设计一个子程序,每调用一次产生一个结果,那么可以把这个子程序设计成函数。一、标准函数:abs(x);sqrt(x);chr(n);ord(c)length(s);copy(s,n,m);第2页,本讲稿共28页二、允许用户根据需要自定义函数一)自定义函数的一般格式为:function函数名(形式参数表):函数函数类型;函数首部局部变量说明部分;begin语句系列;函数名:=表达式函数体end;函数首部:1、在同一程序中,函数名不能与其他变量名重名。2、函数中的形式参数接受调用函数时所传入的值,用来参与函数中的运算3、函数的类型就是函数值的类型。函数体

2、:函数体与程序体相似由说明部分和执行部分组成1、说明部分变量是局部变量,这些变量只在函数内使用,与函数体外同名变量无关2、函数执行部分begin开头end结束,但end后是;3、函数体内至少要给函数名赋一次值,这样调用时返回函数值第3页,本讲稿共28页二)调用函数主程序通过调用函数得到函数的运算结果。调用函数的一般格式为:函数名(实在参数表)1.调用函数时,函数名后面圆括号内的参数称为实在参数。调用时即称为实在参数。调用时即把这些实际值传送给函数形参表中的相应形参变量,因此实参的个数和类型应与形参一一对应,并且要有确定的。2.形参不是实际存在的变量,它不占用内存单元,实参是在调用函数是所用的变

3、量,调用函数时形参才开辟单元,并将实参的值赋给形参,一旦结束形参就释放内存单元。3.函数不是单独的语句,只能作为运算赋值或出现在表达式中。第4页,本讲稿共28页例1:编程找出由键盘任意输入五个整数中的最大整数。解:设输入的五个整数为n1、n2、n3、n4、n5,为了便于处理,引入一个中间变量t1,按如下步骤处理:令t1=n1;将t1与n2比较,将两者中较大的数放入t1;将t1与n3比较,将两者中较大的数放入t1;将t1与n4比较,将两者中较大的数放入t1;将t1与n5比较,将两者中较大的数放入t1;经过以上5步处理后,t1即为5个数中最大者。从上面规划的步骤看来,从步骤从上面规划的步骤看来,从

4、步骤到步骤到步骤需处理的需处理的目标是相同的,因此我们可以设计一段子程序目标是相同的,因此我们可以设计一段子程序Max(x1,x2),以找出,以找出x1和和x2中最大的值并返回。中最大的值并返回。第5页,本讲稿共28页ProgramExam41_a;Varn1,n2,n3,n4,n5,t1:integer;Functionmax(x1,x2:integer):integer;BeginIfx1x2thenmax:=x1Elsemax:=x2;End;BeginWrite(Input5numbers:);Readln(n1,n2,n3,n4,n5);t1:=n1;t1:=max(t1,n2);t

5、1:=max(t1,n3);t1:=max(t1,n4);t1:=max(t1,n5);Writeln(Maxnumber:,t1);End.第6页,本讲稿共28页从上例看出,引入函数实际上是将一个复杂的问题划分成若干个易于处理的子问题,将编程化简的一种有效办法,而化简的方法是多种多样的,如前面已经做过求三个数中的最大数,所以可定义一个专门求三个数中最大数的函数(Max)。第一次用这个函数求出n1,n2,n3三个数中的最大数t1;第二次调用这个函数求出t1与n4,n5三个数中的最大数,也就是前三个数的最大数(已在t1中)和后面二个数再求一次,就得到五个数的最大数。因此,需要两次使用“求三个数中

6、的最大数”,步骤如下:调用函数Max(n1,n2,n3),求出n1,n2,n3中的最大者t1;调用函数Max(t1,n4,n5),求出t1,n4,n5中的最大者t2;输出最大数t2。第7页,本讲稿共28页ProgramExam41_b;Varn1,n2,n3,n4,n5,t1:integer;functionMax(x1,x2,x3:integer):integer;自定义函数自定义函数MaxVarXX:integer;函数内部变量说明函数内部变量说明begin函数体函数体ifX1X2thenXX:X1elseXX:X2;ifX3XXthenXX:X3;Max:XXend;Begin主程序主程

7、序Write(Input5numb:);Readln(n1,n2,n3,n4,n5);输入五个数输入五个数t1:Max(n1,n2,n3);用函数求用函数求n1,n2,n3的最大数的最大数t1:Max(n4,n5,t1);用函数求用函数求n4,n5,t1的最大数的最大数Writeln(MaxNumber:,t1);ReadlnEnd.第8页,本讲稿共28页例2求任意输入的五个自然数的最大公约数。解:自定义一个专门求两自然数的最大公约数的函数GCD;调用自定义函数,第一次求前两个数的最大公约数;从第二次开始,用每次求得的最大公约数与下一个数再求两个数最大公约数,直到最后。本题共四次“求两个数的最

8、大公约数”,设输入的五个自然数分别是a1,a2,a3,a4,a5,采用如下步骤:求a1,a2两个数的最大公约数存入a1;求a1,a3两个数的最大公约数存入a1;求a1,a4两个数的最大公约数存入a1;求a1,a5两个数的最大公约数存入a1;输出a1,此时的a1已是五个数的最大公约数。第9页,本讲稿共28页ProgramExam42;Vara1,a2,a3,a4,a5:integder;functionGCD(x,y:integer):integer;自定义函数自定义函数Varn:integer;beginWhilexmody0dobeginn:=x;x:=y;y:=nmodyend;GCD:=

9、yend;Begin主程序主程序Write(input5Numper:);readln(a1,a2,a3,a4,a5);输入五个数输入五个数Write(,a1,a2,a3,a4,a5,)=);a1:GCD(a1,a2);调用函数调用函数GCDa1:GCD(a1,a3);a1:GCD(a1,a4);a1:GCD(a1,a5);Writeln(a1);readlnEnd.第10页,本讲稿共28页例3:求图中五边形面积,边长及对角线长a1a7由文件输入。提示:利用三角形面积公式(海伦公式)s=sqrt(p*(p-a)*(p-b)*(p-c)a4a5a1a3a2a7a6vara1,a2,a3,a4,a

10、5,a6,a7,s:real;functionarea(a,b,c:real):real;varp:real;beginp:=(a+b+c)/2;area:=sqrt(p*(p-a)*(p-b)*(p-c);end;beginassign(input,1.txt);assign(output,2.txt)reset(input);readln(a1,a2,a3,a4,a5,a6,a7);s:=area(a4,a5,a7)+area(a1,a6,a7)+area(a2,a6,a3);writeln(s:8:2);end.第11页,本讲稿共28页习题1.数学上把从1开始的连续自然数相乘叫做阶乘。例

11、如把1*2*3*4*5称作5的阶乘,记为5!。编写一个求n!的函数,调用此函数求5!+8!2.求从键盘输入的五个自然数的最小公倍数。第12页,本讲稿共28页过程过程自定义函数通常被设计成求一个函数值,一个函数只能得到一个运算结果。若要设计成能得到若干个运算结果,或完成一系列处理,就需要自定义“过程”来实现。一)标准过程:vreadln(x);vwriteln(x);vval(s,x,e);vstr(x,s);vdelete(s,n,m);第13页,本讲稿共28页二)自定义过程的一般格式如下:Procedure过程名(形式参数表);过程首部局部变量说明部分;begin语句部分;过程体部分end;

12、1.过程没有类型2.形式参数可以包含一个或多个参数,多个参数之间用分号分隔,也可以没有参数。3.形参分为值形参和变量形参例如:4.procedurepc(m,n:integer;vart:real);未用var说明的为值形参,带var说明的为变量形参。5.值形参不能返回值而变量形参可以。6.3.程序体内部不需要给过程赋值。第14页,本讲稿共28页三)调用过程:过程名(实在参数表);1.实参之间用逗号分开,实参和形参在个数、类型、顺序要一一对应。2.调用过程用实参值代替形参,然后执行过程,执行完毕后局部变量和值形参消失第15页,本讲稿共28页例4:输入三个不同的整数,按由小到大排序(用自定义过程

13、编写的Pascal)Programexam43;Vara,b,c:integer;ProcedureSwap(varx,y:integer);自定义交换两个变量值的过程自定义交换两个变量值的过程Vart:integer;Begin过程体过程体t:=x;x:=y;y:=t交换两个变量的值交换两个变量的值end;Begin主程序主程序Write(inputa,b,c=);Readln(a,b,c);ifabthenswap(a,b);调用自定义过程调用自定义过程ifacthenswap(a,c);ifbcfhenswap(b,c);Writeln(a:6,b:6,c:6);ReadlnEnd.第1

14、6页,本讲稿共28页例5:定义一个打印由“*”号组成的三角形的过程,然后主程序中输入行数,并调用该过程输出三角形vara:integer;proceduresjx(x:integer);varI,j:integer;beginfori:=1toxdobeginforj:=1toIdowrite(*);writeln;end;end;beginread(a);sjx(a);end.第17页,本讲稿共28页例6:如果一个自然数除了1和本身,还有别的数能够整除它,这样的自然数就是合数。例如15,除了1和15,还有3和5能够整除,所以15是合数。14,15,16是三个连续的合数,试求连续十个最小的合数

15、。Pascal程序程序:Programexam44;vara,b,s,n:integer;yes:boolean;proceduresub(x:integer;varyy:boolean);过程:求过程:求x是否为素数是否为素数vark,m:integer;用用yy逻辑值转出逻辑值转出begink:=trunc(sqrt(x);form:=3tokdoifodd(m)thenifxmodm=0thenyy:=false;end;begin主程序主程序b:=3;repeata:=b;a为第一个素数为第一个素数repeatyes:=true;inc(b,2);b是是a后面待求的素数后面待求的素数s

16、ub(b,yes);调用调用SUB过程来确认过程来确认b是否为素数是否为素数ifyesthens:=b-a;如果如果b是素数,则求出跨度是素数,则求出跨度suntilyes;untils=10;forn:=a+1toa+10dowrite(n:6);writeln;readlnend.第18页,本讲稿共28页例7:将合数483的各位数字相加(4+8+3)=15,如果将483分解成质因数相乘:483=3*7*23,把这些质因数各位数字相加(3+7+2+3),其和也为15。即某合数的各位数字之和等于它所有质因数的各数字之和。求500以内具有上述特点的所有合数。第19页,本讲稿共28页program

17、exam45;varn,t1,t2,tatol:integer;yes:boolean;proceduresub1(x:integer;vart:integer);过程过程:分离分离x的各位的各位数字数字begin并求各位数字之和并求各位数字之和repeatt:=t+xmod10;x:=xdiv10;untilx=0end;proceduresub2(x:integer;vart:integer);过程:分解质因数过程:分解质因数varxx,tt:integer;beginxx:=2;whilex1doifxmodxx=0thenbegintt:=0;sub1(xx,tt);t:=t+tt;x

18、:=xdivxxendelseinc(xx)end;第20页,本讲稿共28页proceduresub3(x:integer;varyy:boolean);过程:判断x是否为素数vark,m:integer;begink:=trunc(sqrt(x);form:=2tokdoifxmodm=0thenyy:=false;end;begin主程序forn:=1to500dobegint1:=0;t2:=0;yes:=true;sub3(n,yes);调用过程求素数ifnotyesthen如果非素数就beginsub1(n,t1);调用过程求n的各位数字之和sub2(n,t2);调用过程求n的各质因

19、数的数字之和ift1=t2thenwrite(n:6);打印合格的合数endend;readlnend.第21页,本讲稿共28页习题1.求前n个自然数的平方和,要求不用乘法。例如:3的平方不用3*3,可用3+3+3。2.自然数a的因子是指能整除a的所有自然数,但不含a本身。例如12的因子为:1,2,3,4,6。若自然数a的因子之和为b,而且b的因子之和又等于a,则称a,b为一对“亲和数”。求最小的一对亲和数。3.如果一个数从左边读和从右边读都是同一个数,就称为回文数。例如6886就是一个回文数,求出所有的既是回文数又是素数的三位数。4.任何大于2的自然数都可以写成不超过四个平方数之和。如:8=

20、2222;14=122232由键盘输入自然数N(2N1)and(ahea)thenbeginb:=hea;heb:=he(b);if(a=heb)thenwriteln(a:8,b:8);end;untila=heb;readln;end.第24页,本讲稿共28页全局变量和局部变量1、概念:在子程序中定义的变量称为局部变量在程序的一开始定义的变量称为全局变量。2、作用域:全局变量作用域是整个程序;局部变量作用域是定义该变量的子程序。当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。第25页,本讲稿共28页programlocal_global;va

21、ri,k:integer;proceduresub1;vari,j:integer;begini:=17;writeln(iinsub=,i);writeln(kinsub=,k);end;begini:=2;k:=9;writeln(iinmain=,i);writeln(kinmain=,k);sub1;writeln(iinmain=,i);writeln(jinmain=,j);readln;end.上述程序运行时将出现上述程序运行时将出现UnknownIdentfier;因为变量;因为变量j在主程序中没在主程序中没定义。定义。当删除本语句时。运行结果如下:当删除本语句时。运行结果如下

22、:iinmain2kinmain9iinsub17kinsub9iinmain2第26页,本讲稿共28页值参和变量参数值参和变量参数值形参传值:调用时可用表达式代替形参,不改变实在参数的值。变量形参传地址:调用时必须用变量代替形参变量,改变实在参数的值。第27页,本讲稿共28页programli3_10;vara,b,c:integer;proceduresub(x,y:integer;varz:integer);beginx:=x+1;y:=y+1;z:=x+y;writeln(sub:x=,x:2,y=,y:2,z=,z:2);end;begina:=1;b:=4;c:=9;writeln(main:a=,a:2,b=,b:2,c=,c);sub(a,b,c);writeln(main:a=,a:2,b=,b:2,c=,c);sub(c+5,b*b,a);writeln(main:a=,a:2,b=,b:2,c=,c);readln;end.输出结果:main:a1b4c9sub:x2y5z7main:a1b4c7sub:x13y17z30main:a30b4c7第28页,本讲稿共28页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁