当前位置:首页 > C++知识 > 正文内容

【初级篇】函数(一)

亿万年的星光4年前 (2021-01-28)C++知识2244
0.函数的引入

为什么要用函数呢?

比较官方的说法是,过程的复用,你的一段逻辑,你有一段逻辑不断的在复用,就封装成函数去调用它。

通俗的说法就是,把重复的过程集中到一块。例如,大家都学过如何求正方形的面积,有一天老师问你,边长为2的正方形的的面积是多少?你回答是4,老师问你边长为3的正方形的面积是多少?你回答是9。这个过程中,老师不断向你问同一种类型的问题,你利用掌握的原理,从老师那里输入数据,根据原理,进行操作,然后告诉老师答案。

总结:如果你的程序需要重复的去使用一段逻辑,那么就定义成函数。

1.函数的定义

1.1函数的组成

C++的函数有5部分构成。


名称含义是否可省略
函数类型函数的数据类型,一般为int
函数名函数的名称,在C++规定的情况下可以随便起
参数要传入的值
函数体要执行的逻辑
返回值需要返回给调用函数的部分



一段简单函数描述

int  fun (int x)
{
	printf("%d",x);
	
	return 0;
}



1.2 函数各部分详细解释

  • 函数数据类型:表明当前这个函数是什么类型的,如果是int型,那么返回值的地方就要返回一个int类型的数据。如果是double型的,那么返回值就要是各double型

  • 函数名:是自定义的函数名,一般以英文命名,禁止使用数字命名。

  • 参数:表示一个函数的输入部分,不写的时候称为空参。参数可以有一个或者多个,中间用逗号隔开。

  • 函数体:函数的逻辑部分,根据参数进行逻辑计算。

  • 返回值: 进行逻辑运算后的结果要返回给函数调用的地方。返回的数据类型要跟函数的数据类型保持一致。

1.3函数的一个通俗案例

用包饺子的机器来说明,一个包饺子的机器,给它输入面和饺子馅,它就会按照预先设定的逻辑进行包饺子,产出物就是包好的饺子。



在这个过程中,

面和饺子馅就是函数的参数,你必须给饺子机输入面和饺子馅,它才能进行制作饺子的过程。当然你输入韭菜馅,那么你包的就是韭菜馅的饺子,你输入白菜馅,你包的就是白菜馅的饺子。但是,注意的一点就是,你必须输入的是一种馅,你不能往饺子机里扔两块石头啊,这说明,我们要按照要求的类型传参数,不能乱传。

中间包饺子机是逻辑处理过程,只要你的输入是正确的(参数类型正确),他就会按照预定逻辑进行制作饺子,也就是函数体部分。

最后输出的就是包好的饺子,它会呈现给制作饺子的人(输入面和饺子馅)的人。包好的饺子就是返回值

1.4 函数的位置

在C++,函数的位置可以有两个,一个是在main函数前面,一个是在main函数后面,需要注意的是,如果你的函数写在后面,必须要在main函数前面加一个函数的定义(不写函数体),以分号结尾。


#include<iostream>
#include<cstdio>
using namespace std;
int  fun (int x)   //函数定义在前
{
	printf("%d",x);
	return 0;
}
int main() 
{

	return 0;
}

#include<iostream>
#include<cstdio>
using namespace std;
int  fun (int x);  //函数写在后面,必须在前面先定义

int main() 
{

	return 0;
}

int  fun (int x)   //函数定义在后
{
	printf("%d",x);
	return 0;
}

2.函数的使用

2.1基础用法

函数定义的时候是 数据类型+函数名+参数。函数使用的时候只需要 函数名+参数即可。例如:

#include<iostream>
#include<cstdio>
using namespace std;
int  fun (int x) 
{
	printf("%d",x);
	return 0;
}
int main() 
{

	fun(5);  //函数调用过程 
	return 0;
}

输出:



上面的例子表示,调用fun函数,把5这个数字传递给x这个参数,然后在函数内部输出。那么在函数内部,x的值就是5。

如果我们要完成一个功能:不论用户输入什么数字,都显示出它的5倍。那么只要像下面这样写就行。

#include<iostream>
#include<cstdio>
using namespace std;
int  fun (int x) {
	int c=2*x;
	printf("%d",c);
	return 0;
}
int main() {

	fun(5);
	return 0;
}

注意,上面的函数并没有用到返回值功能。

2.2使用函数的返回值功能

实际开发中,一般不会在函数内部输入和输出,也就是一般不会在函数内部见到 scanf和printf。

实际上,函数的参数相当于输入,函数的返回值相当于输出。

那么函数的返回值应该如何使用呢?我们把上面的代码稍微一改,把c作为返回值返回看看。

#include<iostream>
#include<cstdio>
using namespace std;
int  fun (int x) {
	int c=2*x;
	//printf("%d",c);
	return c;
}
int main() {

	fun(5);
	return 0;
}

但是你执行上面代码后发现并没有任何东西输出,为什么呢,明明在上一步中能输出,这里调用之后就没有输出了呢。

实际上,函数确实是执行了,没有正常输出的主要原因是返回后没有东西去接返回值。像下面这样,用a这个变量去“接”函数返回的结果。这样后面加上printf,就可以正常输出了。


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

质数(素数)的判断

一、定义法// 1 定义法(除了1和他本身之外,没有任何一个数能被整除)(试除法) bool is_prime3(unsigned long lon...

【数据结构】栈的基本操作

0.前言上一篇中简单介绍了栈的定义,这一篇中介绍栈的基本用法,包含压栈,出栈,判断栈空,判断栈中元素个数等。下面进行详细介绍1.基本用法本文介绍的栈的主要操作,使用栈之前加入<stack>...

【初级篇】求最大公约数的方法

1.辗转相除法int gcd(int a,int b)  {       if(a%b==0...

树的存储结构

【方法1:数组】称为父亲表示法const int m=10;          ...

【贪心】区间选点

【贪心】区间选点

【题目描述】数轴上有n个闭区间[ai, bi],取尽量少的点,使得每个区间内都至少有一个点。(不同区间内含的点可以是同一个,1<=n<=10000,1<=ai<=bi<=...

【算法】扩展欧几里得算法

一、欧几里得算法我们前面学过求最大公约数的算法:欧几里得算法(又叫辗转相除法) ,一般缩写是gcd,在C++中经常写成如下形式:int gcd(int a,int b)...