第四章 模块化程序设计
第四章 模块化程序设计
函数 语言的模块化功能 函数式的程序结构:程序整体由一个或多个函数构成, 每个函数具有各自独立的功能和明显的界面。 允许使用不同存储类别的变量,控制模块内部和外部 的信息交换。 具有编译预处理功能,为程序的调试、移植提供了方 便 支持模块化程序设计
➢ C语言的模块化功能: ➢函数式的程序结构:程序整体由一个或多个函数构成, 每个函数具有各自独立的功能和明显的界面。 ➢允许使用不同存储类别的变量,控制模块内部和外部 的信息交换。 ➢具有编译预处理功能,为程序的调试、移植提供了方 便。 ➢支持模块化程序设计。 函数
c程序结构 用语言编写程序的任务:编写函数。至少要有 main函数 语言执行:语言的执行就是执行man函数, 从开始mamU函数的第一个花括号开始,到最后 个花括号结束。其它函数,均是在mam被执 行时才被调用。 >语言程序设计方法:自顶向下、逐步细化。 先集中考虑man中的算法,某些功能先用一个函数表 达式表示。 ma[设计完毕,再考虑所要用到的函数,有的直接拿 来使用,没有的就开始动手设计
一、C程序结构 ➢ 用C语言编写程序的任务:编写函数。至少要有 一个main()函数。 ➢ C语言执行: C语言的执行就是执行main()函数, 从开始main()函数的第一个花括号开始,到最后 一个花括号结束。其它函数,均是在main()被执 行时才被调 用。 ➢ C语言程序设计方法:自顶向下、逐步细化。 ➢先集中考虑main()中的算法,某些功能先用一个函数表 达式表示。 ➢main()设计完毕,再考虑所要用到的函数,有的直接拿 来使用,没有的就开始动手设计
结构化程序设计举例 高校事务管理系统 办为科财后图 公研事务勤书 管 管管 理理理理理 理理 学成排 藉绩课 管管管 理理理
结构化程序设计举例 高校事务管理系统 …… …… …… …… …… …… 办 公 室 管 理 教 务 管 理 科 研 管 理 人 事 管 理 财 务 管 理 后 勤 管 理 图 书 管 理 …… 学 藉 管 理 成 绩 管 理 排 课 管 理 ……
多级管理的实现:一般用菜单方式(例L41 高校事务管理系统 1、办公室管理 2、教务管理 3、科研管理 4、人事管理 5、财务管理 6、后勤管理 7、图书管理 8、退出系统 请您选择功能(18):
多级管理的实现:一般用菜单方式(例L4-1) 高校事务管理系统 1、办公室管理 2、教务管理 3、科研管理 4、人事管理 5、财务管理 6、后勤管理 7、图书管理 8 、退出系统 请您选择功能(1-8):
函数的定义与声明 例42 maino 函数的声明 double fumntint aint b ;”不能 Double funtint aint hl 函数的定义 /函数体7 不能有
二、函数的定义与声明 ➢ 例4-2 main() {… double fun(int a,int b); … } Double fun(int a,int b) { /*函数体*/ } 函数的声明 “ ;”不能少 函数的定义 不能有“ ;
(一)函数的定义 函数名:函数名要符合的标识的规定 >形式参数: 要在函数名后的括号内,有多个时,以逗号分隔 形式参数只有在程序运行时才临时分配存储空间,用完则释放该空 间,因此函数中的参数值的变化不返回(例L42-2),称为值传递 >函数体:是一个分程序结构,和主程序一样,一般也由变 量定义部分和语句组成。但允许只有语句甚至整个函数为 >函数的返回值: 有返回值,则要声明函数的类型,并用rem返回其值 没有返回值,则函数类型声明为0型,且若函数中的r础rm在最 后时,可省去 >函数的外部特性: 函数不允许嵌套:函数是平等的,不能在函数中再定义函数
(一)函数的定义 ➢ 函数名:函数名要符合C的标识的规定。 ➢ 形式参数: ➢ 要在函数名后的括号内,有多个时,以逗号分隔。 ➢ 形式参数只有在程序运行时才临时分配存储空间,用完则释放该空 间,因此函数中的参数值的变化不返回(例L4-2-2),称为值传递。 ➢ 函数体:是一个分程序结构,和主程序一样,一般也由变 量定义部分和语句组成。但允许只有语句甚至整个函数为 空。 ➢ 函数的返回值: ➢ 有返回值,则要声明函数的类型,并用return返回其值。 ➢ 没有返回值,则函数类型声明为void型,且若函数中的return在最 后时,可省去。 ➢ 函数的外部特性: ➢ 函数不允许嵌套:函数是平等的,不能在函数中再定义函数
(二)函数的声明 在主调函数中,要对在本函数中将要调用的函数 事先作一声明。其作用是向编译系统提供必要的 信息:函数名,函数类型,参数的个数、类型及 排列次序。并注意这些应与函数的定义部分 对应(一般只要将函数的定义复制过来,并加 即可。) 虽然,在主调函数前定义的函数,可不声明,但 般还是养成声明的习惯为好,这样可以清楚地 知道,在主调函数中到底要用到哪些函数
(二)函数的声明 ➢ 在主调函数中,要对在本函数中将要调用的函数 事先作一声明。其作用是向编译系统提供必要的 信息:函数名,函数类型,参数的个数、类型及 排列次序。并注意这些应与函数的定义部分一一 对应(一般只要将函数的定义复制过来,并加一 个“ ;”即可。) ➢ 虽然,在主调函数前定义的函数,可不声明,但 一般还是养成声明的习惯为好,这样可以清楚地 知道,在主调 函数中到底要用到哪些函数
函数的嵌套调用 >语言中允许函数中再调用函数 main()函数 们()函数 2()函数 uFl(i, t) v=f2(p, t) ④
三、函数的嵌套调用 ➢ C语言中允许函数中再调用函数。 {…. u=f1(i,t) …. } main( )函数 {…. v=f2(p,q,t) …. } f1( )函数 { …. } f2( )函数 1 2 3 4 5 6 7
四、函数的递归调用 函数的递归调用就是一个函数直接或间接地调用它自身。 >例L9求m 要求叫可以: >只先求出[們,再乘以 要求[们,只先求出2J,再乘以1。 >终于变成了求们(这个值是已知的,也叫递归终止条件) >再回推过去。 >这就是一个递归调用问题
四、函数的递归调用 ➢ 函数的递归调用就是一个函数直接或间接地调用它自身。 ➢ 例L4-9 求n! 要求n!可以: ➢ 只先求出(n-1)!,再乘以n。 ➢ 要求(n-1)!,只先求出(n-2)!,再乘以n-1。 ➢ …… ➢ 终于变成了求1!(这个值是已知的,也叫递归终止条件) ➢ 再回推过去。 ➢ 这就是一个递归调用问题