2018-09-04函数
函数
- C语言不仅提供了极为丰富的库函数, 还允许用户建立自己定义的函数。用户可把自己的算法编写成一个个相对独立的函数,然后再需要的时候调用它
- 函数的作用就是实现一个个的功能,比如手机就是一个程序,那么他的一个个功能就是函数,可以说C程序的全部工作都是由各式各样的函数完成的,所以也把C语言称为函数式语言
函数的分类
- 在C语言中可从不同的角度对函数进行分类
- 从函数定义的角度看,函数可分为库函数和用户定义函数两种
定义函数的目的:将一个常用的功能封装起来,方便以后调用
定义函数的步骤
函数名:函数叫什么名字
函数体:函数是干啥的,里面包含了什么代码
返回值类型: 函数执行完毕返回什么和调用者
形式参数
在定义函数时,函数名后面小括号()中定义的变量称为形式参数,简称形参
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。
因此,形参只有在函数内部有效,函数调用结束返回主调函数后则不能再使用该形参变量
实际参数
在调用函数时, 传入的值称为实际参数,简称实参
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参
因此应预先用赋值,输入等办法使实参获得确定值
- 形参、实参注意点
1.调用函数时传递的实参个数必须和函数的形参个数必须保持一致
2.形参实参类型不一致, 会自动转换为形参类型
3.当使用基本数据类型(char、int、float等)作为实参时,实参和形参之间只是值传递,修改形参的值并不影响到实参函数可以没有形参 - 返回值类型注意点:
如果没有写返回值类型,默认是int
函数返回值的类型和return实际返回的值类型应保持一致。如果两者不一致,则以返回值类型为准,自动进行类型转换
一个函数内部可以多次使用return语句,但是return语句后面的代码就不再被执行
函数声明
函数声明就是告诉系统我们这个程序里面有这个函数纯在.
一般如果自定义的函数写在了主函数main的前面就不需要进行声明
如果写在了主函数main的后面那么就需要在函数的开始部分进行声明
声明可以写在main里面也可以写在main函数的外面,但最好是写在里面
所以函数声明,就是在函数调用之前告诉系统, 该函数叫什么名称, 该函数接收几个参数, 该函数的返回值类型是什么
函数的声明格式:
将自定义函数时{}之前的内容拷贝到开始部分即可
例如: int max( int a, int b );
或者: int max( int, int );
这两种声明方法都可以
接下来开始练习
1.若定义的函数没有参数,则函数名后的圆括号可以省略(错,不可以省略)
2.C语言程序中的main( )函数必须放在程序的开始部分(错,任意位置)
3.C语言中函数返回值的类型由return语句中的表达式的类型决定(错,函数是什么类型,返回值就是什么类型)
4.return语句作为函数的出口,在一个函数体内只能有一个(错,可以有很多个)
5.C语言的源程序中必须包含库函数(错,不必要)
6.在C函数中,形参可以是变量、常量或表达式(错,不能传常量)
7.在C语言中,一个函数一般由两个部分组成,它们是函数声明和函数实现(错,函数定义和调用)
8.关于函数参数,说法正确的是:实参与其对应的形参各自占用独立的内存单元
形参名称可以和实参同名
9.下列关于自定义函数说法正确的是:函数可以没有返回值
函数可以没有形参列表(切记函数不能没有大括号{})
10.下列关于函数说法正确的是:函数声明时可以不写形参名称
函数返回值和返回值类型不同时,会自动将返回值转换为返回值类型
11.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是
函数调用可以作为一个函数的形参
12.基本类型作为函数参数传递时, 可以在函数内部修改函数外部变量, 这种说法是否正确的(错误的)
递归函数
- 什么是递归函数?
一个函数在它的函数体内调用它自身称为递归调用
递归函数构成条件
自己调用自己
存在一个条件能够让递归结束
问题的规模能够缩小
递归和循环区别
能用循环实现的功能,用递归都可以实现
递归常用于"回溯", "树的遍历","图的搜索"等问题
但代码理解难度大,内存消耗大(易导致栈溢出), 所以考虑到代码理解难度和内存消耗问题, 在企业开发中一般能用循环都不会使用递归