过程和函数(子程序)
http://www.mydrs.org 8/23/2001 大榕树
一、子程序设计的需要: 1.细化算法的过程,可以将每一个子问题运用一段相对独立的小程序来解决; 2.一些具有相同或功能相似的程序段在程序中的不同位置反复出现,可以将这样的程序段做成一个整体,用一个标识符给它起一个名字,凡是需要这个程序段的地方只要简单地引用其标识符即可。 3.子程序包括过程和函数两种形式。 二、函数 1.标准函数 :由Pascal定义的函数。如我们熟悉的ord,chr等,程序员编程时直接引用就行了。 2.自定义函数:由程序员在程序中定义后再使用。 (1)自定义函数的定义 function 函数名(形参表):函数类型; { ————函数首部} var {————局部变量说明部分} begin {————函数体} ... {————函数语句} ... 函数名:=表达式 end; (2)函数的调用:函数在语法上相当于一个表达式,所以,调用时,函数不能独立成为一个语句;它可以出现在任何表达式可以出现的地方。 例如赋值语句的右边: X:=函数名(实在参数表); {————X的类型与函数类型必须一致} 又,如果函数类型是boolean,则还可以出现在条件语句中,充当条件表达式: if 函数名(实在参数表) then …… (3)例:编写一个函数,返回布尔值判别输入三个字符是按序或无序排列。程序中若输入abc则显示顺序排列,若输入cba则显示逆序排列,其他情况显示无序排列,当输入***程序结束。(pfun1.pas) 三、过程 1.标准过程:由Pascal定义的过程。如我们熟悉的read,write等,程序员编程时直接引用就行了。 2.自定义过程:由程序员在程序中定义后再使用。 (1) 过程的定义 procedure 过程名(形式参数表); {————过程首部} var {————说明部分} begin {————过程体} ... ... end; (2)过程的调用:过程在语法上相当于一个语句,所以,调用时,直接写下就行: 过程名(实在参数表); (3)例1:某部队举行一次军事演习,A、B两队约好在同一时间从相距100公里的各自驻地出发相向运动。A队的速度为10公里/小时,B队的速度为8公里/小时。一通讯员骑马从A地同时出发为行进中的两队传递消息,速度为60公里/小时。每遇一队立即折回驶向另一队,当两队距离小于0.5公里时,停下来不再传递消息。求此时通讯员跑了多少趟(从一队到另一队为一趟)?(p118.pas) (4)例2:已知二个合数A=18和B=96,键入N个[10,400]之间的自然数,求这N个数中所有合数与A、B的最大公约数。(p120.pas)
四、子程序中的参数 1.局部变量和全局变量 在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。 2.变量的作用域 (1)变量的作用域和它被定义的位置有关: 在哪里被定义,它的作用范围就在那里:全局变量作用域是整个程序;局部变量作用域是定义该变量的子程序 (2)全局变量与局部变量同名时: 在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。 3.值形参和变量形参 值形参——传值 变量形参——传地址 4.例3:作用域的示例ppro4.pas和ppro5.pas 五、综合练习 (ppro8.pas) 前提知识:计算任意三角形(三条边的长度分别为a、b、c)的面积S可以用海伦公式: S=sqrt((x-a)(x-b)(x-c)) 其中:x=(a+b+c)/2 题目描述:从键盘输入三个数,判断以这三个数为边能否组成一个三角形,若不能,则给出适当信息;若能,则输出是否为等边、等腰或直角三角形,并输出其面积。 编程要求: 1. 将从键盘输入三个数设计成一个过程,过程名为input,带三个变量参数a,b,c; 2. 将判断三个数能否组成三角形(包括是什么三角形)设计成一个函数,函数为ang,参数为在input中接收到的三个数,返回的值表明了能否组成三角形或三角形的类型; 3. 将计算三角形面积设计成一个函数,函数名area,带三个值参数,返回的值为三角形的面积; 4. 要求使程序的主程序的结构明快些,并要求在程序中的适当的说明。
|