C语言函数.ppt

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

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