预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共51页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

百度Pascal吧公开培训教材-Pascal培训课程普及讲义-第十讲 第十讲子程序 所谓子程序(在ObjectPascal中也称为例程),其实是“过程式 程序设计”(又称结构化程序设计)的产物,子程序的作用,是为了 贯彻“自顶向下,逐步求精”这一编程基本原则以及程序的模块化。 一、过程 在子程序这一章,我们首先了解的是“过程”(procedure)。对 过程的简单理解,就是把主程序中的一段程序给拉出来,放到外面, 给他一个名字。普通的作用,是为了节省多写很多程序段的时间,同 时可以使程序的结构变得清晰,增强可读性。 首先,我想问各位读者一个很没质量的问题:如何交换两个变量 的值?最简单的,也是最常用的一个方法,就是找一个中间变量: programp1_5_1_1_1(input,output); vara,b,t:longint; begin readln(a,b); t:=a; a:=b; b:=t; writeln(a,’‘,b); end. 也就是上面程序段中的t。 , 百度Pascal吧公开培训教材-Pascal培训课程普及讲义-第十讲 实际运用当中,如果一个程序需要很多次的交换变量,那么写这 么多次t:=a;a:=b;b:=t;是会把人给烦死的。(笔者曾经写过一个8K的程 序,用了过程后程序代码立刻缩短至7K)所以,我们的自定义过程 就派上用场啦。我们来看一看写自定义过程的格式: procedure<过程名>(<参数表>);指令;{过程首部} <私有声明> begin{过程体} <语句1..n>; end; 如果用自定义过程的形式去替换主程序中某些具有相同的程序 段,可以节省不少的时间,并可以方便修改。 有读者会注意到一个问题,我上面都是用的“自定义过程”去 描述。其实,我们早在前几章已经使用过过程了,只不过它们是已经 Pascal系统预说明的。比如read,readln,write,writeln等,都是 已经定义过的过程,称为标准过程。而我们自己写的这些过程,被称 为自定义过程。 下面我来具体说明一下自定义过程。自定义过程由“过程首部” (head)和“过程体”组成。过程首部的要点: I.procedure保留字,说明以下程序段是一个过程。 II.过程名。过程名和变量名一样,是自己定义的一个标识符。 它和变量名一样,不能和保留字和已定义的过程、变量、函数冲突。 III.参数表。参数事实上包括了形参(形式参数)和实参(实在参 , 百度Pascal吧公开培训教材-Pascal培训课程普及讲义-第十讲 数)两种,在这里,我们只着重讨论形参,实参的详细讨论参见第三 卷。形参是整个子程序中最难懂的一部分,很多的同学都在这个地方 遇到了瓶颈,希望读者们能够加以重视。 所谓形参,就是调用这个过程的程序段将这些参数传入这个过 程,它将会加入这个程序段。我们以一个计算n的阶乘的程序为例 (n<=12): programp1_5_1_1_2_1(input,output); varn:longint; procedurefac(n:longint); varproduct,i:longint; begin product:=1; fori:=2tondoproduct:=product*i; writeln(n,’!=’,product); end; begin readln(n); fac(n); readln(); end. 这个例子中,我们人工输入进n,计算机执行fac过程,将我 们的n传入fac过程里。我们可以这么想:原来的主程序中有一个n, , 百度Pascal吧公开培训教材-Pascal培训课程普及讲义-第十讲 现在我们到了fac过程里,fac过程里有一个新的n。换句话讲,在 这个fac过程里,无论对n怎么操作,都不会影响到主程序里的n。 那么实参呢?如果我们在过程里面改变了参数的值,那么他会 带出过程,回到主程序中(即赋值给实在参数,就像主程序中的n一 样)。最典型的实参问题就是本章一开始讲的交换变量的值。我们尝 试着用刚才才学过的写过程的方法来写一下: programp1_5_1_1_2_2(input,output); vara,b:longint; procedureswap(a,b:longint); vart:longint; begin t:=a; a:=b; b:=t; end; begin readln(a,b); swap(a,b); writeln(a,b); end. 输入:1015输出:1015 怎么回事?