第章子程序设计 第章子程序设计 61子程序的概念与特性 62子程序的结构形式 6.3子程序调用和返回指令 64子程序的设计 65子程序的参数传递方法 6.6子程序的嵌套与递归 6.7综合举例 BACK
第6章 子 程 序 设 计 第6章 子 程 序 设 计 6.1 子程序的概念与特性 6.2 子程序的结构形式 6.3 子程序调用和返回指令 6.4 子程序的设计 6.5 子程序的参数传递方法 6.6 子程序的嵌套与递归 6.7 综合举例
第章子程序设计 6.1子程序的概念与特性 6.1.1子程序的概念 人们在编写程序时,常常会遇到这样的情况:某些完成相 同的功能,只是加工的数据略有不同的指令组(程序段)需要在 个程序的若干不同地方使用多次,或是在一个程序中的多个 地方或多个程序中的多个地方用到了同一段程序。这些程序段 的功能和结构形式都相同,只是某些变量的赋值不同。那么就 可以将这段程序抽取出来存放在某一存储区域,每当需要执行 这段程序时,就转到这段程序去执行,执行完后再返回到原来 的程序继续运行。把抽取出来的这段具有特定功能的程序段称 为子程序
第6章 子 程 序 设 计 6.1 子程序的概念与特性 6.1.1 子程序的概念 人们在编写程序时,常常会遇到这样的情况:某些完成相 同的功能,只是加工的数据略有不同的指令组(程序段)需要在 一个程序的若干不同地方使用多次,或是在一个程序中的多个 地方或多个程序中的多个地方用到了同一段程序。这些程序段 的功能和结构形式都相同,只是某些变量的赋值不同。那么就 可以将这段程序抽取出来存放在某一存储区域,每当需要执行 这段程序时,就转到这段程序去执行,执行完后再返回到原来 的程序继续运行。把抽取出来的这段具有特定功能的程序段称 为子程序
第章子程序设计 例如,计算某个数的立方根可能在一个程序中使用多次,但 每次自变量不同。又如,设计名字识别程序时,有时需要判断字 符是否为字母,有时又需要判断字符是否为分隔符。这样的指令 组所包含的指令,少则几条十几条,多则数十条几百条。如果每 处都重复把它写一次,这显然太浪费程序设计的时间和计算机 的存储空间。但这又不能设计成循环程序。因此,人们通过实践, 在程序设计的早期就想出了一种较好的办法,就是把这组指令分 离出来,单独写成一个所谓的“子程序”,并建立进入它和从它 出来时所需要的连接信息。只需在需要处调用这个子程序就行 换言之,子程序方法使得人们把“多次编写”的情况转变成“ 次编写,多次调用”的情况。子程序相当于高级语言中的过程或 函数
第6章 子 程 序 设 计 例如,计算某个数的立方根可能在一个程序中使用多次,但 每次自变量不同。又如,设计名字识别程序时,有时需要判断字 符是否为字母,有时又需要判断字符是否为分隔符。这样的指令 组所包含的指令,少则几条十几条,多则数十条几百条。如果每 一处都重复把它写一次,这显然太浪费程序设计的时间和计算机 的存储空间。但这又不能设计成循环程序。因此,人们通过实践, 在程序设计的早期就想出了一种较好的办法,就是把这组指令分 离出来,单独写成一个所谓的“子程序”,并建立进入它和从它 出来时所需要的连接信息。只需在需要处调用这个子程序就行。 换言之,子程序方法使得人们把“多次编写”的情况转变成“一 次编写,多次调用”的情况。子程序相当于高级语言中的过程或 函数
第章子程序设计 通常,把要调用程序的那个程序称为主程序或调用程序,也 称转子;而把被调用的程序称为子程序或被调用程序,也称返主。 把它们之间控制的转移称为子程序的连接。主程序与子程序的关 系如图6-1所示 主/转子 程序 子程序 返主 图6-1主程序与子程序的关系
第6章 子 程 序 设 计 图6-1 主程序与子程序的关系 通常,把要调用程序的那个程序称为主程序或调用程序,也 称转子;而把被调用的程序称为子程序或被调用程序,也称返主。 把它们之间控制的转移称为子程序的连接。主程序与子程序的关 系如图6-1所示。 转子 子 程 序 主 程 序 返主
第章子程序设计 在程序设计的实际应用中,子程序的引入可以节省存储空 间及程序设计所花费的时间,有利于设计一个大而复杂的程序, 即把一个大而复杂的程序设计成一个主程序和若千个子程序。 这有助于减少程序的复杂性,便于模块化设计,也便于程序的 调试及修改等。但子程序也有其不足之处,这就是要多花费一 些机器时间
第6章 子 程 序 设 计 在程序设计的实际应用中,子程序的引入可以节省存储空 间及程序设计所花费的时间,有利于设计一个大而复杂的程序, 即把一个大而复杂的程序设计成一个主程序和若干个子程序。 这有助于减少程序的复杂性,便于模块化设计,也便于程序的 调试及修改等。但子程序也有其不足之处,这就是要多花费一 些机器时间
第章子程序设计 6.1.2子程序的分类 子程序的种类很多,有单入口、单出口子程序,也有多入 口、多出口子程序。对于一些复杂的子程序,还常常要调用别 的子程序。这种调用可以是一个子程序调用另外的一个子程序 也可以是一个子程序调用自身,这就形成了嵌套结构和递归结 构,分别称为嵌套子程序和递归子程序。子程序嵌套的示意图 如图6-2所示
第6章 子 程 序 设 计 6.1.2 子程序的分类 子程序的种类很多,有单入口、单出口子程序,也有多入 口、多出口子程序。对于一些复杂的子程序,还常常要调用别 的子程序。这种调用可以是一个子程序调用另外的一个子程序, 也可以是一个子程序调用自身,这就形成了嵌套结构和递归结 构,分别称为嵌套子程序和递归子程序。子程序嵌套的示意图 如图6-2所示
第章子程序设计 主程序 子程序 子程序2 图6-2嵌套子程序示意图
第6章 子 程 序 设 计 图6-2 嵌套子程序示意图 子 程 序 1 主 程 序 子 程 序 2
第章子程序设计 6.1.3子程序的特性 1.通用性 子程序具有通用性,便于共享。例如,键盘管理程序,磁 盘读写程序,标准函数程序等等,许多程序中要用到这些程序, 这种可共享的程序最适宜写成子程序。而只能完成特定功能的 子程序,由于缺乏通用性,难于共享,就不适宜写成子程序
第6章 子 程 序 设 计 6.1.3 子程序的特性 1.通用性 子程序具有通用性,便于共享。例如,键盘管理程序,磁 盘读写程序,标准函数程序等等,许多程序中要用到这些程序, 这种可共享的程序最适宜写成子程序。而只能完成特定功能的 子程序,由于缺乏通用性,难于共享,就不适宜写成子程序
第章子程序设计 2.重复性 子程序是可多次重复使用的。一个子程序只占一段存储空 间,但可以多次地调用它,这样就避免了编程人员的重复劳动 节省了存储空间。由于增加了调用、返回指令以及现场保护, 因此程序执行时间会增长。如果一个程序段只用到一次,就没 有必要编写成子程序形式
第6章 子 程 序 设 计 2.重复性 子程序是可多次重复使用的。—个子程序只占一段存储空 间,但可以多次地调用它,这样就避免了编程人员的重复劳动, 节省了存储空间。由于增加了调用、返回指令以及现场保护, 因此程序执行时间会增长。如果一个程序段只用到一次,就没 有必要编写成子程序形式
第章子程序设计 3.可重定位性 可重定位性是指子程序可以存放在存储区的任何地址处。 如果子程序只能存放在固定的地址处,则在编写主程序时要特 别注意存储单元的分配,不要使主程序占用了子程序的存储单 元而破坏子程序,这样就会给编程人员带来很大麻烦,而且在 装配主程序和子程序时往往造成存储空间的冲突或浪费。为了 使子程序可重定位在内存的任意区域中,编制子程序时,不应 采用绝对地址,而应全部使用相对地址
第6章 子 程 序 设 计 3.可重定位性 可重定位性是指子程序可以存放在存储区的任何地址处。 如果子程序只能存放在固定的地址处,则在编写主程序时要特 别注意存储单元的分配,不要使主程序占用了子程序的存储单 元而破坏子程序,这样就会给编程人员带来很大麻烦,而且在 装配主程序和子程序时往往造成存储空间的冲突或浪费。为了 使子程序可重定位在内存的任意区域中,编制子程序时,不应 采用绝对地址,而应全部使用相对地址