第9章 函数.ppt_第1页
第9章 函数.ppt_第2页
第9章 函数.ppt_第3页
第9章 函数.ppt_第4页
第9章 函数.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章函数 C语言是结构化语言 它的主要结构成分是函数 函数作为一种构件 用以完成程序中的某个具体功能 函数允许一个程序的各个任务被分别定义和编码 使程序模块化 因此 设计良好的函数不仅能正确工作 而且不会对程序的其他部分产生副作用 本章将介绍C语言函数的设计 如何用函数分解程序的各个功能 如何用函数构成模块化程序 以及代码复用的基本思想 9 1函数说明与返回值 函数由类型说明符 函数名 参数表 参数说明段和函数体五个部分组成 类型说明符定义了函数的返回值 即return语句所返回给调用者的数据类型 函数名是每个函数的惟一名称 函数命名规则与变量相同 参数表和参数说明段是函数的外部接口 函数调用时通过参数将值传递给函数体内 参数表是具体接口的个数 参数说明段是参数的数据类型定义 函数体是实现函数功能的代码块 需要用一对大括号将其包围 return语句放置在函数体内 main 函数具备同样的结构 9 1 1函数的类型说明 函数的类型说明符可以是任何数据类型 包括空值型void 即不使用return语句返回任何数据 默认情况下 函数被自动说明为整型 函数必须在第一次调用前定义 这样编译器才能找到该函数 或者将函数的类型说明放在首次调用之前 前置函数类型说明被称为函数原型 9 1 2返回语句 函数的返回语句return有两个作用 其一 结束当前函数 调用者获得程序控制权 其二 将计算结果传递给调用者 函数的结束有两种情况 一是函数体内所有的代码执行完毕 二是return语句被执行 9 2函数的作用域规则 作用域规则是指代码或数据的有效使用范围 C语言将函数作为独立的代码块 函数之间不能相互访问其内部的代码或数据 函数间数据的传递只能通过接口实现 但是 变量的定义方法可改变函数的作用域规则 可将变量分为局部变量和全局变量两种 本节将讨论这两种变量的使用方法 9 2 1局部变量 在函数体内部定义的变量称为局部变量 局部变量的作用域仅限于该函数体内 9 2 2全局变量 全局变量的作用域为整个源程序文件 文件中的所有函数或程序块都可以引用 定义全局变量时 需将变量的声明语句放置在所有函数外 全局变量虽然能方便地在程序的各个函数间传递数据 但同时也破坏了模块的独立性和完整性 所以应尽量避免使用全局变量 9 2 3动态存储变量 从变量的生存周期来分类 可将变量分为动态存储变量和静态存储变量 动态存储变量在函数调用时放入内存 函数调用后从内存中删除 还有一种动态存储变量称之为寄存器变量 寄存器是位于CPU内部的存储单元 CPU读取寄存器内的数据极其快捷 因此 将程序中需要大量反复使用的变量设为寄存器变量可提高程序的运行速度 9 2 4静态存储变量 在编译时分配存储空间的变量称为静态存储变量 在函数退出时 静态存储变量依然被保留在内存中 再次执行同一函数会得到与上次退出时相同的数值 声明静态存储变量的关键字为static 声明的一般形式为 static数据类型变量名 9 3函数的调用与参数 函数通过调用获得程序的控制权 函数的参数是调用者与函数的数据接口 函数可以定义一个或多个参数 也可以省略参数 调用时将与参数的数据类型相匹配的数据置于参数列表中 即可在函数体内使用 参数的调用有多种形式 对函数的影响也有不同的结果 9 3 1形式参数与实际参数 形式参数是接口数据的目的地 实际参数是接口数据的来源地 函数定义时出现在参数列表中的参数是形式参数 函数体可通过引用形式参数获得接口数据 函数调用时填入的参数是实际参数 实际参数由调用者提供 形式参数与实际参数的数据类型必须一致 同时还需要注意实际参数的个数和位置要与形式参数相同 9 3 2赋值调用与引用调用 赋值调用与引用调用是传递数据给函数的两种形式 前者是将实际参数的数值传递给形式参数 后者是将实际参数的内存地址传递给形式参数 赋值调用不会改变实际参数原有的数值 而引用调用则可能改变实际参数的数值 9 4递归 递归函数是能够直接或通过另一个函数间接调用自身的函数 调用自身的方法称为递归调用 递归调用的本质是使用同一算法将复杂的问题不断化简 直到该问题解决 9 5实现问题 在设计函数时需要遵循一些基本原则 因为影响到函数的执行效率和可用性 函数是代码复用的基础 一个健壮的函数或由函数组成的函数集可以在多个程序中使用 C语言标准库里所存放的就是这样的函数 这些函数被放置在头文件中 使用时将它包含在程序内即可 9 5 1参数和通用函数 通用函数是指能够复用的函数 这一类函数的显著特点是 只使用参数作为接口传递数据 如果一个函数中依赖全局变量访问调用者的数据 在另一个程序中环境改变了 这个函数就无法运行 因此 我们不应该把函数建立在全局变量上 函数所需要的所有数据都应从参数获得 使用参数传递数据除了有助于函数的复用以外 还能提高代码的可读性 9 5 2效率 函数是C语言的基本构件 所有的程序都是由函数组成 C语言程序执行的入口是main 函数 当main 函数调用子函数时 操作系统为子函数在内存中建立一种称为栈的数据结构 将主函数的返回地址和子函数的局部变量保存在栈中 如果子函数再调用另一个子函数 那么依旧是遵循上述原则 9 6函数库和文件 函数库是为代码复用建立的 将同一类型 需要在不同的程序里使用的函数放置在一起 就组成了一个函数库 如C语言的标准库 它集合了开发者常用的函数 开发者自行编写的函数也可以组成函数库 通常称之为自定义函数库 C语言的函数库以源代码的形式放在头文件里 较大的函数库可能会用到多个文件 因此涉及到编译的问题 本节将讨论用文件组成函数库的问题 9 6 1程序文件的大小 C语言编译器允许分别编译 为每个文件生成以 o 为后缀的目标文件 最后执行链接过程生成可执行文件 将一个程序放在一个大文件中 或者分拆成多个较小的文件 所得到的结果其实是相同的 编译器编译一个大文件比编译由这个大文件拆分而成的一系列小文件所花费的时间要长 对程序员来说 小文件更容易阅读和理解 所以应该把大文件拆分为一系列小文件编写 而且如果修改程序时只修改了其中一个文件 那么编译时也只需要重新编译被修改过的文件 再执行连接过程生成可执行文件 这样能缩短程序编译的总时间 9 6 2分类组织文件 在开发大型程序时 很容易迷失某个具体功能点在源代码中的位置 如果在程序设计的早期预先估计程序的规模 将同一类型的函数放在同一个文件中 以有意义的名字为函数和文件命名 编写详细的注释 则可以最大程度避免该问题 9 6 3函数库 函数库由一系列函数说明文件和函数定义文件所组成 使用时 将该文件包含在自己的程序文件内 9 7main函数的参数 main 函数有两个参数 它的形式是 main intargc char argv argc的数据类型为整型 argv的数据类型为字符型指针数组 有些程序在终端运行时 输入完程序文件名后可加上一些额外的运行参数 main 函数的参数即是用来向程序传递这些运行参数的入口 argc参数用于记录运行参数的个数 argv参数用于保存运行参数 所输入的程序名也是运行参数 所以不输入其他运行参数的情况下 也会被捕获到一个运行参数 9 8媒体播放器 建立核心控制模块 本章的实例分为两个部分 第一部分通过编写一个简单的程序练习函数的设计 主要难点是将复杂的数据结构作为函数的参数传递 第二部分继续媒体播放器的设计 使用函数和伪代码将媒体播放器的功能点列举出来 并使用函数设计媒体播放器的控制指令 9 8 1通过函数传递参数 本例的任务是从键盘输入学生的成绩 计算该学生的平均分和该课程的平均分 找到所有分数中最高值 求分数分布的方差 程序的各个功能放在不同的函数中 使用参数传递所需要的数据 用以说明通过参数传递复杂数据结构的方法 下面介绍该例的实现步骤 1 编写预处理语句和函数原型2 编写主函数3 编写input stu 函数3 编写avr stu 函数3 编写avr cor 函数4 编写highest 函数4 编写s diff 函数 9 8 2建立媒体播放器核心控制模块 媒体播放器的操作响应由核心控制模块发出 为了实现模块化 所有用户请求必须调用核心控制模块 并将请求指令作为参数传递给核心控制模块函数 9 9小结 本章学习了C语言的函数 介绍了函数的设计方法和工作原理 函数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论