第八讲函数和过程.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八讲函数和过程

函数和过程 程序中往往需要把主要任务分成若干个子任务,每个子任务只负责一个专门的基本工作。每个子任务就是一个独立的子程序。Pascal 可以把函数和过程作为子程序调用。 函数 如果我们设计一个子程序,每调用一次产生一个结果,那么可以把这个子程序设计成函数。 一、标准函数: abs(x) ; sqrt(x); chr(n) ; ord(c) length(s); copy(s,n,m); 例1:编程找出由键盘任意输入五个整数中的最大整数。 解:设输入的五个整数为n1、n2、n3、n4、n5,为了便于处理,引入一个中间变量t1,按如下步骤处理: ①令t1=n1; ②将t1与n2比较,将两者中较大的数放入t1; ③将t1与n3比较,将两者中较大的数放入t1; ④将t1与n4比较,将两者中较大的数放入t1; ⑤将t1与n5比较,将两者中较大的数放入t1; ⑥经过以上5步处理后,t1即为5个数中最大者。 从上面规划的步骤看来,从步骤②到步骤 ⑤需处理的 目标是相同的,因此我们可以设计一段子程序 Max(x1,x2),以找出x1和x2中最大的值并返回。 习题 数学上把从 1 开始的连续自然数相乘叫做阶乘。例如 把1*2*3*4*5? 称作5的阶乘,? 记为5!。 编写一个求n!的函数, 调用此函数求5!+8! 求从键盘输入的五个自然数的最小公倍数。 过程 自定义函数通常被设计成求一个函数值,一个函数只能得到一个运算结果。 若要设计成能得到若干个运算结果,或完成一系列处理,就需要自定义“过程” 来实现。 一)标准过程: readln(x); writeln(x); val(s,x,e); str(x,s); delete(s,n,m); 例4:输入三个不同的整数,按由小到大排序(用自定义过程编写的Pascal ) Program? exam43; Var a,b,c: integer; Procedure? Swap (var x,y: integer);??????????? {自定义交换两个变量值的过程 } Var t? : integer; Begin??????????? ????????????????????????????? {过程体} ? t:=x; x:=y; y:=t????????? ?????????? ???????{交换两个变量的值 end; ? Begin??????????????????????? ?????????????????? {主程序} ? Write(input a,b,c=); ? Readln(a,b,c); ? if a>b then swap (a,b);???????? ????????????{调用自定义过程} ? if a>c then swap (a,c); ? if b>c fhen swap (b,c); ? Writeln (a:6, b:6, c:6); ? Readln End. 例5:定义一个打印由“*”号组成的三角形的过程,然后主程序中输入行数,并调用该过程输出三角形 例6:如果一个自然数除了1和本身,还有别的数能够整除它, 这样的自然数就是合数。例如15,除了1和15,还有3和5能够整除,所以15是合数。14,15,16是三个连续的合数,试求连续十个最小的合数。 Pascal程序: Program? exam44; var a,b,s,n: integer; ??? yes: boolean; procedure sub(x: integer;var yy: boolean);???????? ?{过程:求x是否为素数 } var k,m: integer;?????????????????????????? ????????{ 用yy逻辑值转出 } begin ? k:=trunc(sqrt(x)); ? for m:=3 to k do ? if odd(m) then ???? if x mod m=0 then yy:=false; end; ?begin??????????????????????????? ?????????? {主程序 } ? b:=3; ? repeat ??? a:=b;?????????? ?? ???? ???????????????{a 为第一个素数 } ??? repeat ??? yes:=true; ? inc(b,2);?????????????????????????????? {b是a后面待求的素数} ??? sub(b,yes);???????????? ???????????????{调用SUB过程来确认b是否为素数 } ??? if yes then s:=b-a; ? ??????????

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档