“函数”可以将实现了某一功能,并需要反复使用的代码包装起来形成一个功能模块(即写成一个“函数”),那么当程序中需要使用该功能时,只需要写一条语句,调用实现该功能的函数即可
函数的定义:
返回值类型 函数名(参数1类型 参数1名称,参数2类型 参数2名称......)
语句组(“函数体”)}
如果函数不需要返回值,则“返回值类型”可以写“void"
函数调用和return语句
调用函数:
函数名(参数1,参数2,...)
对函数的调用,也是一个表达式。函数调用表达式的值,由函数内部的return语句决定。return语句语法如下:
return0返回值;
return语句的功能是结束函数的执行,并将”返回值“作为结果返回。”返回值“是常量,变量或复杂的表达式均可。如果函数返回值类型为”void“,return语句就直接写:
return;
函数的声明
一般来说函数的定义必须出现在函数调用之前,否则调用语句编译出错
函数的调用语句前面有函数的声明即可,不一定要有定义!
返回值类型 函数名(参数1类型 参数1名称, 参数2类型 参数2名称.....)
如:int Max(int a,int b);
double Sqrt(double); //参数名称可以省略。函数名称也可以称为“函数原型”
函数参数的传递
函数的形参是实参的一个拷贝,且形参的改变不会影响到实参(除非形参类型是数组或引用
例:#include<iostream>
using namespace std;
void Swap(int a,int b)
{int tmp;
tmp=a;
a=b;
b=tmp;
cout<<"In Swap: a="<<a<<"b="<<b<<endl;}
int main(){
int a=4,b=5;
Swap(a,b);
cout<<"After swaping:a="<<a<<"b="<<b;
return 0;}
In Swap:a=5 b=4
After swaping:a=4 b=5
一维数组作为函数的参数
一维数组作为形参时的写法:类型名 数组名[]
不用写出数组的元素个数。如:
void printArray(int a[]){}
数组作为函数参数时,是传引用,即形参数组改变了,实参数组也会改变
二维数组作为函数的参数
二维数组作为形参时,必须写明数组有多少列,可以不用写明有多少行
必须写明列数,编译器才能根据下标算出元素的地址。
a[i][j]的地址:
数组首地址+i*N*sizeof(a[0][0])+j*sizeof(a[0][0])(N是数组列数)
形参数组的首地址是实参数组的首地址
递归
一个函数,自己可以调用自己,就是递归
如:int Factorial(int n)
{if (n<2)
return 1;//终止条件
else
return n*Factorial(n-1);
} //cout<<Factorial(5);==>120
递归函数需要有终止条件,否则就会无穷递归导致程序无法终止甚至崩溃
求斐波那契数列第n项
int Fib(int n)
{
if (n==1||n==2)
return 1;
else
return Fib(n-1)+Fib(n-2);}