
C语言程序设计 赵晓阳
赵晓阳

第7章函数 ·7.1模块化程序设计概述 ·72函数的定义 ·73函数的调用 ·74数组作为函数的参数 ·75变量的作用域和存储类型 ·2.6内部函数和外部函数
第7章 函数 7.1 模块化程序设计概述 7.2 函数的定义 7.3 函数的调用 7.4 数组作为函数的参数 7.5 变量的作用域和存储类型 7.6 内部函数和外部函数

7.1模块化程序设计概述 个被开发的软件往往由许多功能组成,包含的程序语句很多。 从组 成来看, 定的联系,但是在功能上是 独立的。 贪能 ,登能养同的随块是由不同蓆笄套层 叁样才能符不简的能棋块连接在 起形成二个程序,怎样才能 保证 不同开发者的工作既不三相重复又能此衔接, 这就需要进行模块化 程序设计 这种设计方 其就是函数。 翼攀装联婴牡, ● 个子穗指的是将个大的程序自上向下进行功能分解 分成若 决,每个模块对 个功能,有自已的界面, 各个模块可以分别由不同的公 员言数 最 完整的程序 在C语 ,就是用函数来实现功能模块的定义,c程序的功能可以通过函 间的调用来实。 整的℃程序可以宙多个源程序文件组宬, 每一个文件中都可以包含多个函数。 返回
7.1 模块化程序设计概述 一个被开发的软件往往由许多功能组成,包含的程序语句很多。从组 成来看,各个功能模块之间彼此有一定的联系,但是在功能上是各自 独立的。从开发过程来看,可能不同的模块是由不同的程序员开发的, 怎样才能将不同的功能模块连接在一起形成一个程序,怎样才能保证 不同开发者的工作既不互相重复又能彼此衔接,这就需要进行模块化 程序设计。而支持这种设计方法的语言被称为模块化程序设计语言, 我们的C语言就具备这种模块化程序设计的功能,实现这种功能的工 具就是函数。 所谓模块化程序设计,指的是将一个大的程序自上向下进行功能分解, 将其分成若干个子模块,每个模块对应了一个功能,有自己的界面, 有相关的操作,可以完成独立的功能。各个模块可以分别由不同的人 员编写和调试,最后再将不同的模块组装成一个完整的程序。在C语 言中,就是用函数来实现功能模块的定义,C程序的功能可以通过函 数之间的调用来实现。一个完整的C程序可以由多个源程序文件组成, 而每一个文件中都可以包含多个函数。 返回

7.2函数的定义 ·7.21概述 題蔡餐。个可以反复使用的、具有特定功能的且相对独立的 ·建立函数称为“函数的定义” 使用函数称为“函数的调 用 的函数称为「 主调函数分 、而把被调用的函数称为 卷语言中除主函数外,任付函数都司以是被调数, 也可以是主调函数,而主函数manQ只能是主调函数,不允 许是被调函数,因为任何函数都不能调用主函数。 每个函数都有特定的加工处理要求,称为“函数的功能”; 每次调角函数时把要处理的对象和最终处理的结果统称为 “函数的参数” 把主调函数中的加工处理对象传入被调函 ;而把被调函数的加工处理最 称为 的效 拿的输出”;函薮参 下一页返回
7.2 函数的定义 7.2.1 概述 函数是一个可以反复使用的、具有特定功能的且相对独立的 程序段。 建立函数称为“函数的定义”,使用函数称为“函数的调 用”。由于函数可以被其他函数调用,通常把调用其他函数 的函数称为“主调函数”,而把被调用的函数称为“被调函 数”。在C语言中,除主函数外,任何函数都可以是被调函数, 也可以是主调函数,而主函数main( )只能是主调函数,不允 许是被调函数,因为任何函数都不能调用主函数。 每个函数都有特定的加工处理要求,称为“函数的功能” ; 每次调用函数时把要处理的对象和最终处理的结果统称为 “函数的参数”;把主调函数中的加工处理对象传入被调函 数,称为“函数参数的输入”;而把被调函数的加工处理最 终结果带回到主调函数,称为“函数参数的输出”;函数参 数的输入和输出统称为“函数间的数据传递” 。 下一页 返回

7.2函数的定义 ·下面我们先来看一个简单的函数调用的例子。 ·例7-1有下列程序。 ·main() ·{printstar();/*调用printstari函数*/ ·print_message();/*调用print message*/ ·printstar();/*调用printstar函数*/ ·} ·printstar()/*printstar函数*/ 。{ 。printf((”*******\n”)方 上一页下一页返回
7.2 函数的定义 下面我们先来看一个简单的函数调用的例子。 例7-1 有下列程序。 main( ) {printstar( ); /*调用printstar函数*/ print_message( );/*调用print message*/ printstar( );/*调用printstar函数*/ } printstar( )/*printstar函数*/ { printf(″******************\n″); } 上一页 下一页 返回

7.2函数的定义 ·print_.message()/*print_.message函数*/ { printf("Howdo you do!\n"); ·运行情况如下: 关关关关关关关关关关关关关关关关关 How do you do! ·printstar和print_message都是用户定义的函数名,分别用来输出 排“*”号和一行信息。 上一页下一页返回
7.2 函数的定义 print_message( )/*print_message函数*/ { printf(″How do you do!\n″); } 运行情况如下: printstar和print_message都是用户定义的函数名,分别用来输出一 排“*”号和一行信息。 上一页 下一页 返回

7.2函数的定义 ·说明: ·①一个源程序文件由一个或多个函数组成。一个源程序文件是一个编 译单位,即以源程序为单位进行编译,而不是以函数为单位进行编 译。 ·②一个C程序由一个或多个源程序文件组成。对较大的程序,一般不 希望全放在一个文件中,而将函数和其他内容(如预定义)分别放在 若干个源文件中,再由若干个源文件组成一个C程序。这样可以分别 编写、分别编译,提高调度效率。一个源文件可以为多个C程序公 用。 ·③c程序的执行从main函数开始,调用其他函数后流程回到main函 数,在main函数中结束整个程序的运行。main函数是系统定义的。 上一页下一页返回
7.2 函数的定义 说明: ①一个源程序文件由一个或多个函数组成。一个源程序文件是一个编 译单位,即以源程序为单位进行编译,而不是以函数为单位进行编 译。 ②一个C程序由一个或多个源程序文件组成。对较大的程序,一般不 希望全放在一个文件中,而将函数和其他内容(如预定义)分别放在 若干个源文件中,再由若干个源文件组成一个C程序。这样可以分别 编写、分别编译,提高调度效率。一个源文件可以为多个C程序公 用。 ③C程序的执行从main函数开始,调用其他函数后流程回到main函 数,在main函数中结束整个程序的运行。main函数是系统定义的。 上一页 下一页 返回

7.2函数的定义 ·④所有函数都是平行的,即在定义函数时是互相独立的,一个函数并 不从属于另一函数,即函数不能嵌套定义(这是和PASCAL不同的), 函数间可以互相调用,但不能调用main函数。 ·⑤从用户使用的角度看,函数有两种: ·标准函数,即库函数。这是由系统提供的,用户不必自己定义这些函 数,可以直接使用它们。应该说明,不同的C系统提供的库函数的数 量和功能不同,当然有一些基本的函数是共同的。 ·用户自己定义的函数。用以解决用户的专门需要。 ·⑥从函数的形式看,函数分两类: 上一页下一页返回
7.2 函数的定义 ④所有函数都是平行的,即在定义函数时是互相独立的,一个函数并 不从属于另一函数,即函数不能嵌套定义(这是和PASCAL不同的), 函数间可以互相调用,但不能调用main函数。 ⑤从用户使用的角度看,函数有两种: 标准函数,即库函数。这是由系统提供的,用户不必自己定义这些函 数,可以直接使用它们。应该说明,不同的C系统提供的库函数的数 量和功能不同,当然有一些基本的函数是共同的。 用户自己定义的函数。用以解决用户的专门需要。 ⑥从函数的形式看,函数分两类: 上一页 下一页 返回

7.2函数的定义 ·无参函数。如例7-1中的printstar和print_message就是无参函数。在 调用无参函数时,主调函数并不将数据传送给被调用函数,一般用来 执行指定的一组操作。printstar函数的作用是输出8个星号。无参函 数可以带回或不带回函数值,但一般以不带回函数值的居多。 ·有参函数。在调用函数时,在主调函数和被调用函数之间有数据传递。 也就是说,主调函数可以将数据传给被调用函数使用,被调用函数中 的数据也可以带回来供主调函数使角。 ·72.2函数的定义 ·任何函数(包括主函数main())都是由函数说明和函数体两部分组成。 上面已介绍过,根据函数是否需要参数,可将函数分为无参函数和有 参函数两种。 上一页下一页返回
7.2 函数的定义 无参函数。如例7-1中的printstar和print_message就是无参函数。在 调用无参函数时,主调函数并不将数据传送给被调用函数,一般用来 执行指定的一组操作。printstar函数的作用是输出18个星号。无参函 数可以带回或不带回函数值,但一般以不带回函数值的居多。 有参函数。在调用函数时,在主调函数和被调用函数之间有数据传递。 也就是说,主调函数可以将数据传给被调用函数使用,被调用函数中 的数据也可以带回来供主调函数使用。 7.2.2 函数的定义 任何函数(包括主函数main())都是由函数说明和函数体两部分组成。 上面已介绍过,根据函数是否需要参数,可将函数分为无参函数和有 参函数两种。 上一页 下一页 返回

7.2函数的定义 ·无参函数定义 ·无参函数定义的一般形式为: ·类型标识符或void函数名(void) ·{说明语句部分; ·可执行语句部分; 。} ·注意:在旧标准中,函数可以缺省参数表。但在新标准中,函数不可 缺省参数表,若不需要参数,则用“void'表示,主函数main()例外。 上一页下一页返回
7.2 函数的定义 1.无参函数定义 无参函数定义的一般形式为: 类型标识符或void 函数名(void) { 说明语句部分; 可执行语句部分; } 注意:在旧标准中,函数可以缺省参数表。但在新标准中,函数不可 缺省参数表,若不需要参数,则用“void”表示,主函数main()例外。 上一页 下一页 返回