第6章函 第6章函数 6.1概述 6,2函数的定义和调用 6.3函数的嵌套调用 6,4函数的递归调用 6.5变量的作用域和存储类别 6,6小结 Back
第6章 函 数 第 6 章 函数 • 6.1 概述 • 6.2 函数的定义和调用 • 6.3 函数的嵌套调用 • 6.4 函数的递归调用 • 6.5 变量的作用域和存储类别 • 6.6 小 结
第6章函 6.1概述 C程序是由一组或是变量或是函数的外部对象组成的。函数是一 个自我包含的完成一定相关功能的执行代码段。它完成一个特定的 任务并可选择是否将一个值返回调用程序。在C语言中,子程序被 称为函数,一个C程序一般由多个函数组成,其中必须有且仅有 个名为main的主函数,其余为被mai函数或其它函数调用的函数, 无论main函数位于程序中什么位置,C程序总是从main函数开始执 行。main函数可调用其它函数来实现所需的功能.被main函数调用 的函数分为两类:一类是由系统提供的标准库函数,例如标准输出 函数( scanf, printf,.)数学计算函数(sin,fabs,sqrt,…)数 据格式转换函数(atoi,atof, sscabf, sprintf,,)字符串处理函 数( strlen, strcpy, strcmp,)和文件读写函数( fread, fwrite, fopen,…)等。这类函数可以由用户程序直接调用;另类是用户在 自己的程序中定义中定义的函数,即需要由用户自己编写的函数。 Back
第6章 函 数 6.1 概述 • C程序是由一组或是变量或是函数的外部对象组成的。 函数是一 个自我包含的完成一定相关功能的执行代码段。它完成一个特定的 任务并可选择是否将一个值返回调用程序。在C语言中,子程序被 称为函数,一个C程序一般由多个函数组成,其中必须有且仅有一 个名为main的主函数,其余为被main函数或其它函数调用的函数, 无论main函数位于程序中什么位置,C程序总是从main函数开始执 行。 main函数可调用其它函数来实现所需的功能.被 main函数调用 的函数分为两类:一类是由系统提供的标准库函数,例如标准输出 函数( scanf, printf,…)数学计算函数(sin , fabs, sqrt,… )数 据格式转换函数( atoi , atof, sscabf, sprintf,… )字符串处理函 数( strlen, strcpy, strcmp,… )和文件读写函数( fread ,fwrite, fopen,… )等。这类函数可以由用户程序直接调用;另类是用户在 自己的程序中定义中定义的函数,即需要由用户自己编写的函数
8第6章函数 C程序中的函数具有以下特性: 1C语言中,程序是由函数来实现的 函数可分为(1):标准库函数(2)用户自定义函数 2在C语言中,至少要有一个main()函数,程序的执行是从man()函 数开始的。 函数的调用过程如图 f() f11() main() f1(; 1(; 2l( n2( f11(; f31( n22(); Back
第6章 函 数 C程序中的函数具有以下特性: 1.C语言中,程序是由函数来实现的。 函数可分为(1):标准库函数(2)用户自定义函数。 2.在C语言中,至少要有一个main ( )函数,程序的执行是从main( )函 数开始的。 函数的调用过程如图: f11( ) {…} f21( ) {…} f31( ) {…} f1( ) {… f11( ); …} f2( ) {… f11( ); f22( ); …} main( ) {… f1( ); … f2( ); …}
第6章函3 3.每个函数都有唯一的名字(如 square),用这个名字 音可验转去热行盗题数团包類的语;这种梁作称为 main 数中用 square函数,但main函数不可被其它任何函数调 4.一个函数执 行一个特定的任务,此任务是程序必须 成的全部操作中一个独立的操作行为,如将一行正文件 传送到打印机,将一个数组按数值顺序排列,求一个立 方根等等。 5函数的定义是独立的、封闭的。一个函数的定义应该 不受程序其它部分的干预也应不干预其它部分而完成自 身的任务 ·6.函数能给调用程序返回一个值。在程序调用一个函数 时,此函数所包含的语句很会执行,必要时,还能将信 息传回给调用程序 Back
第6章 函 数 • 3.每个函数都有唯一的名字(如square),用这个名字, 程序可以转去执行该函数所包括的语句,这种操作称为 调用函数。一个函数能被另一个函数调用,如在main函 数中用square函数,但main函数不可被其它任何函数调 用。 • 4.一个函数执行一个特定的任务,此任务是程序必须完 成的全部操作中一个独立的操作行为,如将一行正文件 传送到打印机,将一个数组按数值顺序排列,求一个立 方根等等。 • 5.函数的定义是独立的、封闭的。一个函数的定义应该 不受程序其它部分的干预也应不干预其它部分而完成自 身的任务。 • 6.函数能给调用程序返回一个值。在程序调用一个函数 时,此函数所包含的语句很会执行,必要时,还能将信 息传回给调用程序
第6章函数 由此可以得出:模块化程序设计有如下特点: (1)模块相对独立,功能单一,可混合编写也可独立编写 调试 (2)可集体开发,缩短开发周期 (3)开发出的模块,可在不同的应用程序中多次使用,减 少重复劳动,提高开发效率。 (4)测试、更新以模块为单位进行而不会影响其他模块. 、函数的定义与声明 1、定义:[存储类型][数据类型]函数名(带类型的形参名 表) 内部变量说明; 语句; Back
第6章 函 数 由此可以得出:模块化程序设计有如下特点: (1)模块相对独立,功能单一,可混合编写也可独立编写 调试。 (2)可集体开发,缩短开发周期。 (3)开发出的模块,可在不同的应用程序中多次使用,减 少重复劳动,提高开发效率。 (4)测试、更新以模块为单位进行而不会影响其他模块. 一、函数的定义与声明 1、定义:[存储类型] [数据类型] 函数名(带类型的形参名 表) { 内部变量说明; 语句; }
第6章函数 62函数的定义和调用 62.1函数定义的一般形式 1.无参函数的定义形式 类型标识符函数名() 说明部分 语句 2.有参函数定义的一般形式 类型标识符函数名(形式参数列表) 说明部分 语句 3.可以有“空函数”,它的形式为 类型说明符函数名() Back
第6章 函 数 6.2 函数的定义和调用 • 6.2.1函数定义的一般形式 • 1.无参函数的定义形式 • 类型标识符 函数名() • { • 说明部分 • 语句 • } • 2.有参函数定义的一般形式 • 类型标识符 函数名(形式参数列表) • { • 说明部分 • 语句 • } • 3.可以有“空函数” ,它的形式为: • 类型说明符 函数名() • { }
第6章函数 ·【例6.1】: maino printstar(; /*调用 printstarI函数* prl message 倖调用 print-message函数 printstar(; /*调用 printstar函数* printstar( /* printstarI函数*/ printf(.***********Ⅶn"); print message /* print-message函数* printf ("how do you do! \n") Back
第6章 函 数 • 【例6.1】: • main() • { • printstar(); /*调用printstar函数*/ • print_message(); /*调用print-message函数*/ • printstar(); /*调用printstar函数*/ • } • printstar() /*printstar函数*/ • { • printf(" * * * * * * * * * * * * * \n"); • } • print_message() /*print-message函数*/ • { • printf("how do you do !\n "); • }
第6章函数 运行结果如下: how do you do 水水*水水冰水*水 该例中的 printstar和 print message函数都是 无参函数。用“类型标识符”指定函数值的类 型,既函数回来的值的类型。无参函数一般不 需要带回函数值,因此可以不写类型标识符 Back
第6章 函 数 • 运行结果如下: • * * * * * * * * * * * * * • how do you do ! • * * * * * * * * * * * * • 该例中的printstar和print_message函数都是 无参函数。用“类型标识符”指定函数值的类 型,既函数回来的值的类型。无参函数一般不 需要带回函数值,因此可以不写类型标识符
第6章函 【例62】:求两者中的最大者 ° main int a bc: scanf("%od, %od",&a, &b) c=max(a, b) /*调用max函数* printf( int max (int x, int y) /*max函数* nt z: z-X!Xy; return(z); Back
第6章 函 数 • 【例6.2】:求两者中的最大者。 • main() • { • int a,b,c; • scanf("%d,%d",&a,&b); • c=max(a,b); /*调用max函数*/ • printf("min=%d\n",c); • } • int max(int x , int y) /*max函数*/ • { • int z; • z=x>y?x:y; • return(z); • }
第6章函数 该例是一个求x和y二者中大者的函数,x和y为形式 参数,从主调函数把实际参数a和b的参数值传递给被调 用函数中的形式参数x和y。第八行“intx,inty”是对形式 参数作类型说明,指定ⅹ和y为整形。花括弧内是函数体 它包括说明部分和语句部分。请注意,“intz?必须写在 话括弧内,而不能写在花括弧外,也不能将第八、九行 合并写成“ Int x,y,z;”。形式参数的说明应在函数体外。 在函数体的语句中求出z的值(为x和y中大者), return 语句的作用是将z的值作为函数值带回到主调函数中 Return后面的括弧中的值作为函数带回的值(或成函数返 回值)。在函数定义时已指定max函数为整形,在函数体 中定义z为整形,二者是一致的,将z作为函数max的值带 回调用函数。 Back
第6章 函 数 • 该例是一个求x和y二者中大者的函数,x和y为形式 参数,从主调函数把实际参数a和b的参数值传递给被调 用函数中的形式参数x和y。第八行“int x ,int y”是对形式 参数作类型说明,指定x和y为整形。花括弧内是函数体, 它包括说明部分和语句部分。请注意, “int z”必须写在 话括弧内,而不能写在花括弧外,也不能将第八、九行 合并写成“int x,y,z; ” 。形式参数的说明应在函数体外。 在函数体的语句中求出z的值(为x和y中大者),return 语句的作用是将z的值作为函数值带回到主调函数中。 Return后面的括弧中的值作为函数带回的值(或成函数返 回值)。在函数定义时已指定max函数为整形,在函数体 中定义z为整形,二者是一致的,将z作为函数max的值带 回调用函数