C语言函数PPT课件

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

函数的递归
一个函数调用其本身,这种调用过程被称 为递归
递归的基本原理
每一级的函数调用都有自己的变量 每一次函数调用都会有一次返回 递归函数中,位于递归调用前的语句和各级被调
用函数具有相同的执行顺序 递归函数中,位于递归调用后的语句的执行顺序
和各个被调函数的顺序相反 虽然每一级递归都有自己的变量,但是函数代码
分号表示该语句是进行函数的声明而不是定义
编写和使用一个简单的函数
程序通过在main()中使用函数名后跟圆括号 和分号的格式调用函数starbar()
程序把starbar()和main()包含在同一个文件中, 也可以把它们放在不同的两个文件中,这 种方式下必须在文件种加入#define或者 #include指令
C 语言程序设计
函数
周闻钧 朱宏明
本讲内容
基本函数概念 函数的递归 局部变量和全局变量 变量的存储类别
函数的分类
main函数是系统定义的。所有函数都是平行的,即在定义函数时是互 相独立的,一个函数并不从属于另一函数,即函数不能嵌套定义(这 是和PASCAL不同的),但可以互相调用,但不能调用main函数
编写和使用一个简单的函数
带参数的函数
定义带参数的函数(形式参数)
函数定义以下面的ANSI C函数头开始
ANSI C也接受ANSI之前的形式,但将其视 为废弃不用的形式
调用带参数的函数(实际参数)
使用实际参数对形式参数赋值 实际参数可以是常量、变量或一个复杂的
表达式
调用带参数的函数(实际参数)
{…
int x=1, y=0; func(x,y); func(x+y,y-x);
}
形式参数和实际参数
关于形参和实参的说明
在定义函数中指定的形参变量,在未出现函数调用时, 它们并不占内存中的存储单元。只有在发生函数调用 时函数max中的形参才被分配内存单元。在调用结束后, 形参所占的内存单元也被释放
实参可以是常量、变量或表达式,但要求它们有确定 的值。在调用时将实参的值赋给形参变量(如果形参 是数组名,则传递的是数组首地址,而不是变量的值)
在被定义的函数中,必须指定形参的类型 实参与形参的类型应一致。如果实参为整型,形参为
实型,或者相反,则发生“类型不匹配”的错误。字 符型与整型可以互相通用
该函数的具体功能
编写和使用一个简单的函数
函数和变量一样有多种类型。任何程序在 使用函数之前都需要声明该函数的类型
下面是Ansi C风格的原型 void starbar(void); ()表明starbar是一个函数名。
第一个void指的是函数返回值类型,它的意思 是该函数没有返回值
第二个void(位于圆括号内)表明该函数不接 受任何参数
并不会得到重复 递归函数中必须包含可以终止递归调用的语句
递归的基本原理
尾递归
递归调用出现在函数的尾部,相当于一条 循环语句
尾递归
递归和循环的比较
选择循环更好一些 每次递归调用都用自己的变量集合,需要占用
较多的内存 每次递归调用需要把新的变量机和存储到堆栈
中 递归的执行速度较慢
递归和反向计算
float fl(int a) {int b,c; …
a,b,c有效
}
Char f2(int x,int y)
{int i,j; …
x,y,i,j有效
}
void main()
{int m,n; …
从用户使用的角度看,函数有两种: 标准函数,即库函数。这是由系统提供的,用户不必自己定义这 些函数,可以直接使用它们。应该说明,每个系统提供的库函数 的数量和功能不同,当然有一些基本的函数是共同的 用户自己定义的函数,以解决用户的专门需要
从函数的形式看,函数分两类 无参函数。在调用无参函数时,主调函数并不将数据传送给被调 用函数,一般用来执行指定的一组操作。无参函数可以带回或不 带回函数值,但一般以不带回函数值的居多 有参函数。在调用函数时,在主调函数和被调用函数之间有参数 传递,也就是说,主调函数可以将数据传给被调用函数使用,被 调用函数中的数据也可以带回来供主调函数使用。
Return语句的另一个作用是终止程序的执行, 把程序的控制权返回给调用函数的下一个 语句
函数的类型
函数应该进行类型申明,同时其类型应和 返回值类型相同
早期的c语言中,如果函数没有进行类型申 明,则该函数具有默认的函数类型int。C99 标准不再支持函数的int类型的默认设置
本讲内容
基本函数概念 函数的递归 局部变量和全局变量 变量的存储类别
递归的优缺点
优点:为某些编程问题提供了最简单的解 决办法
缺点:递归算法会很快的耗尽计算机的内 存资源,难于维护和阅读
本讲内容
基本函数概念 函数的递归 局部变量和全局变量 变量的存储类别
局部变量和全局变量
局部变量
在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也 就是说只有在本函数内才能Biblioteka Baidu用它们,在此函数以外是不能使用这些变 量的。这称为“局部变量”
使用return从函数中返回一个值
使用return从函数中返回一个值
关键字return指明了其后的表达式的数值即 是该函数的返回值。
因为min的类型是int,所以函数imin()的类型 也是int
返回值不仅可以被赋给一个变量,也可以 被用作表达式的一部分
使用return从函数中返回一个值
编写和使用一个简单的函数
编写和使用一个简单的函数
Starbar标识符在不同的位置被使用了3次:
函数原型(function prototype):告知编译器 starbar()的函数类型
函数调用(function call):导致该函数的执行 函数定义(function definition):确切的指定了
实际参数传递给形式参数是单向值传递
形式参数和实际参数
形式参数和实际参数
在调用函数时,大多数情况下,主调函数和被调用函数之间有数 据传递关系
在定义函数时函数名后面括弧中的变量名称为形参
int func(int x, int y) {…}
在调用函数时,函数名后面括弧中的表达式称为实际参数(简称 实参)
相关文档
最新文档