工信版(中职)编程语言基础------C++模块5教学课件.ppt
YCF(中职)编程语言基础-C+模块5教学课件模块模块5 函数函数任务任务1函数的定义和分类函数的定义和分类任务任务2函数的声明函数的声明任务任务3函数的调用函数的调用任务任务4函数的嵌套调用函数的嵌套调用任务任务5函数的递归调用函数的递归调用任务任务6函数的参数传递函数的参数传递下一页返回模块模块5 函数函数任务任务7函数的返回值函数的返回值任务任务8函数的重载函数的重载任务任务9内联函数和带默认参数的函数内联函数和带默认参数的函数任务任务10局部变量和全局变量局部变量和全局变量上一页返回任务任务1 函数的定义和分类函数的定义和分类在面向过程的程序设计中,一个在面向过程的程序设计中,一个在面向过程的程序设计中,一个在面向过程的程序设计中,一个C+C+程序由一个或多个函数组成。当程序由一个或多个函数组成。当程序由一个或多个函数组成。当程序由一个或多个函数组成。当程序开始运行时,系统自动调用主函数程序开始运行时,系统自动调用主函数程序开始运行时,系统自动调用主函数程序开始运行时,系统自动调用主函数.主函数可以调用子函数,子函主函数可以调用子函数,子函主函数可以调用子函数,子函主函数可以调用子函数,子函数还可以调用其他子函数数还可以调用其他子函数数还可以调用其他子函数数还可以调用其他子函数.调用其他函数的函数称为主调函数,被其他调用其他函数的函数称为主调函数,被其他调用其他函数的函数称为主调函数,被其他调用其他函数的函数称为主调函数,被其他函数调用的函数称为被调函数。函数调用的函数称为被调函数。函数调用的函数称为被调函数。函数调用的函数称为被调函数。5.1.1 函数的定义函数的定义 在在在在C+C+程序中,使用函数前首先需要声明函数,然后定义函数。声明程序中,使用函数前首先需要声明函数,然后定义函数。声明程序中,使用函数前首先需要声明函数,然后定义函数。声明程序中,使用函数前首先需要声明函数,然后定义函数。声明函数,就是告诉编译器函数的名称、类型和形式参数。定义函数,就函数,就是告诉编译器函数的名称、类型和形式参数。定义函数,就函数,就是告诉编译器函数的名称、类型和形式参数。定义函数,就函数,就是告诉编译器函数的名称、类型和形式参数。定义函数,就是告诉编译器函数所做的工作。是告诉编译器函数所做的工作。是告诉编译器函数所做的工作。是告诉编译器函数所做的工作。注意注意注意注意:函数不能调用没有声明的函数函数不能调用没有声明的函数函数不能调用没有声明的函数函数不能调用没有声明的函数下一页返回任务任务1 函数的定义和分类函数的定义和分类在在在在C+C+程序中,定义一个函数的格式如下程序中,定义一个函数的格式如下程序中,定义一个函数的格式如下程序中,定义一个函数的格式如下:类型类型类型类型 函数名函数名函数名函数名(形式参数表形式参数表形式参数表形式参数表)语句序列语句序列语句序列语句序列 上一页 下一页返回任务任务1 函数的定义和分类函数的定义和分类类型、函数名、圆括号和形式参数表组成厂函数头。用花括号括起来类型、函数名、圆括号和形式参数表组成厂函数头。用花括号括起来类型、函数名、圆括号和形式参数表组成厂函数头。用花括号括起来类型、函数名、圆括号和形式参数表组成厂函数头。用花括号括起来的语句序列则组成了函数体的语句序列则组成了函数体的语句序列则组成了函数体的语句序列则组成了函数体 函数的类型,即该函数返回值的类型。函数的类型,即该函数返回值的类型。函数的类型,即该函数返回值的类型。函数的类型,即该函数返回值的类型。函数的返回值是需要返回给主调函数处理的结果,由函数的返回值是需要返回给主调函数处理的结果,由函数的返回值是需要返回给主调函数处理的结果,由函数的返回值是需要返回给主调函数处理的结果,由returnreturn语句给语句给语句给语句给出。该函数没有返回值时,函数的类型为出。该函数没有返回值时,函数的类型为出。该函数没有返回值时,函数的类型为出。该函数没有返回值时,函数的类型为voidvoid,可不写,可不写,可不写,可不写returnreturn语句。语句。语句。语句。每个函数都有类型,如果没有明确指定,则类型为每个函数都有类型,如果没有明确指定,则类型为每个函数都有类型,如果没有明确指定,则类型为每个函数都有类型,如果没有明确指定,则类型为int.int.函数名是一个标识符,在命名时,其中主函数的名称应取编译器默认函数名是一个标识符,在命名时,其中主函数的名称应取编译器默认函数名是一个标识符,在命名时,其中主函数的名称应取编译器默认函数名是一个标识符,在命名时,其中主函数的名称应取编译器默认的名称的名称的名称的名称mainmain。语句序列可以有。语句序列可以有。语句序列可以有。语句序列可以有0 0条、条、条、条、1 1条或多条语句。当是条或多条语句。当是条或多条语句。当是条或多条语句。当是0 0条语句时,条语句时,条语句时,条语句时,该函数称作空函数。形式参数表由该函数称作空函数。形式参数表由该函数称作空函数。形式参数表由该函数称作空函数。形式参数表由0 0个、个、个、个、1 1个或多个参数组成,内容如个或多个参数组成,内容如个或多个参数组成,内容如个或多个参数组成,内容如下下下下:类型类型类型类型1 1形式参数名形式参数名形式参数名形式参数名1 1,类型,类型,类型,类型2 2形式参数名形式参数名形式参数名形式参数名2 2,类型,类型,类型,类型n n形式参数名形式参数名形式参数名形式参数名n n上一页 下一页返回任务任务1 函数的定义和分类函数的定义和分类 其中类型其中类型其中类型其中类型1 1说明了对应形式参数说明了对应形式参数说明了对应形式参数说明了对应形式参数1 1的数据类型。的数据类型。的数据类型。的数据类型。形式参数又称形参,将函数需要处理的数据、影响函数功能的因素形式参数又称形参,将函数需要处理的数据、影响函数功能的因素形式参数又称形参,将函数需要处理的数据、影响函数功能的因素形式参数又称形参,将函数需要处理的数据、影响函数功能的因素和函数处理的结果作为形参,实现主调函数与被调函数之间的联系。和函数处理的结果作为形参,实现主调函数与被调函数之间的联系。和函数处理的结果作为形参,实现主调函数与被调函数之间的联系。和函数处理的结果作为形参,实现主调函数与被调函数之间的联系。没有形参的函数,可以在形参表的位置填上没有形参的函数,可以在形参表的位置填上没有形参的函数,可以在形参表的位置填上没有形参的函数,可以在形参表的位置填上voidvoid或保留空自,但形参或保留空自,但形参或保留空自,但形参或保留空自,但形参表两边的圆括号不可省略。形参在该函数被调用时,由主调函数初始表两边的圆括号不可省略。形参在该函数被调用时,由主调函数初始表两边的圆括号不可省略。形参在该函数被调用时,由主调函数初始表两边的圆括号不可省略。形参在该函数被调用时,由主调函数初始化。在函数没有被调用时,形参只是一个符号。它标示着该函数将可化。在函数没有被调用时,形参只是一个符号。它标示着该函数将可化。在函数没有被调用时,形参只是一个符号。它标示着该函数将可化。在函数没有被调用时,形参只是一个符号。它标示着该函数将可以从主调函数那里获取什么数据。在实际调用时,主调函数将把实际以从主调函数那里获取什么数据。在实际调用时,主调函数将把实际以从主调函数那里获取什么数据。在实际调用时,主调函数将把实际以从主调函数那里获取什么数据。在实际调用时,主调函数将把实际参数赋给形参,每个函数都是一个功能独立的模块,绝对不允许在一参数赋给形参,每个函数都是一个功能独立的模块,绝对不允许在一参数赋给形参,每个函数都是一个功能独立的模块,绝对不允许在一参数赋给形参,每个函数都是一个功能独立的模块,绝对不允许在一个函数体内定义另一个函数。个函数体内定义另一个函数。个函数体内定义另一个函数。个函数体内定义另一个函数。上一页 下一页返回任务任务1 函数的定义和分类函数的定义和分类【例例例例5 5一一一一1 1】函数的定义函数的定义函数的定义函数的定义/用于计算一个长方形的面积。其中用于计算一个长方形的面积。其中用于计算一个长方形的面积。其中用于计算一个长方形的面积。其中a,ba,b分别对应于长方形的长和宽。分别对应于长方形的长和宽。分别对应于长方形的长和宽。分别对应于长方形的长和宽。double area(double a,double b)double area(double a,double b)double s;double s;s=a*b;s=a*b;return s;return s;上一页 下一页返回任务任务1 函数的定义和分类函数的定义和分类5.1.2 函数的分类函数的分类 C+C+中的函数分为标准库函数和用户自定义函数。标准库函数由中的函数分为标准库函数和用户自定义函数。标准库函数由中的函数分为标准库函数和用户自定义函数。标准库函数由中的函数分为标准库函数和用户自定义函数。标准库函数由C+C+系统提供,可以直接使用,但需要在程序中包含相应的头文件系统提供,可以直接使用,但需要在程序中包含相应的头文件系统提供,可以直接使用,但需要在程序中包含相应的头文件系统提供,可以直接使用,但需要在程序中包含相应的头文件;用户自用户自用户自用户自定义函数是由用户自己根据需要编写的。定义函数是由用户自己根据需要编写的。定义函数是由用户自己根据需要编写的。定义函数是由用户自己根据需要编写的。表表表表5-15-1给出厂标准库函数中每给出厂标准库函数中每给出厂标准库函数中每给出厂标准库函数中每个函数的名称、原型、对应的数学表示及功能个函数的名称、原型、对应的数学表示及功能个函数的名称、原型、对应的数学表示及功能个函数的名称、原型、对应的数学表示及功能上一页 下一页返回任务任务1 函数的定义和分类函数的定义和分类 在程序中任何位置调用一个系统函数或用户函数时,其调用格式应与在程序中任何位置调用一个系统函数或用户函数时,其调用格式应与在程序中任何位置调用一个系统函数或用户函数时,其调用格式应与在程序中任何位置调用一个系统函数或用户函数时,其调用格式应与它的函数原型相一致,即它的函数原型相一致,即它的函数原型相一致,即它的函数原型相一致,即:()其中所使用的圆括号为函数调用运算符,其中所使用的圆括号为函数调用运算符,其中所使用的圆括号为函数调用运算符,其中所使用的圆括号为函数调用运算符,为为为为0 0个个个个(即即即即没有没有没有没有)、一个或多个用逗号分隔的实参表达式,实参表达式的个数与函、一个或多个用逗号分隔的实参表达式,实参表达式的个数与函、一个或多个用逗号分隔的实参表达式,实参表达式的个数与函、一个或多个用逗号分隔的实参表达式,实参表达式的个数与函数原型中参数表所含的参数的个数相同。如调用数原型中参数表所含的参数的个数相同。如调用数原型中参数表所含的参数的个数相同。如调用数原型中参数表所含的参数的个数相同。如调用absabs函数时,实参表函数时,实参表函数时,实参表函数时,实参表达式表中应当有并且只有一个参数达式表中应当有并且只有一个参数达式表中应当有并且只有一个参数达式表中应当有并且只有一个参数(暂不考虑缺省参数的情况暂不考虑缺省参数的情况暂不考虑缺省参数的情况暂不考虑缺省参数的情况););调用调用调用调用powpow函数时,实参表达式表中应该包含两个表达式函数时,实参表达式表中应该包含两个表达式函数时,实参表达式表中应该包含两个表达式函数时,实参表达式表中应该包含两个表达式;调用调用调用调用randrand函数时,函数时,函数时,函数时,实参表达式表应为空。实参表达式表应为空。实参表达式表应为空。实参表达式表应为空。一个函数调用可以单独作为一个表达式,也可以作为表达式中的一一个函数调用可以单独作为一个表达式,也可以作为表达式中的一一个函数调用可以单独作为一个表达式,也可以作为表达式中的一一个函数调用可以单独作为一个表达式,也可以作为表达式中的一个数据项存在,就如同在表达式中使用一个常量或一个变量的情况一个数据项存在,就如同在表达式中使用一个常量或一个变量的情况一个数据项存在,就如同在表达式中使用一个常量或一个变量的情况一个数据项存在,就如同在表达式中使用一个常量或一个变量的情况一样。样。样。样。上一页 下一页返回任务任务1 函数的定义和分类函数的定义和分类如:如:如:如:(1)exit(1);/(1)exit(1);/作为单独表达式使用作为单独表达式使用作为单独表达式使用作为单独表达式使用(2)k=abs(nl);/(2)k=abs(nl);/作为赋值号右边的表达式作为赋值号右边的表达式作为赋值号右边的表达式作为赋值号右边的表达式(3)coutsqrt(x)+1endl;/(3)coutsqrt(x)+1endl;/作为输出数据项中的一个数据作为输出数据项中的一个数据作为输出数据项中的一个数据作为输出数据项中的一个数据(4)y=3*exp(x/2-1)+a/(4)y=3*exp(x/2-1)+a/作为表达式中的一个数据作为表达式中的一个数据作为表达式中的一个数据作为表达式中的一个数据(5)return pow(3,4);/(5)return pow(3,4);/作为返回数据作为返回数据作为返回数据作为返回数据上一页 下一页返回任务任务1 函数的定义和分类函数的定义和分类 由于一个函数调用也是一个表达式,而有的函数是由于一个函数调用也是一个表达式,而有的函数是由于一个函数调用也是一个表达式,而有的函数是由于一个函数调用也是一个表达式,而有的函数是voidvoid类型的,调用类型的,调用类型的,调用类型的,调用它不返回任何值,所以这样的表达式是无值的,除此之外,表达式都它不返回任何值,所以这样的表达式是无值的,除此之外,表达式都它不返回任何值,所以这样的表达式是无值的,除此之外,表达式都它不返回任何值,所以这样的表达式是无值的,除此之外,表达式都是有值的。如函数调用表达式是有值的。如函数调用表达式是有值的。如函数调用表达式是有值的。如函数调用表达式exit(1)exit(1)和和和和srand(10)srand(10)都是无值表达式。无都是无值表达式。无都是无值表达式。无都是无值表达式。无值表达式并不是无用的,通过函数调用虽然不返回值,但能够实现一值表达式并不是无用的,通过函数调用虽然不返回值,但能够实现一值表达式并不是无用的,通过函数调用虽然不返回值,但能够实现一值表达式并不是无用的,通过函数调用虽然不返回值,但能够实现一定的操作功能。定的操作功能。定的操作功能。定的操作功能。一个函数调用中的每个实参表达式可以是任何形式的表达式,如可以一个函数调用中的每个实参表达式可以是任何形式的表达式,如可以一个函数调用中的每个实参表达式可以是任何形式的表达式,如可以一个函数调用中的每个实参表达式可以是任何形式的表达式,如可以是一个常量、一个变量、一个函数调用或者一个带运算的一般表达式。是一个常量、一个变量、一个函数调用或者一个带运算的一般表达式。是一个常量、一个变量、一个函数调用或者一个带运算的一般表达式。是一个常量、一个变量、一个函数调用或者一个带运算的一般表达式。如如如如(1)abs(1)abs(一一一一24)/24)/实参是一个常数实参是一个常数实参是一个常数实参是一个常数(2)abs(x)/(2)abs(x)/实参是一个变量实参是一个变量实参是一个变量实参是一个变量(3)abs(3*x+4)/(3)abs(3*x+4)/实参是一个带运算的一般表达式实参是一个带运算的一般表达式实参是一个带运算的一般表达式实参是一个带运算的一般表达式上一页 下一页返回任务任务1 函数的定义和分类函数的定义和分类(4)sqrt(fabs(y)/sqrt(4)sqrt(fabs(y)/sqrt函数调用的实参是一个函数调用函数调用的实参是一个函数调用函数调用的实参是一个函数调用函数调用的实参是一个函数调用(5)pow(x+1,5)/(5)pow(x+1,5)/一个为一般表达式,另一个为常数一个为一般表达式,另一个为常数一个为一般表达式,另一个为常数一个为一般表达式,另一个为常数(6)sin(x/3.14159/180)/(6)sin(x/3.14159/180)/实参为一般表达式实参为一般表达式实参为一般表达式实参为一般表达式(7)log(fabs(nl)+7*sqrt(n2)-1)/(7)log(fabs(nl)+7*sqrt(n2)-1)/实参为带函数调用的表达式实参为带函数调用的表达式实参为带函数调用的表达式实参为带函数调用的表达式上一页 下一页返回任务任务1 函数的定义和分类函数的定义和分类 当程序运行中执行到一个函数调用时,首先依次计算出实参表中每个当程序运行中执行到一个函数调用时,首先依次计算出实参表中每个当程序运行中执行到一个函数调用时,首先依次计算出实参表中每个当程序运行中执行到一个函数调用时,首先依次计算出实参表中每个表达式的值,接着把每个值对应传送给函数定义参数表中的每个参数表达式的值,接着把每个值对应传送给函数定义参数表中的每个参数表达式的值,接着把每个值对应传送给函数定义参数表中的每个参数表达式的值,接着把每个值对应传送给函数定义参数表中的每个参数变量,此时若实参值与参量的类型不同,则该值被自动转换成参数变变量,此时若实参值与参量的类型不同,则该值被自动转换成参数变变量,此时若实参值与参量的类型不同,则该值被自动转换成参数变变量,此时若实参值与参量的类型不同,则该值被自动转换成参数变量的类型后再传送,然后转去执行函数定义的定义体,当执行到定义量的类型后再传送,然后转去执行函数定义的定义体,当执行到定义量的类型后再传送,然后转去执行函数定义的定义体,当执行到定义量的类型后再传送,然后转去执行函数定义的定义体,当执行到定义体中的二体中的二体中的二体中的二turnturn语句后就结束该函数的调用过程,返回该语句中表达式语句后就结束该函数的调用过程,返回该语句中表达式语句后就结束该函数的调用过程,返回该语句中表达式语句后就结束该函数的调用过程,返回该语句中表达式(若存在的话若存在的话若存在的话若存在的话)的值,或者当执行到定义体最后的右花括号时,也同样的值,或者当执行到定义体最后的右花括号时,也同样的值,或者当执行到定义体最后的右花括号时,也同样的值,或者当执行到定义体最后的右花括号时,也同样结束调用过程,但不会返回任何值。一个函数被调用后通常得到一个结束调用过程,但不会返回任何值。一个函数被调用后通常得到一个结束调用过程,但不会返回任何值。一个函数被调用后通常得到一个结束调用过程,但不会返回任何值。一个函数被调用后通常得到一个值,然后再利用这个值进行其他运算。值,然后再利用这个值进行其他运算。值,然后再利用这个值进行其他运算。值,然后再利用这个值进行其他运算。上一页返回任务任务2 函数的声明函数的声明声明函数,一般采用声明函数原型。形式如下声明函数,一般采用声明函数原型。形式如下声明函数,一般采用声明函数原型。形式如下声明函数,一般采用声明函数原型。形式如下:类型函数名类型函数名类型函数名类型函数名(形式参数表形式参数表形式参数表形式参数表););函数原型中的类型、函数名和形参表必须与定义该函数时完全一致,函数原型中的类型、函数名和形参表必须与定义该函数时完全一致,函数原型中的类型、函数名和形参表必须与定义该函数时完全一致,函数原型中的类型、函数名和形参表必须与定义该函数时完全一致,但函数原型中可以不包含参数名,而只包含形参的类型。注意,语句但函数原型中可以不包含参数名,而只包含形参的类型。注意,语句但函数原型中可以不包含参数名,而只包含形参的类型。注意,语句但函数原型中可以不包含参数名,而只包含形参的类型。注意,语句以分号结束。以分号结束。以分号结束。以分号结束。例如例如例如例如:double rectanglearea(douhle a,douhle h);:double rectanglearea(douhle a,douhle h);double rectanglearea(double double rectanglearea(double,double);double);声明函数还有另外一种方法,即在其他函数调用之前定义函数。但声明函数还有另外一种方法,即在其他函数调用之前定义函数。但声明函数还有另外一种方法,即在其他函数调用之前定义函数。但声明函数还有另外一种方法,即在其他函数调用之前定义函数。但是在函数体内声明的函数原型只对拥有这个函数体的函数有效。如果是在函数体内声明的函数原型只对拥有这个函数体的函数有效。如果是在函数体内声明的函数原型只对拥有这个函数体的函数有效。如果是在函数体内声明的函数原型只对拥有这个函数体的函数有效。如果其他函数也需要调用它,必须另外声明函数其他函数也需要调用它,必须另外声明函数其他函数也需要调用它,必须另外声明函数其他函数也需要调用它,必须另外声明函数下一页返回任务任务2 函数的声明函数的声明【例例例例5 5一一一一2 2】函数的声明示例函数的声明示例函数的声明示例函数的声明示例int dec(int x,int y);int dec(int x,int y);/函数声明语句函数声明语句函数声明语句函数声明语句void out(int x,int y);void out(int x,int y);void funl()void funl()/函数声明语句函数声明语句函数声明语句函数声明语句void main()void main()coutdec(5,3)endl;coutdec(5,3)endl;/调用函数调用函数调用函数调用函数decdecout(5,3);out(5,3);/调用函数调用函数调用函数调用函数outoutfunl();funl();/调用函数调用函数调用函数调用函数funlfunl 上一页 下一页返回任务任务2 函数的声明函数的声明int dec(int x,int y)int dec(int x,int y)return(x-y);return(x-y);void out(int x,int y)void out(int x,int y)cout x-yendl;cout x-yendl;coutx+yendl;coutx+yendl;void funl()void funl()cout“hear is fun 1 n”;cout“hear is fun 1 n”;上一页 下一页返回任务任务2 函数的声明函数的声明程序输出结果:程序输出结果:程序输出结果:程序输出结果:2 22 28 8Here is fun1Here is fun1 注意注意注意注意:函数原型说明的目的是让编译程序能够找到要使用的函数。如函数原型说明的目的是让编译程序能够找到要使用的函数。如函数原型说明的目的是让编译程序能够找到要使用的函数。如函数原型说明的目的是让编译程序能够找到要使用的函数。如果函数调用出现在定义函数程序段之前,则必须在调用前对函数进行果函数调用出现在定义函数程序段之前,则必须在调用前对函数进行果函数调用出现在定义函数程序段之前,则必须在调用前对函数进行果函数调用出现在定义函数程序段之前,则必须在调用前对函数进行原型说明。如果函数调用出现在定义函数程序段之后,则可以对函数原型说明。如果函数调用出现在定义函数程序段之后,则可以对函数原型说明。如果函数调用出现在定义函数程序段之后,则可以对函数原型说明。如果函数调用出现在定义函数程序段之后,则可以对函数进行原型说明,也可以不说明。例如,下述写法就无需函数原型说明。进行原型说明,也可以不说明。例如,下述写法就无需函数原型说明。进行原型说明,也可以不说明。例如,下述写法就无需函数原型说明。进行原型说明,也可以不说明。例如,下述写法就无需函数原型说明。上一页 下一页返回任务任务2 函数的声明函数的声明int dec(int x,int y)int dec(int x,int y)/定义在前,使用在后定义在前,使用在后定义在前,使用在后定义在前,使用在后return(x-y);return(x-y);void out(int x,int y)void out(int x,int y)cout x-yendl;cout x-yendl;coutx+yendl;coutx+yendl;void funl()void funl()cout“hear is funn”;cout“hear is funn”;void main()void main()上一页 下一页返回任务任务2 函数的声明函数的声明 coutdec(5,3);coutdec(5,3);/调用函数调用函数调用函数调用函数decdecout(5,3);out(5,3);/调用函数调用函数调用函数调用函数outoutfunl();funl();/调用函数调用函数调用函数调用函数funlfunl 函数的函数的函数的函数的“定义定义定义定义”和和和和“说明说明说明说明”不是一回事。不是一回事。不是一回事。不是一回事。(1)(1)函数的函数的函数的函数的“定义定义定义定义”是指一个函数功能的确立,包括指定函数名、函是指一个函数功能的确立,包括指定函数名、函是指一个函数功能的确立,包括指定函数名、函是指一个函数功能的确立,包括指定函数名、函数返回值的类型、形参及其类型、函数体等。它是一个完整的、独立数返回值的类型、形参及其类型、函数体等。它是一个完整的、独立数返回值的类型、形参及其类型、函数体等。它是一个完整的、独立数返回值的类型、形参及其类型、函数体等。它是一个完整的、独立的函数单位的函数单位的函数单位的函数单位上一页 下一页返回任务任务2 函数的声明函数的声明 (2)(2)函数的函数的函数的函数的“说明说明说明说明”则只是对已经定义好的函数的返回值进行类型的则只是对已经定义好的函数的返回值进行类型的则只是对已经定义好的函数的返回值进行类型的则只是对已经定义好的函数的返回值进行类型的说明,它包括函数名、函数类型和一对括号,而不包括形参和函数体。说明,它包括函数名、函数类型和一对括号,而不包括形参和函数体。说明,它包括函数名、函数类型和一对括号,而不包括形参和函数体。说明,它包括函数名、函数类型和一对括号,而不包括形参和函数体。函数说明的作用是告诉系统,在本函数中将要用到的函数是什么类型,函数说明的作用是告诉系统,在本函数中将要用到的函数是什么类型,函数说明的作用是告诉系统,在本函数中将要用到的函数是什么类型,函数说明的作用是告诉系统,在本函数中将要用到的函数是什么类型,也就是说明该函数的返回值的类型,以便在主调函数中按此类型对函也就是说明该函数的返回值的类型,以便在主调函数中按此类型对函也就是说明该函数的返回值的类型,以便在主调函数中按此类型对函也就是说明该函数的返回值的类型,以便在主调函数中按此类型对函数值作相应的处理。数值作相应的处理。数值作相应的处理。数值作相应的处理。上一页返回任务任务3 函数的调用函数的调用5.3.1 如何调用函数如何调用函数 任何任何任何任何C+C+应用程序都包含且只含一个应用程序都包含且只含一个应用程序都包含且只含一个应用程序都包含且只含一个mainmain函数。该函数是程序的人口,函数。该函数是程序的人口,函数。该函数是程序的人口,函数。该函数是程序的人口,可以带有参数和返回值,其参数也称为命令行参数。可以带有参数和返回值,其参数也称为命令行参数。可以带有参数和返回值,其参数也称为命令行参数。可以带有参数和返回值,其参数也称为命令行参数。mainmain函数由操作函数由操作函数由操作函数由操作系统启动,其返回值传递给操作系统。系统启动,其返回值传递给操作系统。系统启动,其返回值传递给操作系统。系统启动,其返回值传递给操作系统。mainmain函数可以调用其他自定义函数可以调用其他自定义函数可以调用其他自定义函数可以调用其他自定义函数或库函数,这些函数之间可以互相调用,但不能调用函数或库函数,这些函数之间可以互相调用,但不能调用函数或库函数,这些函数之间可以互相调用,但不能调用函数或库函数,这些函数之间可以互相调用,但不能调用mainmain函数。函数。函数。函数。函数调用时,要指定函数名并提供实际参数函数调用时,要指定函数名并提供实际参数函数调用时,要指定函数名并提供实际参数函数调用时,要指定函数名并提供实际参数(实参实参实参实参)信息。函数名对信息。函数名对信息。函数名对信息。函数名对应函数的人口地址,实际参数提供执行任务所需的信息。实际参数与应函数的人口地址,实际参数提供执行任务所需的信息。实际参数与应函数的人口地址,实际参数提供执行任务所需的信息。实际参数与应函数的人口地址,实际参数提供执行任务所需的信息。实际参数与形式参数的个数、类型、位置必须一致。下面的例子演示如何调用函形式参数的个数、类型、位置必须一致。下面的例子演示如何调用函形式参数的个数、类型、位置必须一致。下面的例子演示如何调用函形式参数的个数、类型、位置必须一致。下面的例子演示如何调用函数数数数add()add()和和和和printwelcome()printwelcome()下一页返回任务任务3 函数的调用函数的调用/*/*/函数调用函数调用函数调用函数调用/ex3-1.cpp/ex3-1.cpp/*/*#include“iosream.h”#include“iosream.h”using namespace std;using namespace std;/*/*double add(double x,double y)return(x+y);double add(double x,double y)return(x+y);/函数定义函数定义函数定义函数定义void printwelcome()cout“welcome to C+!”endl;/void printwelcome()cout“welcome to C+!”endl;/函数定义函数定义函数定义函数定义/*/*上一页 下一页返回任务任务3 函数的调用函数的调用int main()int main()double a=2.5,b=3.5;double a=2.5,b=3.5;/定义两个定义两个定义两个定义两个doubledouble型变量型变量型变量型变量coutadd(5.0,b)endl;/coutadd(5.0,b)endl;/调用函数调用函数调用函数调用函数add,add,求实参求实参求实参求实参5.05.0与与与与b b之和之和之和之和double result=add(a,b);/double result=add(a,b);/调用函数调用函数调用函数调用函数addadd求实参求实参求实参求实参a a与与与与b b之和,结果赋给之和,结果赋给之和,结果赋给之和,结果赋给resultresult /result/result的类型应与函数返回的类型匹配的类型应与函数返回的类型匹配的类型应与函数返回的类型匹配的类型应与函数返回的类型匹配print welcome();/print welcome();/调用调用调用调用printwelcome printwelcome 函数函数函数函数return();return();上一页 下一页返回任务任务3 函数的调用函数的调用运行结果:运行结果:运行结果:运行结果:8.58.5welcome to C+!welcome to C+!5.3.2 函数调用的格式函数调用的格式函数调用的一般形式为函数调用的一般形式为函数调用的一般形式为函数调用的一般形式为:函数名函数名函数名函数名(实参数实参数实参数实参数)如果调用的是无参函数,则实参表可略去,但函数的括号不能省,如果调用的是无参函数,则实参表可略去,但函数的括号不能省,如果调用的是无参函数,则实参表可略去,但函数的括号不能省,如果调用的是无参函数,则实参表可略去,但函数的括号不能省,如果实参表中有多个参数,则它们之间用逗号隔开,实参的类型、个如果实参表中有多个参数,则它们之间用逗号隔开,实参的类型、个如果实参表中有多个参数,则它们之间用逗号隔开,实参的类型、个如果实参表中有多个参数,则它们之间用逗号隔开,实参的类型、个数应与形参顺序一一对应。数应与形参顺序一一对应。数应与形参顺序一一对应。数应与形参顺序一一对应。函数通过下列函数通过下列函数通过下列函数通过下列3 3种方式完成函数调用。种方式完成函数调用。种方式完成函数调用。种方式完成函数调用。上一页 下一页返回任务任务3 函数的调用函数的调用(1)(1)函数调用语句函数调用语句函数调用语句函数调用语句:即在一个函数的调用后面加上即在一个函数的调用后面加上即在一个函数的调用后面加上即在一个函数的调用后面加上“;”;”作为一个语句。作为一个语句。作为一个语句。作为一个语句。如如如如printf();printf();(2)(2)函数表达式函数表达式函数表达式函数表达式:即函数出现在一个表达式中,这种表达式称为函数即函数出现在一个表达式中,这种表达式称为函数即函数出现在一个表达式中,这种表达式称为函数即函数出现在一个表达式中,这种表达式称为函数表达式,但这时要求函数带回一个确定的值以参加表达式的运算。如表达式,但这时要求函数带回一个确定的值以参加表达式的运算。如表达式,但这时要求函数带回一个确定的值以参加表达式的运算。如表达式,但这时要求函数带回一个确定的值以参加表达式的运算。如c=2*max(a,b);c=2*max(a,b);(3)(3)函数参数函数参数函数参数函数参数:以函数的调用作为一个函数的实参。如以函数的调用作为一个函数的实参。如以函数的调用作为一个函数的实参。如以函数的调用作为一个函数的实参。如m m=max(a,max(b,c);=max(a,max(b,c);上一页 下一页返回任务任务3 函数的调用函数的调用5.3.3 调用函数时的前提条件调用函数时的前提条件在一个函数中调用另一个函数,需要具备的条件有以下几点。在一个函数中调用另一个函数,需要具备的条件有以下几点。在一个函数中调用另一个函数,需要具备的条件有以下几点。在一个函数中调用另一个函数,需要具备的条件有以下几点。(1)(1)被调用的函数必须是已经存在的函数。如果调用库函数,一般还被调用的函数必须是已经存在的函数。如果调用库函数,一般还被调用的函数必须是已经存在的函数。如果调用库函数,一般还被调用的函数必须是已经存在的函数。如果调用库函数,一般还应在本文件的开头用应在本文件的开头用应在本文件的开头用应在本文件的开头用#include#include命令将调用有关库函数时所需用到的信命令将调用有关库函数时所需用到的信命令将调用有关库函数时所需用到的信命令将调用有关库函数时所需用到的信息包含到本文件中。如需要调用输人输出库函数时,在文件的开头应息包含到本文件中。如需要调用输人输出库函数时,在文件的开头应息包含到本文件中。如需要调用输人输出库函数时,在文件的开头应息包含到本文件中。如需要调用输人输出库函数时,在文件的开头应有有有有#include;#include;需要调用数学函数库时,在文件头应有需要调用数学函数库时,在文件头应有需要调用数学函数库时,在文件头应有需要调用数学函数库时,在文件头应有#include#include(2)(2)如果调用用户自己定义的函数,则必须对被调函数的原型进行说明。如果调用用户自己定义的函数,则必须对被调函数的原型进行说明。如果调用用户自己定义的函数,则必须对被调函数的原型进行说明。如果调用用户自己定义的函数,则必须对被调函数的原型进行说明。函数的原型包括函数的原型包括函数的原型包括函数的原型包括:函数值的类型标识符、被调用函数名函数值的类型标识符、被调用函数名函数值的类型标识符、被调用函数名函数值的类型标识符、被调用函数名(形参及其类型形参及其类型形参及其类型形参及其类型表表表表)。(3)(3)对函数原型的说明通常放在程序的顶部,也可