定义:
一些程序段在程序编写过程中反复出现,这些程序段可以作为相对独立的整体。可以用一个标识符给它起一个名字,程序中出现该程序段的地方,只需简单写上其标识符即可。称之为子程序。
子程序使用好处:1/缩短程序2/节省内存空间3/减少程序编译时间
而且这样编译的程序结构清晰,逻辑关系明确,编写/阅读/调试/修改都有极大的好处。
函数定义的例子:
① int xn1(int x,int y) //数据类型逐一说明
{
return x>y?x:y; //返回一个值
}
使用时将两个值分别赋值给x和y(实参将值传递给形参),在该函数体中进行运算,结束后返回一个值。
② void xn2(int x,int y) //数据类型为void,无返回值
{
}
使用方法:
1/在主函数之前写好。
int xn(int x,int y)
{
//省略
}
2/在主函数之前声明,在主函数后写好该函数。(典型结构)
int xn(int x,int y); //注意加分号
int main()
{
//省略
}
int xn(int x,int y)
{
//省略
}
1/按值传递:实参赋值给形参,形参进行运算并不影响实参。 //int xn(int x,int y)
2/地址传递:函数定义时将形参说明成指针,参数传递是按地址传递。形参与实参指向同一个地址,函数调用过程中任何改变会影响到实参。 //int xn(int *x,int *y)
3/引用传递:不再是实参拷贝副本给实参,而是让形参直接指向实参。
既可以使得对形参的任何操作都能改变相应的数据,又使得函数调用显得方便自然。 //int xn(int &x,int&y)
重要函数之递归函数:
定义:
函数直接调用其自身,称为直接递归;函数间接调用其自身,称为间接递归。
例:用递归算法求x^n;
将x^n分解为x*x^(n-1);
同理x^(n-1)=x*x^(n-2);
……
边界:X^0=1;
int xn(int a)
{
if (a==0) return 0; //递归边界
else return x*xn(n-1); //递归式
}
递归式与递归边界是用好递归函数的关键所在,因此应用递归函数解题时要找出数据之间变化的规律。
模板:
#include <bits/stdc++.h>
using namespace std;
int xn(); //函数声明
int main()
{
//省略
}
int xn()
{
//省略
} //函数定义
定义函数时找出题中的数学关系即可。
Ⅰ:全局变量:定义在函数外部,可以在文件中位于全局变量定义后面的任何函数中使用。
对应局部变量:定义在函数内部,其存储空间是临时分配的,函数执行完毕其值不再保留。
局部变量与全局变量可以重名。
#include <iostream>
using namespace std;
int a; //a即为全局变量;
int main()
{
int x; //x即为局部变量;
}
Ⅱ:常用的函数类型有int(返回整数值) , bool(返回1或 0即true or false) ,void (无返回值),double(返回双精度数值) , float(返回单精度数值)。
Ⅲ:注意:一个函数仅能返回一个结果或者不返回。