第八章函数 8-1概述 C语言的基本单位是函数。函数相当于其他 语言中的子程序。一个C程序由一个主函数和若 干个函数组成。一个函数中可以调用若干个函 数,反之,一个函数可以被多个函数调用,调用 次数不限。 个C源程序文件(,c是一个编译单位。 一个C程序可由一个源程序文件或多个源程序文 件组成 C程序的执行从main函数开始,在mai函数 结束,main函数由系统定义
第八章 函 数 8-1 概 述 • C 语言的基本单位是函数。函数相当于其他 语言中的子程序。一个C程序由一个主函数和若 干个 函数组成。一个函数中可以调用若干个函 数,反之,一个函数可以被多个函数调用,调用 次数不限。 • 一个C源程序文件(***.c)是一个编译单位。 一个C程序可由一个源程序文件或多个源程序文 件组成。 • C 程序的执行从main函数开始,在main函数 结束,main函数由系统定义
函数与函数之间是平行的独立的,不能在 个函数中定义另一个函数(所谓嵌套定义 函数可以互相调用(不能调用main函数), 被调用的函数可以调用别的函数(嵌套调用), 并可以调用自己。 在程序设计中,常将一些常用的功能模块编 写成函数,存放在函数库中(通常由软件厂商提 供),函数库中的函数称为库函薮。除了标准库 函数外,很多软件公司还为用户提供许多实用的 非标准的库函数。用户要尽可能熟悉库函数。 从函数的参数形式看,可分为有参函数和无 参函数
• 函数与函数之间是平行的独立的,不能在一 个函数中定义另一个函数(所谓嵌套定义)。 • 函数可以互相调用(不能调用 main 函数), 被调用的函数可以调用别的函数(嵌套调用), 并可以调用自己。 • 在程序设计中,常将一些常用的功能模块编 写成函数,存放在函数库中(通常由软件厂商提 供),函数库中的函数称为库函数。除了标准库 函数外,很多软件公司还为用户提供许多实用的 非标准的库函数。用户要尽可能熟悉库函数。 • 从函数的参数形式看,可分为有参函数和无 参函数
8-2函数的定义 无参函数的定义形式 类型标识符函数名()∥{}中称为函数体 {说明部分 语句}∥合}若空缺,则为空函数。 有参函数的定义形式 类型标识符函数名(形式参数表列) 形式参数说明 说明部分 语句}
8-2 函数的定义 • 无参函数的定义形式 类型标识符 函数名()//{}中称为函数体 { 说明部分 语句 }//{}若空缺,则为空函数。 • 有参函数的定义形式 类型标识符 函数名(形式参数表列) 形式参数说明 {说明部分 语句 }
8-3函数的参数和函数的返回值 形式参数和实际参数 int sum(xy)∥xy为形参 Int x, y ∥形参说明 i int z; z-X+y; return(z);) main( i int a, b, c 返回值 a=45;b=24;c=sm(a,b);/ab为实参 printf(a=%d, b=%/od, c=%d,n, a,b, c), j
8-3 函数的参数和函数的返回值 形式参数和实际参数 int sum( x,y ) // x,y为形参 int x, y ; // 形参说明 { int z ; z=x+y ; return(z) ; } main( ) { int a , b ,c ; a=45 ; b=24 ; c = sum (a, b) ; // a,b为实参 printf(“a=%d, b=%d, c=%d,\n”,a,b,c) ; } 返回值
函数的形参与函数的实参数据类型应一致 实参变量对形参变量的数据传递是单向的值 传递。只是由实参将它的值传递给形参,而不 能由形参传回给实参 函数调用时,系统给形参分配内存单元,调 用结束后,形参单元被释放 实参在函数调用前后不会变化 Turbo c中形参说明与形参合并 int sum(int x, int y)
• 函数的形参与函数的实参数据类型应一致 • 实参变量对形参变量的数据传递是单向的值 传递。只是由实参将它的值传递给形参,而不 能由形参传回给实参 •函数调用时,系统给形参分配内存单元,调 用结束后,形参单元被释放 •实参在函数调用前后不会变化 •Turbo C中形参说明与形参合并 int sum ( int x, int y ) { … }
函数的返回值 函数的返回值是通过 return语句获得的。定义 函数时应指定函数的类型(如缺省,则约定为整 型),函数的类型决定函数返回值的类型。 函数中若没有 return语句,并不表示函数不带 回返回值,而只是不带回一个用户所需要的、有 用的函数值。如果明确函数不带回值,则须在定 义函数时,在函数名前冠以void,表示空类型 或无类型。如 void putchar( c) char c
函数的返回值 函数的返回值是通过return 语句获得的。定义 函数时应指定函数的类型(如缺省,则约定为整 型),函数的类型决定函数返回值的类型。 函数中若没有return语句,并不表示函数不带 回返回值,而只是不带回一个用户所需要的、有 用的函数值。如果明确函数不带回值,则须在定 义函数时,在函数名前冠以 void ,表示空类型 或无类型。如: void putchar( c) char c ; { … … }
8-4函数的调用 函数调用的一般形式 无参函数调用:函数名() 有参函数调用:函数名(实参表列) 实参与形参须一一对应
8-4 函数的调用 函数调用的一般形式 无参函数调用 : 函数名 ( ); 有参函数调用 : 函数名 (实参表列); 实参与形参须一一对应
#include 例:函数mm 追 i int a, b, c scanf("%od, %od", &a, &b) c=max(a, b) 调用max函数 printf("Max is od"e: a、b为实参, c=max(10, a+b); int max(int x, int y) 定义max函数, x、y为形参, int z 均为int型 return(z)
例 :函数调用时的数据传递。 #include main() { int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("Max is %d",c); } int max(int x, int y) { int z; z=x>y?x:y; return(z); } 调用 max 函数, a 、b 为实参, c=max(10,a+b); 定义 max 函数, x 、y 为形参, 均为 int 型
函数调用方式 按函数调用在程序中的位置来分,可分为 函数语句如 getchar() 函数表达式如 c=100+sum(a,b):; 函数的返回值 函数参数如 作为另一函数的参数 printf(%/dn", sum(a, b) suml= sum(c+sum(a, b);
函数调用方式 按函数调用在程序中的位置来分,可分为 • 函数语句 如 getchar( ) ; • 函数表达式 如 c =100+sum(a,b) ; • 函数参数 如 printf(”%d\n”,sum(a,b)) ; sum1= sum(c+sum(a,b) ; 函数的返回值 作为另一函数的参数
对被凋函数的说明 若函数1调用函数2,我们通常称函数1为主调函 数,函数2为被调函数。 被调函数如果是库函数,则须在主调函数所在 的源程序文件的开头用 include命令包含相应的头 文件(如 include)。 ·被调函数如果是用户自己定义的函数,且被调 函数与主调函数同在一个源文件中,则一般需在 主调函数中对被调函数的类型作说明 说明的形式:三种 函数调用 语句前没有 注意:与函数调用语句的区别 类型标识符 三种可以省略说明的情况
对被凋函数的说明 •若函数1调用函数2,我们通常称函数1为主调函 数,函数2为被调函数。 •被调函数如果是库函数,则须在主调函数所在 的源程序文件的开头用include命令包含相应的头 文件(如 include )。 •被调函数如果是用户自己定义的函数,且被调 函数与主调函数同在一个源文件中,则一般需在 主调函数中对被调函数的类型作说明。 说明的形式:三种 注意:与函数调用语句的区别 三种可以省略说明的情况 函数调用 语句前没有 类型标识符