首页 PASCAL教学 PASCAL教程 PASCAL练习题 基础知识 常用算法 阶段测试 初赛试题 复赛题库 FP错误代码 留言板
 
第一章 简单程序
第一节 程序结构和基本语句
第二节 顺序结构程序与基本数据类型
第二章 分支程序
第一节 条件语句与复合语句
第二节 情况语句与算术标准函数
第三章 循环程序
第一节 程序结构和基本语句
第二节 Repeat 循环
第三节 While 循环
第四章 函数与过程
第一节 函数
第二节 自定义过程
第五章 自定义数据类型
第一节 数组与子界类型
第二节 二维数组与枚举类型
第三节 集合类型
第四节 记录类型和文件类型
第五节 指针类型与动态数据结构
第六章 程序设计与基本算法
第一节 递推与递归算法
第二节 回溯算法
第七章 数据结构及其应用
第一节 线性表
第二节 队列
第三节 栈
第四节 数组
第八章 搜索
第一节 深度优先搜索
第二节 广度优先搜索
第九章 其他常用知识和算法
第一节 图论及其基本算法
第二节 动态规划
   

第四章 函数与过程

程序中往往需要把主要任务分成若干个子任务,每个子任务只负责一个专门的基本工作。每个子任务就是一个独立的子程序。Turbo Pascal 可以把函数和过程作为子程序调用。

第一节 函数

Pascal允许用户在程序中自己说明定义所需要的函数并在程序中调用这些函数。

[4.1]编程找出由键盘任意输入五个整数中的最大整数。

:设输入的五个整数为n1n2n3n4n5,为了便于处理,引入一个中间变量t1,按如下步骤处理:

①令t1=n1;

②将t1n2比较,将两者中较大的数放入t1

③将t1n3比较,将两者中较大的数放入t1

 = 4 \* GB3 ④将t1n4比较,将两者中较大的数放入t1

 = 5 \* GB3 ⑤将t1n5比较,将两者中较大的数放入t1

 = 6 \* GB3 ⑥经过以上5步处理后,t1即为5个数中最大者。

从上面规划的步骤看来,从步骤②到步骤 = 5 \* GB3 ⑤需处理的目标是相同的,因此我们可以设计一段子程序Max(x1,x2),以找出x1x2中最大的值并返回。

Pascal程序:

Program Exam41_a;

Var n1,n2,n3,n4,n5,t1 : integer;

Function max(x1,x2 : integer) : integer;

Begin

  If x1>x2 then Max := x1

            Else Max := x2;

End;

 

Begin

  Write(Input 5 numbers : );

Readln(n1,n2,n3,n4,n5);

T1 := n1;

T1 := Max(t1,n2);

T1 := Max(t1,n3);

T1 := Max(t1,n4);

T1 := Max(t1,n5);

Writeln(Max number : ,t1);

End.

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

①调用函数Max ( n1, n2, n3),求出n1n2n3中的最大者 t1

②调用函数Max ( t1, n4, n5 ),求出t1, n4, n5中的最大者t2

③输出最大数 t2

Program Exam41_b;

Var n1,n2,n3,n4,n5,t1: integer;

 

function Max(x1,x2,x3: integer): integer;               {自定义函数Max

Var XX: integer;                                    {函数内部变量说明}

begin                                                       {函数体}

if X1X2 then XX:X1 

else XX:X2;

  if X3XX then XX:X3;

Max:XX

end;

 

Begin                                                  {主程序}

  Write('Input 5 numb:');

  Readln(n1,n2,n3,n4,n5);                             {输入五个数}

  t1:Max(n1,n2,n3);                        {用函数求n1, n2, n3的最大数}

  t1:Max(n4,n5,t1);                        {用函数求n4, n5, t1 的最大数}

  Writeln('Max Number :', t1);

  Readln

End.

主程序中两次调用自定义函数。自定义函数的一般格式为:

             function 函数名(形式参数表): 类型;   {函数首部}

             局部变量说明部分;

             begin

                语句系列;                                  {函数体 }

             end;

函数中的形式参数接受调用函数时所传入的值,用来参与函数中的运算。

 

[4.2]求任意输入的五个自然数的最大公约数。

:⑴自定义一个专门求两自然数的最大公约数的函数GCD;

   ⑵调用自定义函数,第一次求前两个数的最大公约数;从第二次开始,用每次求得的最大公约数与下一个数再求两个数最大公约数,直到最后。本题共四次“求两个数的最大公约数”, 设输入的五个自然数分别是a1,a2,a3,a4,a5,采用如下步骤:

①求a1, a2两个数的最大公约数 →  存入a1

②求a1, a3两个数的最大公约数 →  存入a1

③求a1, a4两个数的最大公约数 →  存入a1

④求a1, a5两个数的最大公约数 →  存入a1

⑤ 输出 a1,此时的a1已是五个数的最大公约数。

Pascal程序:

Program Exam42;

Var a1,a2,a3,a4,a5: integder;

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:=y

end;

 

Begin                                  {主程序 }

Write('input 5 Numper:');

  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);

  readln

End.

函数的结果是一个具体的值, 在函数体中必须将所得到的运算结果赋给函数名;主程序通过调用函数得到函数的运算结果。调用函数的一般格式为:

              函数名 (实在参数表)   

调用函数时, 函数名后面圆括号内的参数必须有确定的值, 称为实在参数。调用时即把这些实际值传送给函数形参表中的相应形参变量。函数不是单独的语句, 只能作为运算赋值或出现在表达式中。

 

习题4.1

1. 数学上把从 1 开始的连续自然数相乘叫做阶乘。例如 把1*2*3*4*5  称作5的阶乘,  记为5!。 编写一个求n!的函数, 调用此函数求: D

2.求从键盘输入的五个自然数的最小公倍数。

3.哥德巴赫猜想的命题之一是:大于6 的偶数等于两个素数之和。编程将6100所有偶数表示成两个素数之和。

4.如果一个自然数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如13。试求出所有二位绝对素数。


© 版权所有 桐乡市高级中学计算机组 王建献 2005-
制作与维护:
桐高计算机组 王建献 邮箱:omnislash2000@163.com
建议使用:800*600分辨率,IE5.0以上版本浏览器