谭浩强版经典课件 C语言程序入门 函数

上传人:灯火****19 文档编号:125114287 上传时间:2020-03-15 格式:PPT 页数:59 大小:1.15MB
返回 下载 相关 举报
谭浩强版经典课件 C语言程序入门 函数_第1页
第1页 / 共59页
谭浩强版经典课件 C语言程序入门 函数_第2页
第2页 / 共59页
谭浩强版经典课件 C语言程序入门 函数_第3页
第3页 / 共59页
谭浩强版经典课件 C语言程序入门 函数_第4页
第4页 / 共59页
谭浩强版经典课件 C语言程序入门 函数_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《谭浩强版经典课件 C语言程序入门 函数》由会员分享,可在线阅读,更多相关《谭浩强版经典课件 C语言程序入门 函数(59页珍藏版)》请在金锄头文库上搜索。

1、第五章 函数 2000级统招 主 讲 樊广军 第五章 函数 第五章 函数 本章目标 1 进一步理解多个函数构成一个C程序 2 进一步了解和熟悉库函数 3 学会编写自已的函数 4 理解函数的调用关系 5 理解函数中参数的传递机制 第五章 函数 一 C程序模块 一个C程序可由一个main 函数和多个 其它函数构成 5 1 C程序模块 第五章 函数 其它函数指的是 系统函数 由系统提供 放在头文件中 自编函数 由程序设计人员编写 第五章 函数 二 函数的调用 如 main funafunbfunc fundfunxfuny 第五章 函数 所有的函数都 具有两种特征 返回值 参数 返回值和参数都是可缺

2、省的 第五章 函数 5 2 库函数 一 库函数简介 系统自带的标准库函数根据不同的功 能作用放在不同的头文件中 第五章 函数 如 stdio h 用于标准输入 输出 math h 用于数学计算 ctype h 用于字符处理 string h 用于字串处理 time h 用于时间 日期的处理 dir h 用于控制目录和路径 graphics h 用于图形操作 dos h bios h 用于接口处理 第五章 函数 二 库函数的作用 使程序更具有 独立性 和 可移植 性 使用时只需在程序的开头加上一条语句 include 根据使用的函数来确定 使程序具有 模块化 第五章 函数 例1 求两个浮点型数值

3、x y的余数 注意 不能写成3 6 1 7 include include main float x y z scanf f f z fmod x y printf z f z 第五章 函数 例2 P119 随机数 程序 P120 程序 P122 第五章 函数 5 3 5 3 自定义函数自定义函数 一 自定义函数的作用 使程序具有 积木 功能 模块化 使程序具有 重构 功能 第五章 函数 二 二 函数的定义及调用函数的定义及调用 定义 存储类型符 返回值类型符 函数名 形参表列 形参说明 说明部分 语句 第五章 函数 调用 变量名 函数名 实参表列 变量名的类型必须与函数的返回值类型相同 函数

4、名 实参表列 第五章 函数 三 函数声明三 函数声明 一般情况下 函数被调用之前必须要有 函数声明 函数声明的意义在于提供函数原型 函数声明的格式 返回值类型符 函数名 形参类型 第五章 函数 例1 求二个数中的最大值 int max x y int x y int z z x y x y return z 用return语句 返回函数的值 或 int max int x int y int z z x y x y return z 四 举例四 举例 第五章 函数 通过函数调用求二个数中的最大值 include int max int int 函数原型 main int a b t scanf

5、 d d t max a b 函数调用 printf value of maximize is t d t int max int x int y 函数定义 int z z x y x y return z 第五章 函数 include float add 函数说明 main float a b c scanf f f c add a b 函数调用 printf sum f c float add float x float y 函数定义 float z z x y return z 例2 求二实数之和 若函数的定义放在main 函数之前可省略函 数说明 第五章 函数 第五章 函数 inclu

6、de float add float x float y 函数定义 float z z x y return z main float a b c scanf f f c add a b 函数调用 printf sum f c 例3 求二实数之和 将例1程序改写如下 例4 P113 第五章 函数 第五章 函数 1 形参与实参 调用时 实参值 单向 传递 形参 函数被调用时 临时分配单元给形参 调 用完毕 这些单元被释放 实参 出现在调用函数中 形参 出现被 调用函数中 五 自定义函数中的几个重要特征五 自定义函数中的几个重要特征 第五章 函数 实参可为表达式 只传递表达式的值 实参 形参类型一

7、致 可在形参表列中对形参说明 注 第五章 函数 2 函数返回 或 return 变量的值 通过return语句将流程返回主调函数 return 函数无返回值 return 表达式的值 第五章 函数 3 函数名 要选择一个简洁的有意义的名字作为 函数名 从函数名可以反映出函数的功能 第五章 函数 六 传值调用和传引用六 传值调用和传引用 传址传址 调用调用 1 传值调用 方式 函数的实参和形参的类型均为简单变量 当实参 传递 形参时 系统会建立一份实参的拷贝给形参 当函数调用完毕 这份实参的拷贝消失 特点 传值调用不会影响实参的值 第五章 函数 2 传引用 传址 调用 把实参形参后 传递 形参变

8、量和实参变量共同内存地址 特点 形参变量的值的变化会影响实参的 值的改变 第五章 函数 5 4 5 4 函数的存储类型函数的存储类型 一 标识符的属性一 标识符的属性 一个标识符的属性除了前面已讲过 的基本属性外 还具有一些其它的属性 存储类别 存储期 第五章 函数 二 存储类别二 存储类别 1 存储类型和存储期 自动型 auto 寄存器型 register 外部型 extern 静态型 static 自动存储期 静态存储期 第五章 函数 2 存储期的性质 自动存储 只有变量才具有自动存储期 如函数中的变量说明 auto float x y auto int m n 作用 进入到函数块中 该变

9、量存在 退出 函数块后该变量消失 程序中大部分 变量都具有自动存储期 第五章 函数 静态存储 可用于变量和函数 如 static in t 作用 从程序开始执行起就一直存在 始终 占据内存单元 直到程序结束运行 第五章 函数 对静态存储变量 若定义时赋初值 则程序 运行中仅在第一次调用时赋初值 下一次调 用不再赋初值 而是使用上一次调用的值 特别提醒 对静态存储变量 若定义时不赋初值 则系 统置初值0 而动态变量不赋初值则值不确定 第五章 函数 include int fac n 函数定义 int n static int f 1 f f n return f main int i for i

10、 1 i 5 i printf d d n i fac i 例 求n 第五章 函数 第五章 函数 1 1 2 2 3 6 4 24 5 120 每一次调用fac i 打印一个i 同时保留 这个i 的值以便下次再乘 i 1 运行结果为 第五章 函数 5 5 5 5 标识符的作用域标识符的作用域 标识符可以具有四种作用域 函数作用域 文件作用域 块作用域 函数原型作用域 作用域 有效范围 可根据标识符的作用域区分局部变量和 全局变量 第五章 函数 一 局部变量一 局部变量 凡在函数 含main 函数 内部定义的变量称 为局部变量 局部性 局部变量仅在函数内部有效 第五章 函数 2 形参为局部变量

11、3 在复合语句中可定义仅在复合语句中有 效的临时变量 1 不同的函数可有同名同类型的变量 它们 占不同的内存单元 互不影响 第五章 函数 二 全局变量二 全局变量 一个源文件中 在所有函数之外定义的变 量为全局变量 有效性有效性 自定义位置开始至文件结尾全部有效 第五章 函数 例 int p 1 q 5 float f1 a int a int b c char c1 c2 p q的作用范围 c1 c2的作用范围 char f2 x y int x y int i j main 第五章 函数 第五章 函数 1 全局变量所作用到的函数 相当于这些函 数的公共变量 当一个函数对其值进行改 变后 另

12、一个函数使用该变量的值亦相应改 变 好处 函数之间值传递 2 不要随意使用全局变量 一是始终占据内 存单元 二是由于函数依赖于外部定义的 变量 减少了通用性 注意 第五章 函数 3 不在作用域内函数 若使用全局 外部 变量 需在函数体内加上extern保留字 4 全局和局部变量同名时 局部变量有效 第五章 函数 float f1 x int x extern int a b int a 0 b 1 main a b作用域 例 第五章 函数 例1 exp81 c include int fun1 int x int y int a b z main int u m 0 a 24 b 42 pri

13、ntf 1 a d b d m d n a b m m m 10 u fun1 a b printf 2 a d b d u d m d n a b u m m m 10 a z a b z b u fun1 a b printf 3 a d b d u d m d n a b u m 第五章 函数 第五章 函数 int fun1 int x int y int m m x y printf chang a a a 10 b b 20 z x y return z 第五章 函数 第五章 函数 1 a 24 b 42 m 0 运行结果 chang a int y z z f z 间接调用 int

14、 f1 x int x int y z z f2 y int f2 t int t int a b a f1 b 以下表示了递归的概念 第五章 函数 显然 上述例子会无限递归 无限执行 所以 在递归调用时都必须有条件限制 n 1 n 0 1 n n 1 n 1 当条件成立 调用递归 否则结束 例1 求n 1 从数学上定义 第五章 函数 include long fac int n 函数定义 计算n long f if n 0 printf input error n else if n 0 n 1 f 1 else f n fac n 1 return f 2 2 程序程序 第五章 函数 第五

15、章 函数 main int n long y printf input a integer scanf d y fac n 函数调用 计算n printf d 15ld n y 第五章 函数 第五章 函数 3 执行过程 设 输入 5 n 5 第1次调用 y fac 5 返回 y 5fac 4 第2次调用 y 5 4fac 3 第3次调用 y 5 4 3fac 2 第4次调用 y 5 4 3 2fac 1 第5次调用 y 5 4 3 2 1 fac 0 第五章 函数 例2 汉诺塔 Hanoi 问题 B C 问题 将A塔上n个盘子移至C 借助于B 移动时 保证三个塔始终是大盘在下 小盘在上 A n

16、个盘子 第五章 函数 必须用递归方式解决 1 先将A塔n 1个盘子借助于C移至B上 2 将A上剩下的一个移至C上 3 将B上n 1个盘子借助于A移至C上 可以看到 1 3 为同一问题 都为n 1个盘子借助于一个 空塔移至另一塔上 第五章 函数 include void move char getone char putone 函数定义 printf c c n getone putone void hanoi int n char one char two char three 将n个盘从one借助two 移到three if n 1 move one three else hanoi n 1 one three two move one three 函数调用 hanoi n 1 two one three 程序如下 第五章 函数 第五章 函数 main int m printf input the number of diskes scanf d printf The step to moving 3d diskes n m hanoi m A B C 函数调用 第五章 函数 第五章

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 初中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号