函数

前言

考虑这样的问题,你需要实现三个功能,而且每个功能需要使用多次,那么如果使用循环的话是不是不能很好的控制每个功能的次数,不使用循环的话又会使得代码很长。好像讲的有点抽象,具体一点的话,比如你想求平面上两点之间的距离,而且需要在程序的不同位置求好多次,那么是不是并不能用循环来解决,都完完全全的写出来的话又显得太长。

这时,就可以使用函数来解决。


接下以这几个例子来讲解函数:

例一:
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. 函数可以返回某个值,叫做函数的返回值,其类型叫做函数的返回值类型。
  3. 函数有一个名称,叫做函数名称。

所以函数的组成就很清晰了,包括函数的返回值类型,函数名,函数的参数列表以及函数的主体。


两种定义方式

函数定义时有两种方式,一种是在定义时就把整个函数打完(声明+定义),结构如下:

返回值类型 函数名(参数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();
	结束;
}

怎么样,是不是少打了很多东西,这样就可以节约一些打代码的时间,使代码的复用率更高。

end

posted @ 2022-10-24 09:12  杨杨与玉玉  阅读(242)  评论(0)    收藏  举报