1.标准库函数
下面以sqrt函数为例,解说下标准函数:
sqrt函数用于计算一个数的平方根。sqrt函数从一个数(如9.0)开始,计算出它的平方根(如3.0)。函数开始时使用的值称为该函数的实参,它计算后得到的值称为返回值。有的函数可能有多个实参,但函数的返回值不能超过1个。如果将函数视为小程序,那么实参就相当于输入,返回值则相当于输出在程序中使用函数时,例如:
the_root=sqrt(9.0);
这里,表达式sqr(9.0)称为一个函数调用。函数调用中的实参可以是一个常量,也可以是一个变量,甚至可以是一个复杂的表达式。函数调用本身是一个表达式,可像他任何表达式那样使用。可以在任何位置使用函数调用,只要它能返回指定类型的值。
如果要使用sqrt函数时,要使用头文件cmath,即#include<cmath>。其中include预编译指令。尖括号一内的名称是头文件的名称。一个库的头文件为编译器提供了关于这个库的特定信息, include预编译指令将这些信息传递给编译器。这样一来,链接器( Linker)就能在库中找到函数的目标码,以便将库正确地链接到用户的程序。例如, iostream库包含了cin和cout的定义,而且这个库的头文件称为 iostream;math库包含了sqrt以及其他大量数学函数的定义,而且这个库的头文件称为 cmath。如果在程序中使用了某个库的标准函数,就必须包含一条预编译指令,指定那个库的头文件。
下表总结了几个标准库函数:
名称 |
说明 |
实参类型 |
返回值类型 |
示例 |
值 |
库的头文件 |
sqrt |
平方根 |
double |
double |
sqrt(4.0) |
2.0 |
cmath |
pow |
乘方 |
double |
double |
pow(2.0,3.0) |
8.0 |
cmath |
abs |
取int值的绝对值 |
int |
Int |
abs(-7) |
7 |
cstdlib |
abs(7) |
7 |
|||||
labs |
取long值的绝对值 |
long |
long |
labs(-70000) |
70000 |
cstdlib |
labs(70000) |
70000 |
|||||
fabs |
取double值的绝对值 |
double |
double |
fabs(-7.5) |
7.5 |
cmath |
fabs(7.5) |
7.5 |
|||||
cell |
向上取整 |
double |
double |
cell(3.2) |
4.0 |
cmath |
cell(3.9) |
4.0 |
|||||
floor |
向下取整 |
double |
double |
floor(3.2) |
3.0 |
cmath |
floor(3.9) |
3.0 |
【例如】
double result, x=3.0, y=2.0; pow(x, y); cout << result;
运行结果result=9.0
pow函数始终返回 double类型的值,而不是int类型。还要注意,函数pow需要两个实参。一个函数可以有任意多个实参。每个实参位置都具有指定的类型。函数调用中使用的实参应该具有这一指定类型。
2.自定义函数
我们自己编写了一个函数,即这个函数是存在的,这叫作函数的声明(Declaration)。其次,我们要告诉电脑这个函数是怎么运作的,这叫作函数的定义(Definition)。关于这点我是这样认为的函数的声明就相当于告诉你后面有个帅哥,函数的定义就相当于告诉你那个帅哥到底长什么样子。
(1)函数的声明
作用: 告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。
函数的声明可以多次,但是函数的定义只能有一次
函数原型的结构就是:
返回值类型 函数名(参数表);
函数声明同变量的声明一样,是一句语句。所以在语句结束要加上分号。
(2)函数调用
调用函数将导致函数的执行。函数 main 在程序启动时自动调用,但所有其他函数必须由函数调用语句执行。当一个函数被调用时,程序分支到该函数并执行其主体中的语句。
语法: 函数名(参数)
(3) 形参实参
在声明一个函数的时候,参数是没有实际值的,只是起到一个占位的作用,所以称为形式参数,简称“形参”;
在主调函数中调用一个函数时,函数名后面括号中的参数(可以是一个表达式)称为实际参数(actual parameter,简称实参)。
实参是主调函数赋给被调函数的特定值。
实参可以是常量、变量或复杂的表达式,不管是哪种情况,在调用时实参必须是一个确定的值。
说明:
1. 实参变量对形参变量的数据传递是"值传递",即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中实参、形参分占不同的单元。实参与形参一一对应,类型应相同或赋值兼容。
2. 不同的函数中可以使用相同的变量名和形参名,他们是不同的变量。
(4)函数的定义
语法:
返回值类型 函数名 (参数列表)
没有分号结尾的函数原型
{
函数体语句
return表达式
}
返回值类型 :一个函数可以返回一个值。
在函数定义中函数名:给函数起个名称。
参数列表:使用该函数时,传入的数据。
函数体语句:花括号内的代码,函数内需要执行的语句。
return表达式: 和返回值类型挂钩,函数执行完后,返回相应的数据
【实例】
include<iostream>using namespace std;
int max(int x, int y);//函数的声明 ,x,y是形参
int main() { int x, y, z; while (1) { cout << "请输入两个不同数值,以空格分开 "; cin >> x >> y; z = max(x, y); //函数的调用 ,此时x.y是实参 cout << "最大值是:" << z << endl;
} } int max(int x, int y)//函数的定义 { int z; if (x > y) z = x;
else z = y;
return z;
}