- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
教学内容 介绍函数的定义、声明、调用及返回; 讲解函数参数的两种传递方式; 介绍函数的嵌套调用与递归调用; 介绍变量的存储类别、生存期及作用域 介绍编译预处理及模块化编译链接; 用模块化程序设计方法设计几个小案例。 4.1函数 简单函数举例 【例4-1】符号函数sign。(代码片段,不能单独运行) 【例4-3】 求两数中的最大值函数max。(代码片段) 4.1.2函数的调用与传参 定义好函数后,该函数并不能被执行,只有当调用该函数时,该函数的代码才能被执行。 调用函数的语法格式如下: 函数名(实在参数列表) 形式参数就是在定义函数时的给出的输入参数,简称形参;实在参数就是在调用函数时给出的输入参数,简称实参。函数调用的基本原则有如下两点: 1. 实参和形参之间的个数和类型必须对应一致或保持兼容。 2. 返回值类型的使用必须合法。 注意,函数的调用本质上是一个表达式,它返回了特定类型数据的值(即返回值),因此,只要该值能出现的位置,都可以使用该函数调用表达式。 函数的参数传递方式 传值和传地址的比较 传值:是简单的将实在参数的值拷贝一份给形式参数,一旦拷贝完成,实在参数和其对应的形式参数没有任何关系,这时在函数内对形式参数的任何改变都不会影响到实在参数。 传地址:则是将实在参数的地址传递给形式参数,在函数内对形式参数所对应的数据的处理,实际上就是处理对应的实在参数。简单的理解就是此时实在参数和形式参数合二为一,对形式参数的处理就是对对应的实在参数的处理。 C语言中当函数的参数为指针类型或数组类型时采用传地址的方式,其它的类型一律采用传值的方式。 在调用函数时,有两种特殊的现象,称为嵌套调用和递归调用。 递归调用,即一个函数直接或间接的调用自己。如果一个函数直接调用自己,称为直接递归。如果一个函数间接的调用自己,称为间接递归。 思路分析 假设将64个圆盘按盘的大小由小到大的顺序依次编号为1到64,三根柱子分别编号为A,B,C,问题转化为A柱上有64个圆盘,如何借助B柱将它们全部移动到C柱上。可以分为三步:第一步是将1-63号圆盘借助C柱移动到B柱上;第二步是将编号为64的最大的盘直接移动到C柱上;第三步则是将B柱上的编号为1到63的圆盘借助A柱移动到C柱上。前两步的移动如图?4-6(b)所示。显然,其中的第一步和第三步和整个问题是类似的,只是圆盘的数量减少了1个。 定义函数move(int n, char x, char y, char z)完成将n个圆盘从x柱借助于y柱移动到z柱。 测试 4.2 变 量 的 存 储 属 性 4.2.1变量的生存期与作用域 变量的生存期定义:是指变量在什么时间段内存在; 变量的作用域定义:是指变量在哪些代码块中能够访问 特点:前者是时间上的可见性,后者则是空间上的可见性。变量的生存期和作用域通常都和它的存储属性相关。 全局变量和局部变量 当程序加载到内存中时,有的变量就已经分配存储空间,并且这个存储空间直到整个程序执行完毕,从内存中退出时才会被释放,所以这些变量的生存期为整个程序的生存期,这样的变量有全局变量和静态局部变量。 全局变量是指在任何函数之外定义的变量。局部变量是指在某个函数之内或语句块内定义的变量,同时函数的形式参数列表中的变量也是局部变量。 而程序中有些别的变量,在程序加载到内存中时并不分配存储空间,而是到当定义它的函数被调用执行时才会临时地分配存储空间,并且一旦该函数执行完毕返回到被调用处,这些变量在内存中分配的存储空间也被回收,即它们将不复存在。这种变量称为非静态局部变量或自动变量,用关键字auto修饰。一个局部变量,如果没有用static修饰,则它自动为auto的,不管是否用auto修饰。自动变量或非静态局部变量的生存期为函数调用时到函数返回时这个时间段,在此之前和之后它们都不存在。 全局变量 对于全局变量而言,它的生存期为整个程序的生存期,它的作用域一般为定义处到它所在的文件结束,要在定义全局变量的位置之前或其他源文件中引用该全局变量时,就需要在使用的函数中或源文件中用extern关键字来扩展该全局变量的作用域。但如果在该全局变量前加以static关键字限制,则为静态全局变量,它的作用域只能局限在定义它的文件内。 定义静态全局变量的好处是: (1)不会为其它文件所访问和修改; (2)其它文件中可以使用相同名字的变量,不会发生冲突。 全局函数与局部函数 注意:C语言中,如果函数定义时函数名前没有static修饰,则该函数是全局函数或外部函数,可以被别的文件中的函数调用。如果函数前用static修饰,则该函数称为静态函数或内部函数,只能限定在定义它的文件内被调用,在其它文件中不能调用该函数。 定义静态函数的好处是:
文档评论(0)