内容正文:
第5章 函 数
函数概述
任务一
函数定义的相关知识
任务二
函数的调用
任务三
任务一 函数概述
阶段1 函数简介
阶段2 函数的分类法
阶段1 函数简介
可以说C程序的全部工作都是由各式各样的函数完成的,所以也把C语言称为函数式语言。由于采用了函数模块式的结构,C语言易于实现结构化程序设计。使程序的层次结构清晰,便于程序的编写、阅读、调试。
阶段2 函数的分类
一.库函数和用户定义函数
从函数定义的角度看,函数可分为库函数和用户定义函数两种。
1.库函数
2.用户定义函数
阶段2 函数的分类
二.有返回值函数和无返回值函数
C语言的函数兼有其他语言中的函数和过程两种功能,从这个角度看,又可把函数分为有返回值函数和无返回值函数两种。
1.有返回值函数
2.无返回值函数
阶段2 函数的分类
三.无参函数和有参函数
从主调函数和被调函数之间数据传送的角度看又可分为无参函数和有参函数两种。
1.无参函数
2.有参函数
阶段2 函数的分类
四.内部函数和外部函数
函数一旦定义后就可被其他函数调用。但当一个源程序由多个源文件组成时, 在一个源文件中定义的函数能否被其他源文件中的函数调用呢?为此,C语言又把函数分为两类:
1.内部函数
2.外部函数
任务二 函数定义的相关知识
阶段1 无参函数定义的一般形式
阶段2 有参函数定义的一般形式
阶段3 函数的参数
阶段4 数组名作为函数参数
阶段1 无参函数定义的一般形式
无参函数定义的一般形式如下:
类型说明符 函数名()
{
类型说明
语句
}
阶段2 有参函数定义的一般形式
有参函数的一般形式如下:
类型说明符 函数名(形式参数表)
形式参数类型说明
{
类型说明
语句
}
阶段3 函数的参数
前面已经介绍过,函数的参数分为形参和实参两种。形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。 形参和实参的功能是传送数据。发生函数调用时, 主调函数把实参的值传送给被调函数的形参,从而实现主调函数向被调函数的数据传送。
阶段4 数组名作为函数参数
用数组名作函数参数与用数组元素作实参有几点不同:
1. 用数组元素作实参时,只要数组类型和函数的形参变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的。
阶段4 数组名作为函数参数
2. 在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量。
任务三 函数的调用
阶段1 函数调用的基础知识
阶段2 函数的值
阶段3 函数的嵌套调用
阶段4 函数的递归调用
阶段5 函数中的变量
阶段1 函数调用的基础知识
在C语言中,常用到的函数调用方式有以下几种:
一.函数表达式
二.函数语句
三.函数实参
阶段2 函数的调用
函数的调用离不开返回值的概念,函数的值是指函数被调用之后, 执行函数体中的程序段所取得的并返回给主调函数的值,如调用正弦函数取得正弦值。
阶段3 函数的嵌套调用
C语言中不支持函数的嵌套定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。 但是C语言允许在一个函数的定义中出现对另一个函数的调用。 这样就出现了函数的嵌套调用。即在被调函数中又调用其他函数。 这与其他语言的子程序嵌套的情形是类似的。
阶段4 函数的递归调用
一个函数在它的函数体内调用它自身称为递归调用。 这种函数称为递归函数。C语言允许函数的递归调用。在递归调用中, 主调函数又是被调函数。执行递归函数将反复调用其自身。 每调用一次就进入新的一层。
阶段5 函数中的变量
在讨论函数的形参变量时曾经提到, 形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称为变量的作用域。C语言中的变量,按作用域范围可分为:
一.局部变量
二.全局变量
阶段5 函数中的变量
变量的存储方式可分为“静态存储”和“动态存储”两种。在C语言中,对变量的存储类型说明有以下4种: