弗原創IT教育中心 第2讲函数 C语言是通过函数来实现模块化程序设计的。所以较 大的C语言应用程序,往往是由多个函数组成的,每个函 数分别对应各自的功能模块。 21函数的定义与调用 2.2函数的嵌套调用与递归调用 2.3数组作为函数参数 2.4内部变量与外部变量 2.5内部函数与外部函数 2.6变量的动态存储与静态存储
第2讲 函 数 C语言是通过函数来实现模块化程序设计的。所以较 语言是通过函数来实现模块化程序设计的。所以较 大的C语言应用程序,往往是由多个函数组成的,每个函 语言应用程序,往往是由多个函数组成的,每个函 数分别对应各自的功能模块。 数分别对应各自的功能模块。 2.1 函数的定义与调用 函数的定义与调用 2.2 函数的嵌套调用与递归调用 函数的嵌套调用与递归调用 2.3 数组作为函数参数 数组作为函数参数 2.4 内部变量与外部变量 内部变量与外部变量 2.5 内部函数与外部函数 内部函数与外部函数 2.6 变量的动态存储与静态存储 变量的动态存储与静态存储
弗原創IT教育中心 21函数的定义与调用 2.11函数的定义 2.1.2函数的返回值与函数类型 2.1.3对被调用函数的说明和函数原型 2.14函数的调用 2.1.5函数的形参与实参
2.1 函数的定义与调用 函数的定义与调用 2.1.1 函数的定义 2.1.2 函数的返回值与函数类型 函数的返回值与函数类型 2.1.3 对被调用函数的说明和函数原型 对被调用函数的说明和函数原型 2.1.4 函数的调用 2.1.5 函数的形参与实参 函数的形参与实参
弗原創IT教育中心 211函数的定义 1.任何函数(包括主函数main0)都是由函 数说明和函数体两部分组成。根据函数是否需要 参数,可将函数分为无参函数和有参函数两种 (1)无参函数的一般形式 函数类型函数名(vod) 说明语句部分; 可执行语句部分;
2.1 .1 2.1 .1 函数的定义 1.任何函数(包括主函数 .任何函数(包括主函数main())都是由函 数说明和函数体两部分组成。根据函 数说明和函数体两部分组成。根据函数是否需要 参数,可将函数分为无参函数和有参函数两种。 参数,可将函数分为无参函数和有参函数两种。 (1)无参函数的一般形式 )无参函数的一般形式 函数类型 函数名( void ) ( void ) { 说明语句部分; 说明语句部分; 可执行语句部分; 可执行语句部分; }
弗原創IT教育中心 (2)有参函数的一般形式 函数类型函数名(数据类型参数[,数据类型参数2.……]) 说明语句部分 可执行语句部分; 有参函数比无参函数多了一个参数表。调用有参函数时,调 用函数将赋予这些参数实际的值。 为了与调用函数提供的实际参数区别开,将函数定义中的参 数表称为形式参数表,简称形参表
(2)有参函数的一般形式 函数类型 函数名( 数据类型 参数[,数据类型 参数2……] ) { 说明语句部分; 可执行语句部分; } 有参函数比无参函数多了一个参数表。调用有参函数时,调 用函数将赋予这些参数实际的值。 为了与调用函数提供的实际参数区别开,将函数定义中的参 数表称为形式参数表,简称形参表
弗原創IT教育中心 [案例21定义一个函数,用于求两个数中的大数。 /*功能:定义一个求较大数的函数并在主函数中调用*/ int max(int nl, int n2) i return(n1>n2:n1: n2); maino int max( int n1,intn2);/*函数说明*/ int numl, 2; printf("input two numbers: n); scanf(%/d%od",&num1, &num2); printf("max=%od\n", max(num1, num2); retch; 程序运行(1)
[案例2.1] 定义一个函数,用于求两个数中的大数。 定义一个函数,用于求两个数中的大数。 /*功能:定义一个求较大数的函数并在主函数中调用 功能:定义一个求较大数的函数并在主函数中调用*/ int max(int max(int n1, int n2) { return (n1>n2?n1:n2) { return (n1>n2?n1:n2); } main() { int max(int max(int n1, int n2);/*函数说明*/ int num1,num2 num1,num2; printf("input printf("input two numbers: two numbers:\n"); scanf("%d%d scanf("%d%d", &num1, &num2) ", &num1, &num2); printf("max printf("max=%d\n", max(num1,num2)) n", max(num1,num2)); getch(); } } 程序运行(1)
弗原創IT教育中心 2.说明 (1)的数定义不允许嵌套。 在C语言中,所有函数(包括主函数manO)都是平 行的。一个函数的定义,可以放在程序中的任意位置, 主函数main0之前或之后。但在一个函数的函数体内, 不能再定义另一个函数,即不能嵌套定义。 (2)空函数一—既无参数、函数体又为空的函数。 其一般形式为: [函数类型]函数名(void) (3)在老版本C语言中,参数类型说明允许放在函 数说明部分的第2行单独指定
2.说明 (1)函数定义不允许嵌套。 在C语言中,所有函数(包括主函数main())都是平 行的。一个函数的定义,可以放在程序中的任意位置, 主函数main()之前或之后。但在一个函数的函数体内, 不能再定义另一个函数,即不能嵌套定义。 (2)空函数──既无参数、函数体又为空的函数。 其一般形式为: [函数类型] 函数名(void) { } (3)在老版本C语言中,参数类型说明允许放在函 数说明部分的第2行单独指定
弗原創IT教育中心 21.2函数的返回值与函数类型 C语言的函数兼有其它语言中的函数和过程两种功 能,从这个角度看,又可把函数分为有返回值函数和无 返回值函数两种 函数返回值与 return语句 有参函数的返回值,是通过函数中的 return语 句来获得的。 (1) return语句的一般格式: return(返回 值表达式) (2) return语句的功能:返回调用函数,并 将“返回值表达式”的值带给调用函数
2.1.2 函数的返回值与函数类型 函数的返回值与函数类型 C语言的函数兼有其它语言中的函数和过 C语言的函数兼有其它语言中的函数和过程两种功 能,从这个角度看,又可把函数分为有返回值函数和无 ,又可把函数分为有返回值函数和无 返回值函数两种。 返回值函数两种。 1.函数返回值与 .函数返回值与return语句 有参函数的返回值,是通过函数中的 有参函数的返回值,是通过函数中的return语 句来获得的。 (1)return语句的一般格式: 语句的一般格式: return ( return ( 返回 值表达式 ); (2)return语句的功能:返回调用函数,并 语句的功能:返回调用函数,并 将“返回值表达式”的值带给调用函数。 的值带给调用函数
弗原創IT教育中心 2.函数类型 在定义函数时,对函数类型的说明,应与 return 语句中、返回值表达式的类型一致。 如果不一致,则以函数类型为准。如果缺省函数 类型,则系统一律按整型处理。 定好的程序设计习惯:为了使程序具有良好的可 读性并减少出错,凡不要求返回值的函数都应定义为 空类型;即使函数类型为整型,也不使用系统的缺省 处理
2.函数类型 在定义函数时,对函数类型的说明,应与return 语句中、返回值表达式的类型一致。 如果不一致,则以函数类型为准。如果缺省函数 类型,则系统一律按整型处理。 良好的程序设计习惯:为了使程序具有良好的可 读性并减少出错,凡不要求返回值的函数都应定义为 空类型;即使函数类型为整型,也不使用系统的缺省 处理
弗原創IT教育中心 21.3对被调用函数的说明和函数原型 在 ANSI C新标准中,采用函数原型方式,对被调用 函数进行说明,其一般格式如下: 函数类型函数名(数据类型[参数名数据类型[…4 C语言同时又规定,在以下2种情况下,可以省去对 被调用函数的说明: (1)当被调用函数的函数定义出现在调用函数之前 时。因为在调用之前,编译系统已经知道了被调用函数的 函数类型、参数个数、类型和顺序。 (2)如果在所有函数定义之前,在函数外部(例如 文件开始处)预先对各个函数进行了说明,则在调用函数 中可缺省对被调用函数的说明
2.1.3 对被调用函数的说明和函数原型 对被调用函数的说明和函数原型 在ANSI C新标准中,采用函数原型方式,对被调用 新标准中,采用函数原型方式,对被调用 函数进行说明,其一般格式如下: 函数进行说明,其一般格式如下: 函数类型 函数名(数据类型[ 参数名][, 数据类型[ …]); C语言同时又规定,在以下 C语言同时又规定,在以下2种情况下,可以省去对 种情况下,可以省去对 被调用函数的说明: 被调用函数的说明: (1)当被调用函数的函数定义出现在调 )当被调用函数的函数定义出现在调用函数之前 时。因为在调用之前,编译系统已经知道了被调用函数的 因为在调用之前,编译系统已经知道了被调用函数的 函数类型、参数个数、类型和顺序。 函数类型、参数个数、类型和顺序。 (2)如果在所有函数定义之前,在函数外部(例如 )如果在所有函数定义之前,在函数外部(例如 文件开始处)预先对各个函数进行了说明,则在调用函数 开始处)预先对各个函数进行了说明,则在调用函数 中可缺省对被调用函数的说明。 中可缺省对被调用函数的说明
弗原創IT教育中心 214函数的调用 在程序中,是通过对函数的调用来执行函数体的,其 过程与其它语言的子程序调用相似。 C语言中,函数调用的一般形式为:函数名(实际参 数表 切记:实参的个数、类型和顺序,应该与被调用函数 所要求的参数个数、类型和顺序一致,才能正确地进行 数据传递。 在C语言中,可以用以下几种方式调用函数 (1)所数表达式。 (2)所数语句 (3)所数实参
2.1.4 函数的调用 在程序中,是通过对函数的调用来执行函数体的,其 过程与其它语言的子程序调用相似。 过程与其它语言的子程序调用相似。 C语言中,函数调用的一般形式为: C语言中,函数调用的一般形式为: 函数名([实际参 数表]) 切记:实参的个数、类型和顺序,应该与被调用函 :实参的个数、类型和顺序,应该与被调用函数 所要求的参数个数、类型和顺序一致,才能正确地进行 型和顺序一致,才能正确地进行 数据传递。 在C语言中,可以用以下几种方式调用函数: 在C语言中,可以用以下几种方式调用函数: (1)函数表达式。 (2)函数语句。 (3)函数实参