函数的调用
函数调用的一般形式
调用函数的一般形式为
函数名([实参表列])
如果是调用无参函数,则实参表列可以没有,但圆括号不能省略。如果实参表列包含多个实参,则各参数间用逗号隔开。实参与形参个数应相等,类型应匹配。实参与形参按顺序对应,一对一的传递数据。
函数调用的方式
1、函数语句
把函数调用单独作为一个语句,并不要求函数带回一个值,只是要求函数完成一定的操作。
2、函数表达式
函数出现在一个表达式中,这时要求函数带回一个确定的值以参加表达式的运算。
3、函数参数
函数调用作为一个函数的实参。
对被调用函数的声明和函数原型
在一个函数中调用另一个函数需要具备的条件
1、首先被调用的函数必须是已存在的函数。
2、如果调用库函数,需要在本文件开头使用#include指令将有关头文件包含到本文件中。
3、如果使用自定义的函数,而该函数与调用它的的函数在同一个程序文件中,且位置在主调函数之后,则必须在调用此函数之前对被调用的函数作声明。
所谓函数声明,就是在函数尚未定义的情况下,事先将该函数的有关信息通知编译系统,以便使编译能正常进行。
例1:向计算机输入两个数,用一个函数求出两数之和。
using namespace std;
int main()
{
float add(float x, float y); //声明函数
float a, b, c;
cout << "请输入a和b:";
cin >> a >> b;
c = add(a, b);
cout << "a + b = " << c << endl;
return 0;
}
float add(float x, float y) //定义函数
{
return (x + y);
}
结果如下:
需要注意,对函数的定义和声明不是同一回事。定义是指对函数功能的确立,包括指定函数名、函数类型、形参及其类型、函数体等,它是一个完整的独立的函数单位。而声明的作用则是把函数的名字、函数类型以及形参的个数、类型和顺序通知编译系统,以便在对包含函数调用的语句进行编译时,据此对其进行对照检查。
在函数声明时,也可以不写形参名,只写形参的类型。
函数原型
函数原型的主要作用是根据函数原型在程序编译阶段对调用函数的合法性进行全面检查。
函数原型的一般形式为
1、函数类型 函数名(参数类型1,参数类型2,...)
2、函数类型 函数名(参数类型1 参数名1,参数类型2 参数名2,...)
编译系统并不检查函数名,因此函数名是什么都无所谓。
应当保证函数原型与函数首部写法上的一致,即函数类型、函数名、参数个数、参数类型和参数顺序必须相同。在函数调用时,函数名、实参类型和实参个数应与函数原型一致。
如果被调用函数的定义出现在主调函数之前,可以不必加以声明。
函数声明的位置可以在调用函数所在的函数中,也可以在函数之外。如果函数声明放在函数的外部,在所有函数定义之前,这就是对函数的外部声明,则在各个主调函数中不必对所调用的函数再作声明
函数的嵌套调用
C++不允许对函数作嵌套定义,也就是说在一个函数中不能完整地包含另一个函数。在一个程序中每一个函数的定义都是互相平行和独立的。
虽然C++不能嵌套定义函数,但可以嵌套调用函数,也就是说,在调用一个函数的过程中,又调用另一个函数。
例2:输入四个数字,找出其中最大的数,用一个函数来实现。
#include <iostream>
using namespace std;
int main()
{
int max_four(int a, int b, int c, int d);
int a, b, c, d, max;
cout << "请输入四个整数:";
cin >> a >> b >> c >> d;
max = max_four(a, b, c, d);
cout << "最大的数为:" << max << endl;
return 0;
}
int max(int x, int y)
{
return (x > y ? x : y);
}
int max_four(int a, int b, int c, int d)
{
int m;
m = max(a, b);
m = max(m, c);
m = max(m, d);
return m;
}
结果如下:
函数的递归调用
在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。
int f(int x)
{
int y,z;
z=f(y);
return (2*z)
}
以上是直接调用函数本身,是无终止的调用,程序中不应出现这种无终止的递归调用,而只应出现有限次数的、有终止的递归调用。可以用if语句来控制,只有在某一条件成立时才继续执行递归调用,否则就不再继续。
包含递归调用的函数称为递归函数。
例3:有5个人坐在一起,问第五个人多少岁,他说比第四个人大两岁。问第四个人岁数,他说比第三个人大两岁。问第三个人岁数,他说比第二个人大两岁。问第二个人岁数,他说比第一个人大两岁,问第一个人岁数,他说他10岁。请问第五个人多少岁。
#include <iostream>
using namespace std;
int main()
{
int age(int n);
cout << "第五个人" << age(5) << "岁!" << endl;
return 0;
}
int age(int n)
{
int a;
if (n == 1)
a = 10;
else
a = age(n - 1) + 2;
return a;
}
//结果为:第五个人18岁!