一、什么是函数?
一个函数能实现一个特定的功能
一个C++程序无论大小,由一个或多个函数构成,而且其中有且仅有一个主函数main(),主函数可以调用其他函数,其他函数也可以相互调用。同一个函数可以被一个或多个函数多次调用。
1、函数的定义:
一般格式如下:
数据类型函数名(参数列表)
{函数体
}
(1)函数的数据类型就是函数的返回值类型。如果没有返回值,那么它的数据类型就是void.
(2)函数名的命名规则和变量名的命名规则一样。一个好的函数名应当尽量做到“见名知义”
(3)参数列表中的参数可以是0个,也可以是多个。如果是多个参数,参数之间用逗县隔开。这里参数列表称为形式参数。
(4)函数不允许嵌套定义(但允许嵌套使用),即不允许在函数内部定义新的函数
(5)函数的返回值由return语句返回。如果函数不需要返回值,那么定义函数时可以将返回值类型写为void。
2.函数的声明
数据类型函数名(参数列表);
(1)变量在使用前需要声明,函数在调用前也同样需要声明。
(2)函数的定义也是声明的一种方式。在函数定义之后,可以直接调用这个函数。
(3)如果在函数定义之前调用函数,就必须先声明这个函数。
(4)在声明的最后要用分号作为语句的结束。
3、函数的调用
函数名(参数列表);
(1)括号中的参数列表称为实际参数,是传递给调用函数的,必须严格对应函数定义(或声明)时的参数列表,包括数据类型、参数个数以及参数顺序。
(2)参数列表(实际参数)可以是常量、表达式,也可以是已有确定值的变量、数组等。如果参数列表中包含多个参数,则各参数之间要用逗号隔开。调用无参函数时参数列表可以没有任何参数,但括号不能省略。
(3)函数的定义不允许嵌套,但函数的调用可以嵌套,即在一个函数中可以调用其他的函数。
(4)函数调用形式可以出现在表达式中。
(5)函数调用形式可以是语句。
(6)函数调用形式可以作为返回值出现在其他函数调用中。
1.嵌套调用在C++中,虽然不允许进行嵌套定义,但是可以嵌套调用函数。也就是说,在一个函数体内可以调用另外一个函数。
4、函数的参数
在调用函数时,大多数情况下,主调函数和被调函数之间会发生数据传递关系,函数的参数就是函数与函数之间实现数据传递的“接口”。
1.形式参数与实际参数
(1)形式参数。形式参数是指形式上存在的参数,简称形参。在定义函数时的参数列表指的就是形式参数。
(2)实际参数。实际参数是指实际存在的参数,简称实参。在调用函数时的参数列表指的就是实际参数。也就是说,在实际调用函数时,传递给函数的参数的值。
2.参数传递
(1)传值调用。这种调用方式是将实参的数据传递给形参。函数在被调用时,将实参复制一个副本传递给形参,形参的值可以改变,但不会影响主调函数的实参值。也就是说,传值参数的传递方向只是从实参到形参的单向值传递。
(2)传址调用。这种调用方式是将实参变量的地址值传递给形参而非传递副本给形参。让形参直接指向实参,可以理解为实参和形参是共用一个内存地址。因此,修改定义函数中的形参,主调函数中的实参也会随之改变。也就是说,传址参数的传递向是双向值传递。
二、引入函数的作用
1、有利于代码重复使用,提高程序的效率,在编写程序时,常常会发现完成某一的程序段会被重复使用。此时,可以将这些程序段作为相对独立的整体,给它起一个函数名。在程序中出现该程序段的地方,只需要写上其函数名即可实现相应的功能。这样既可以减少重复代码的编写,也可以提高程序的效率。
2、模块化程序设计,便于阅读和管理。按照模块化程序设计思想,将一个程序划分成若干个函数(或程序)模块,每一个函数模块都完成一部分功能。不同的函数模块甚至可以交给不同的人合作完成,这样不仅方便编写与阅读、管理与调试等,还可以提高程序的效率。
三、常用的库函数
C++中提供了很多常用的系统函数,常见的有以下几种。
(1)max(a,b)返回a和b中的较大值,头文件algorithm。
(2)min(a,b)返回a和b中的较小值,头文件algorithm。
(3)swap(a,b)交换a和b的值,头文件algorithm。
(4)sqrt(x)返回x开根号后的值,返回值类型是double,头文件cmath。
(5)pow(x,y)返回x”,返回值类型是double,头文件cmath。
(6)abs(x)返回x的绝对值,返回值类型是int,头文件cmath。
(7)setw(n)设置输出域宽,n表示字段宽度,头文件iomanip。
这些系统提供的函数为我们编写程序提供了很大的方便。但这些函数只是常用的基本函数。在程序设计过程中,经常需要自定义一些函数来完成期待实现的功能。