前言
考虑这样的问题,你需要实现三个功能,而且每个功能需要使用多次,那么如果使用循环的话是不是不能很好的控制每个功能的次数,不使用循环的话又会使得代码很长。这时,就可以使用函数来解决。
接下以这几个例子来讲解函数:
例一:
double cal_dis(int x_1,int x_2,int y_1,int y_2){
int ls=(x_1-x_2)*(x_1-x_2)+(y_1-y_2)*(y_1-y_2);
return sqrt(ls);
}
例二:
void change(int& x,int& y){
int ls=y;
y=x,x=ls;
return;
}
例三:
int jia(int a,int b);
int jia(int a,int b){
return a+b;
}
一、函数的定义与使用
具体的定义可以去 百度百科 看看。
几个名词与组成
- 函数可以接受若干值,叫做函数的参数。
- 函数可以返回某个值,叫做函数的返回值,其类型叫做函数的返回值类型。
- 函数有一个名称,叫做函数名称。
所以函数的组成就很清晰了,包括函数的返回值类型,函数名,函数的参数列表以及函数的主体。
两种定义方式
函数定义时有两种方式,一种是在定义时就把整个函数打完(声明+定义),结构如下:
返回值类型 函数名(参数1,参数2,......){
若干语句
return 某个值;
}
另一种是先声明这个函数,再在另一个地方补全函数,如例三。(先声明。后定义)
注意,return
在这里起到结束函数的作用,后面的语句将不再执行。
不要忘记打return
!
两种传参方式
观察例一与例二,可以发现例二在数据类型后面加了个 &
,其意义在于使得参数在函数里改变时,原来的值也会改变,而例一就不会,这样就可以应对更多的情况。
函数的作用范围
函数的作用范围与全局变量类似,只要在声明的后面即可调用。
函数的调用
函数的调用如下:
函数名(参数1,......);
用语言来描述就是:先写函数名,在其后面加上 ()
,在括号中我们把参数按顺序填入,两个参数中间用逗号隔开。在这里,函数的调用可以看成一个表达式(不过不一定有值)。
例:
int jia(int a,int b){
return a+b;
}
int main(){
int x=0,y=0;
cin>>x>>y;
int z=jia(x,y);
cout<<z;
return 0;
}
在这个例子中,演示了如何调用函数。
特别地,当我们在函数中调用这个函数时,就实现了递归(这里不讲)。
二、函数的理解
我们可以把函数看做看成一个加工厂,你给他一些原料(指参数或一些全局变量),它就会进行加工(指各种运算)。加工完后,它可能把成品直接给你(指返回值),也可能没有成品(指没有返回值)。
这就是一个较为形象的函数理解(确信)。
其实也可以理解成出入口啥的,只要自己能够理解就行。
三、函数的意义
函数在某些作用上与循环是有些类似的,但函数能干更多的事,比如说递归(比较主要的作用)。另外,函数可以让代码看起来比较专门化,比如你原来的代码是这样的:
\[\require{AMScd} \begin{CD} 开始\\ @VVV \\ 功能一\\ @VVV \\ 功能二 \\ @VVV \\ 功能一 \\ @VVV \\ 功能三 \\ @VVV \\ 功能一 \\ @VVV \\ 结束 \end{CD} \]它们在主函数中顺序写出。
现在,我们让函数一实现功能一,函数二实现功能二,函数三实现功能三,就可以写成下面这样:
void func1(){
;
}
void func2(){
;
}
void func3(){
;
}
int main(){
开始部分;
func1();
func2();
func1();
func3();
func1();
结束;
}
怎么样,是不是少打了很多东西,这样就可以节约一些打代码的时间,使代码的复用率更高。