第4章函数 C语言是通过函数来实现模块化程序设计的。所以较大的C语言 应用程序,往往是由多个函数组成的,每个函数分别对应各自的功能 模块。 4,1函数的定义与调用 42函数的嵌套调用与递归调用 43内部变量与外部变量 44内部函数与外部函数 45变量的动态存储与静态存储
返回本章首页 下一页 上一页 第4章 函 数 C语言是通过函数来实现模块化程序设计的。所以较大的C语言 应用程序,往往是由多个函数组成的,每个函数分别对应各自的功能 模块。 4.1 函数的定义与调用 4.2 函数的嵌套调用与递归调用 4.3 内部变量与外部变量 4.4 内部函数与外部函数 4.5 变量的动态存储与静态存储 返回目录 上一章 下一章
4.1函数的定义与调用 4.1.1函数的定义 4.1.2函数的返回值与函数类型 4.1.3对被调用函数的说明和函数原型 4.1.4函数的调用 4.1.5函数的形参与实参
返回本章首页 下一页 上一页 4.1 函数的定义与调用 4.1.1 函数的定义 4.1.2 函数的返回值与函数类型 4.1.3 对被调用函数的说明和函数原型 4.1.4 函数的调用 4.1.5 函数的形参与实参
4.1.1函数的定义 1.任何函数(包括主函数main()都是由函数说明 和函数体两部分组成。根据函数是否需要参数,可将函 数分为无参函数和有参函数两种。 (1)无参函数的一般形式 函数类型函数名(void) 说明语句部分; 可执行语句部分; 注意:在旧标准中,函数可以缺省参数表。但在新 标准中,函数不可缺省参数表;如果不需要参 用 “void表示,主函数main()例外
返回本章首页 下一页 上一页 4.1 .1 函数的定义 1.任何函数(包括主函数main())都是由函数说明 和函数体两部分组成。根据函数是否需要参数,可将函 数分为无参函数和有参函数两种。 (1)无参函数的一般形式 函数类型 函数名( void ) { 说明语句部分; 可执行语句部分; } 注意:在旧标准中,函数可以缺省参数表。但在新 标准中,函数不可缺省参数表;如果不需要参数,则用 “void”表示,主函数main()例外
(2)有参函数的一般形式 函数类型函数名(数据类型参数[,数据类型参数2……]) 说明语句部分; 可执行语句部分; 有参函数比无参函数多了一个参数表。调用有参 函数时,调用函数将赋予这些参数实际的值。 为了与调用函数提供的实际参数区别开,将函数 定义中的参数表称为形式参数表,简称形参表
返回本章首页 下一页 上一页 (2)有参函数的一般形式 函数类型 函数名( 数据类型 参数[,数据类型 参数2……]) { 说明语句部分; 可执行语句部分; } 有参函数比无参函数多了一个参数表。调用有参 函数时,调用函数将赋予这些参数实际的值。 为了与调用函数提供的实际参数区别开,将函数 定义中的参数表称为形式参数表,简称形参表
案例41]定义一个函数,用于求两个数中的大数 /*案例代码文件名:AL41C* *功能:定义一个求较大数的函数并在主函数中调用* int max(int nl, int n2) /*定义一个函数maxO)*/ i return(n1>n2?n1: n2) maino i int max(int nl, int n2); /*函数说明* int numl num2: printf("input two numbers: n ); scanf(%od%d",&numl, &num2); printf("max=%od", max(numl, num2)); getcho /*使程序暂停,按任一键继续*
返回本章首页 下一页 上一页 [案例4.1] 定义一个函数,用于求两个数中的大数。 /*案例代码文件名:AL4_1.C*/ /*功能:定义一个求较大数的函数并在主函数中调用*/ int max(int n1, int n2) /*定义一个函数max()*/ { return (n1>n2?n1:n2); } main() { int max(int n1, int n2); /*函数说明*/ int num1,num2; printf("input two numbers:\n"); scanf("%d%d", &num1, &num2); printf("max=%d\n", max(num1,num2)); getch(); /*使程序暂停,按任一键继续*/ }
2.说明 (1)函数定义不允许嵌套。 在C语言中,所有函数(包括主函数man()都是平行的。一个 函数的定义,可以放在程序中的任意位置,主函数main(之前或之 后。但在一个函数的函数体内,不能再定义另一个函数,即不能嵌 套定义 (2)空函数——既无参数、函数体又为空的函数。其一般形式 为: [函数类型]函数名(void {} 3)在老版本C语言中,参数类型说明允许放在函数说明部分 的第2行单独指定
返回本章首页 下一页 上一页 2.说明 (1)函数定义不允许嵌套。 在C语言中,所有函数(包括主函数main())都是平行的。一个 函数的定义,可以放在程序中的任意位置,主函数main()之前或之 后。但在一个函数的函数体内,不能再定义另一个函数,即不能嵌 套定义。 (2)空函数──既无参数、函数体又为空的函数。其一般形式 为: [函数类型] 函数名(void) { } (3)在老版本C语言中,参数类型说明允许放在函数说明部分 的第2行单独指定
4.1.2函数的返回值与函数类型 C语言的函数兼有其它语言中的函数和过程两种功能,从这个 角度看,又可把函数分为有返回值函数和无返回值函数两种 1.函数返回值与 return语句 有参函数的返回值,是通过函数中的 Return语句来获 得的。 (1) return语句的一般格式: return(返回值表达 式) (2) return语句的功能:返回调用函数,并将“返回 值表达式”的值带给调用函数 注意:调用函数中无 return语句,并不是不返回一个值,而是 个不确定的值。为了明确表示不返回值,可以用“void定义成“无 空)类型
返回本章首页 下一页 上一页 4.1.2 函数的返回值与函数类型 C语言的函数兼有其它语言中的函数和过程两种功能,从这个 角度看,又可把函数分为有返回值函数和无返回值函数两种。 1.函数返回值与return语句 有参函数的返回值,是通过函数中的return语句来获 得的。 (1)return语句的一般格式: return ( 返回值表达 式 ); (2)return语句的功能:返回调用函数,并将“返回 值表达式”的值带给调用函数。 注意:调用函数中无return语句,并不是不返回一个值,而是一 个不确定的值。为了明确表示不返回值,可以用“void”定义成“无 (空)类型
2.函数类型 在定义函数时,对函数类型的说明,应与 return 句中、返回值表达式的类型一致 如果不一致,则以函数类型为准。如果缺省函数 类型,则系统一律按整型处理。 定好的程序设计习惯:为了使程序具有良好的可 读性并减少出错,凡不要求返回值的函数都应定义为 空类型;即使函数类型为整型,也不使用系统的缺省 处理
返回本章首页 下一页 上一页 2.函数类型 在定义函数时,对函数类型的说明,应与return 语句中、返回值表达式的类型一致。 如果不一致,则以函数类型为准。如果缺省函数 类型,则系统一律按整型处理。 良好的程序设计习惯:为了使程序具有良好的可 读性并减少出错,凡不要求返回值的函数都应定义为 空类型;即使函数类型为整型,也不使用系统的缺省 处理
4.1.3对被调用函数的说明和函数原型 在 ANSI C新标准中,采用函数原型方式,对被调用函数进行说明, 其一般格式如下 函数类型函数名(数据类型[参数名,数据类型[参数名2… C语言同时又规定,在以下2种情况下,可以省去对被调用函数 的说明 (1)当被调用函数的函数定义出现在调用函数之前时。因为在 调用之前,编译系统已经知道了被调用函数的函数类型、参数个数、 类型和顺序。 (2)如果在所有函数定义之前,在函数外部(例如文件开始处 预先对各个函数进行了说明,则在调用函数中可缺省对被调用函数的 说明
返回本章首页 下一页 上一页 4.1.3 对被调用函数的说明和函数原型 在ANSI C新标准中,采用函数原型方式,对被调用函数进行说明, 其一般格式如下: 函数类型 函数名(数据类型[ 参数名][, 数据类型[ 参数名2]…]); C语言同时又规定,在以下2种情况下,可以省去对被调用函数 的说明: (1)当被调用函数的函数定义出现在调用函数之前时。因为在 调用之前,编译系统已经知道了被调用函数的函数类型、参数个数、 类型和顺序。 (2)如果在所有函数定义之前,在函数外部(例如文件开始处) 预先对各个函数进行了说明,则在调用函数中可缺省对被调用函数的 说明
4.1.4函数的调用 在程序中,是通过对函数的调用来执行函数体的,其过程与其它 语言的子程序调用相似。 C语言中,函数调用的一般形式为:函数名(实际参数表] 切记:实参的个数、类型和顺序,应该与被调用函数所要求的 参数个数、类型和顺序一致,才能正确地进行数据传递 在C语言中,可以用以下几种方式调用函数: )的数表达式。函数作为表达式的一项,出现在表达式中 以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。 (2)的数语句。C语言中的函数可以只进行某些操作而不返回 函数值,这时的函数调用可作为一条独立的语句 (3)函数实参。函数作为另一个函数调用的实际参数出现。这 种情况是把该函数的返回值作为实参进行传送因此要求该函数必 须是有返回值的
返回本章首页 下一页 上一页 4.1.4 函数的调用 在程序中,是通过对函数的调用来执行函数体的,其过程与其它 语言的子程序调用相似。 C语言中,函数调用的一般形式为: 函数名([实际参数表]) 切记:实参的个数、类型和顺序,应该与被调用函数所要求的 参数个数、类型和顺序一致,才能正确地进行数据传递。 在C语言中,可以用以下几种方式调用函数: (1)函数表达式。函数作为表达式的一项,出现在表达式中, 以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。 (2)函数语句。C语言中的函数可以只进行某些操作而不返回 函数值,这时的函数调用可作为一条独立的语句。 (3)函数实参。函数作为另一个函数调用的实际参数出现。这 种情况是把该函数的返回值作为实参进行传送,因此要求该函数必 须是有返回值的