第四章画数 函数是C+程序的基本模块。可将一些功能相对独立的 或经常使用的操作或运算抽象出来,定义为函数。使用时只 要考虑其功能和使用接囗即可。 在结构化程序设计中,函数是将任务进行模块划分的基 本单位。 在面向对象的程序设计中,类中所封装的操作是用函数 进行描述的,因此函数在C++程序中具有非常重要的意义。 要掌握函数的使用,必须理解函数调用时的内部实现机 制,以及与此相关的内存分配机制、变量生命期和作用域。 本章还将介绍关于函数重载的概念,介绍递归算法、内 联函数、默认参数函数以及多文件组织、编译预处理、工程 文件的概念和运行库函数
函数是C++程序的基本模块。可将一些功能相对独立的 或经常使用的操作或运算抽象出来,定义为函数。使用时只 要考虑其功能和使用接口即可。 在结构化程序设计中,函数是将任务进行模块划分的基 本单位。 在面向对象的程序设计中,类中所封装的操作是用函数 进行描述的,因此函数在C++程序中具有非常重要的意义。 要掌握函数的使用,必须理解函数调用时的内部实现机 制,以及与此相关的内存分配机制、变量生命期和作用域。 本章还将介绍关于函数重载的概念,介绍递归算法、内 联函数、默认参数函数以及多文件组织、编译预处理、工程 文件的概念和运行库函数。 第四章 函数
第四章画数 4.1函数的定义与调用 4.6函数的一些高级议题 4.2函数的参数传递 4.7C++的系统库函数 返回值及函数原型说明 4.3全局变量和局部变量 4.8头文件与多文件结构 4.4函数调用机制 4.9编译预处理 4.5作用域与存储类型
第四章 函数 4.1 函数的定义与调用 4. 5 作用域与存储类型 4.4 函数调用机制 4.3 全局变量和局部变量 4.2 函数的参数传递, 返回值及函数原型说明 4.9 编译预处理 4. 8 头文件与多文件结构 4. 7 C++的系统库函数 4. 6 函数的一些高级议题
41画数的定义与僩用瓜 411函数概述 4.1.2函数的定义 413函数的调用 D U
4.1 函数的定义与调用 4.1.1 函数概述 4.1.2 函数的定义 4.1.3 函数的调用
4.1.1妈数述 函数是C++程序的基本组成模块。 通过函数,可以把一个复杂任务分解成为若干 个易于解决的小任务。充分体现结构化程序设计由 粗到精,逐步细化的设计思想。 组成C+程序的若干函数中,有一个称为 maino ( Winmaino)函数,是程序执行的入囗,它可以调 用其他函数。而其他一般函数既可以调用也可以被调 用。函数之间的调用关系见下图
4.1.1 函数概述 函数是C++程序的基本组成模块。 通过函数,可以把一个复杂任务分解成为若干 个易于解决的小任务。充分体现结构化程序设计由 粗到精,逐步细化的设计思想。 组成C++程序的若干函数中,有一个称为main() (Winmain())函数,是程序执行的入口,它可以调 用其他函数。而其他一般函数既可以调用也可以被调 用。函数之间的调用关系见下图:
4.1.1晶数旒述 main( fun( fund fun30 fun1 1o fun2_10 fun_20 图4.1函数调用层次关系
4.1.1 函数概述 main ( ) fun1( ) fun2( ) fun3( ) fun1_1( ) fun2_1( ) fun2_2( ) 图4.1 函数调用层次关系
4.1.1画数攏述 函数按其是否系统预定义分为两类,一类是编译 系统预定义的,称为库函数或标准函数,如一些常 用的数学计算函数、字符串处理函数、图形处理函 数、标准输入输出函数等。这些库函数都按功能分 类,集中说明在不同的头文件中。用户只需在自己 的程序中包含某个头文件,就可直接使用该文件中 定义的函数。另一类是用户自定义函数,用户可以 根据需要将某个具有相对独立功能的程序定义为函 数。 4.1.1 结束 D U
4.1.1 函数概述 4.1.1 结束 函数按其是否系统预定义分为两类,一类是编译 系统预定义的,称为库函数或标准函数,如一些常 用的数学计算函数、字符串处理函数、图形处理函 数、标准输入输出函数等。这些库函数都按功能分 类,集中说明在不同的头文件中。用户只需在自己 的程序中包含某个头文件,就可直接使用该文件中 定义的函数。另一类是用户自定义函数,用户可以 根据需要将某个具有相对独立功能的程序定义为函 数
4.1.2菡数的定改 函数定义格式如下: 如定义一个求最大值的函数max 数据类型函数名(形式参数列表) float max (float x, float y) float zi 函数体; if(x >y) z=xi else z return z; 说明: 1、函数的数据类型规定函数执行后所返回值的类型,如果没有值需要返回 ,则定义为void; 2、函数名是函数的标识,必须应该符合C++标识符的定义,而且取名应做 到“见名知意” 3、形式参数列表中,如果有多个参数,用逗号分隔,并且每个参数要说明 数据类型,这些参数在调用之前没有实际的存储空间,也就没有具体的内 容,只有在在调用时候,才临时分配空间,并从调用函数中接收数据的实 际内容。一个函数也可以没有任何参数。 4、函数体的语句来描述了函数功能的实现的代码,函数执行完需要返回的 值是通过 return语句来实现
4.1.2 函数的定义 函数定义格式如下: 数据类型 函数名(形式参数列表) { 函数体; } 说明: 1、函数的数据类型规定函数执行后所返回值的类型,如果没有值需要返回 ,则定义为void; 2、函数名是函数的标识,必须应该符合C++标识符的定义,而且取名应做 到“见名知意” 3、形式参数列表中,如果有多个参数,用逗号分隔,并且每个参数要说明 数据类型,这些参数在调用之前没有实际的存储空间,也就没有具体的内 容,只有在在调用时候,才临时分配空间,并从调用函数中接收数据的实 际内容。一个函数也可以没有任何参数。 4、函数体的语句来描述了函数功能的实现的代码,函数执行完需要返回的 值是通过return语句来实现。 如定义一个求最大值的函数 max float max(float x, float y) { float z; if(x > y) z = x; else z = y; return z; }
提示 定义函数时可能会涉及若干个变量,究竟哪些变量应当 作为函数的参数?哪些应当定义在函数体内?这有一个原则: 作为一个相对独立的模块,函数在使用时完全可以被看成 “罘匣子”,除了输入输出外,其他部分可不必关心。从函 数的定义看出,函数头正是用来反映函数的功能和使用接口 它所定义的是“做什么”,在这部分必须明确“罘匣子”的 输入输出部分,输出就是函数的返回值,输入就是参数。因 此,只有那些功能上起自变量作用的变量才必须作为参数定 义在参数表中;函数体中具体描述“如何做”,因此除参数 之外的为实现算法所需用的变量应当定义在函数体内。 C+不允许函数的嵌套定义,即在一个函数中定义另 个函数。 D U
定义函数时可能会涉及若干个变量,究竟哪些变量应当 作为函数的参数?哪些应当定义在函数体内?这有一个原则: 作为一个相对独立的模块,函数在使用时完全可以被看成 “黑匣子”,除了输入输出外,其他部分可不必关心。从函 数的定义看出,函数头正是用来反映函数的功能和使用接口, 它所定义的是“做什么”,在这部分必须明确“黑匣子”的 输入输出部分,输出就是函数的返回值,输入就是参数。因 此,只有那些功能上起自变量作用的变量才必须作为参数定 义在参数表中;函数体中具体描述“如何做”,因此除参数 之外的为实现算法所需用的变量应当定义在函数体内。 C++中不允许函数的嵌套定义,即在一个函数中定义另一 个函数。 提示
4.1.3数的調用 在C艹中,除了主函数外,其他任何函数都不能单独作为程 序运行。任何函数功能的实现都是通过被主函数直接或间接 调用进行的。所谓函数调用,就是使程序转去执行函数体。 无参函数的调用格式为 函数名(); 有参函数的调用格式为 函数名(实际参数表) 其中实际参数简称实参,用来将实际参数的值传递给形参, 因此可以是常量、具有值的变量或表达式
4.1.3 函数的调用 在C++中,除了主函数外,其他任何函数都不能单独作为程 序运行。任何函数功能的实现都是通过被主函数直接或间接 调用进行的。所谓函数调用,就是使程序转去执行函数体。 无参函数的调用格式为: 函数名( ); 有参函数的调用格式为: 函数名(实际参数表); 其中实际参数简称实参,用来将实际参数的值传递给形参, 因此可以是常量、具有值的变量或表达式
4.13菡搬的調用 【例4.1】输入两个实数,输出其中较大的数。其中求两个实 数中的较大数用函数完成。 程序如下: main() include iostream . h> 函数 float max float x float y) return(x>=y?x; 调用 函数 max(2547)max(2547) void maino float x, yi return 4.7 cout>x>>yi cout<<x<<和”<<y<<中较大数为:” <<max(xy)<<endl;
4.1.3 函数的调用 main( ) 函数 调用 max(2.5,4.7 ) 函数 max(2.5,4.7 ) 主程序后 return 4.7 续语句 【例4.1】 输入两个实数,输出其中较大的数。其中求两个实 数中的较大数用函数完成。 程序如下: #include float max(float x,float y) { return(x>=y?x:y); } void main() { float x,y; cout>x>>y; cout<<x<<“和”<<y<< “中较大数为:” <<max(x,y)<<endl; }