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

下载本文档

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

文档简介

1、第八章 函数,模块化程序设计 基本思想:将一个大的程序按功能分割成一些小模块, 特点: 各模块相对独立、功能单一、结构清晰、接口简单 控制了程序设计的复杂性 提高元件的可靠性 缩短开发周期 避免程序开发的重复劳动 易于维护和功能扩充 开发方法: 自上向下,逐步分解,分而治之,第八章 函数,8.1 函数的定义 8.2 函数的形式参数和实际参数 8.3 函数的返回值 8.4 函数的调用和传值 8.5 数组作为函数的参数 8.6 局部变量和全局变量 8.7 存储类型 8.8 函数的嵌套与递归,C是模块化程序设计语言,C程序结构,C是函数式语言 必须有且只能有一个名为main的主函数 C程序的执行总是

2、从main函数开始,在main中结束 函数不能嵌套定义,可以嵌套调用,函数分类,从用户角度 标准函数(库函数):由系统提供 用户自定义函数 语言的函数兼有其它语言中的函数和过程两种功能,从这个角度看,又可把函数分为有返回值函数和无返回值函数两种。 从主调函数和被调函数之间数据传送的角度看又可分为无参函数和有参函数两种。 语言提供了极为丰富的库函数,这些库函数又可从功能角度作以下分类。 (1)字符类型分类函数、(2)转换函数、(3)目录路径函数、(4)诊断函数、(5)图形函数、(6)输入输出函数、(7)接口函数、(8)字符串函数、(9)内存管理函数、(10)数学函数、(11)日期和时间函数、(1

3、2)进程控制函数、(13)其它函数,库函数应注意事项,使用库函数应注意: 1、函数功能 2、函数参数的数目和顺序,及各参数意义和类型 3、函数返回值意义和类型 4、需要使用的包含文件,8.2 函数的形式参数和实际参数,例 无参函数 printstar( ) printf(“*n”); 或 printstar(void ) printf(“*n”); ,例 有参函数(现代风格) int max(int x,int y) int z; z=xy?x:y; return(z); ,8.2 函数的形式参数和实际参数,例 有参函数(传统风格) int max(x,y) int x,y; int z; z

4、=xy?x:y; return(z); ,8.3 函数的返回值,返回语句,形式: return(表达式); 或 return 表达式; 或 return; 功能:使程序控制从被调用函数返回到调用函数中,同时把 返值带给调用函数 说明: 函数中可有多个return语句 若无return语句,遇时,自动返回调用函数 若函数类型与return语句中表达式值的类型不一致,按前者 为准,自动转换-函数调用转换 void型函数,例 无返回值函数 void swap(int x,int y ) int temp; temp=x; x=y; y=temp; ,调用形式,函数名(实参表);,说明:,调用方式,函

5、数语句: 例 printstar(); printf(“Hello,World!n”); 函数表达式: 例 m=max(a,b)*2; 函数参数: 例 printf(“%d”,max(a,b); m=max(a,max(b,c);,参数传递方式,值传递方式 方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值 特点: 形参与实参占用不同的内存单元 单向传递,地址传递,方式:函数调用时,将数据的存储地址作为参数传递给形参 特点: 形参与实参占用同样的存储单元 “双向”传递 实参和形参必须是地址常量或变量,8.5数组名作函数的参数,地址传递

6、 在主调函数与被调函数分别定义数组,且类型应一致 形参数组大小(多维数组第一维)可不指定 形参数组名是地址变量,例题,例题,8.6 局部变量与全局变量,局部变量-内部变量 定义:在函数内定义,只在本函数内有效 说明: main中定义的变量只在main中有效 不同函数中同名变量,占不同内存单元 形参属于局部变量 可定义在复合语句中有效的变量 局部变量可用存储类型:auto register static (默认为auto),全局变量-外部变量,定义:在函数外定义,可为本文件所有函数共用 有效范围:从定义变量的位置开始到本源文件结束,及有extern说明的其它源文件 外部变量说明: extern

7、数据类型 变量表; 外部变量定义与外部变量说明不同 若外部变量与局部变量同名,则外部变量被屏蔽 外部变量可用存储类型:缺省 或 static,定义 说明 次数: 只能1次 可说明多次 位置: 所有函数之外 函数内或函数外 分配内存: 分配内存,可初始化 不分配内存,不可初始化,应尽量少使用全局变量,因为: 全局变量在程序全部执行过程中占用存储单元 降低了函数的通用性、可靠性,可移植性 降低程序清晰性,容易出错,8.7 存储类型,概述 变量是对程序中数据的存储空间的抽象 变量的属性 数据类型:变量所持有的数据的性质(操作属性) 存储属性 存储器类型:寄存器、静态存储区、动态存储区 生存期:变量在

8、某一时刻存在-静态变量与动态变量 作用域:变量在某区域内有效-局部变量与全局变量 变量的存储类型 auto -自动型 register-寄存器型 static -静态型 extern -外部型 变量定义格式: 存储类型 数据类型 变量表;,动态变量与静态变量,存储方式 静态存储:程序运行期间分配固定存储空间 动态存储:程序运行期间根据需要动态分配存储空间 内存用户区 生存期 静态变量:从程序开始执行到程序结束 动态变量:从包含该变量定义的函数开始执行至函数执行结束,生存期 静态变量:从程序开始执行到程序结束 动态变量:从包含该变量定义的函数开始执行至函数执行结束,变量存储类型,变量存储类型,局

9、部变量默认为auto型 register型变量个数受限,且不能为long, double, float型 局部static变量具有全局寿命和局部可见性 局部static变量具有可继承性 extern不是变量定义,可扩展外部变量作用域,例 文件file1.c int a; main( ) . . f2; . f1; . f1( ) auto int b; f2; . f2( ) static int c; ,8.8 函数的嵌套调用,嵌套调用,C规定:函数定义不可嵌套,但可以嵌套调用函数,递归调用,定义:函数直接或间接的调用自身叫函数的递归调用,int f(int x) int y,z; z=f(y); . return(2*z); ,例题,教材例8-16 Hanoi问题,本章小结,1. 函数的分类: 2. 函数定义的一般形式: extern/static 类型说明符 函数名(形参表); 方括号内为可选项。 3. 函数说明的一般形式:extern 类型说明符 函数名(形参表); 4. 函数调用的一般形式:函数名(实参表); 5. 函数的参数分为形参和实参两种,形参出现在函数定义中,实参出现在函数调用中,发生函数调用时,将把实参的值传送给形参。 6. 函数的值是指函数的返回值,它在函数中由return语句返回。 7. 数组名作为函数参数时不进行值传送而进行地址传

温馨提示

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

评论

0/150

提交评论