《c语言第八章函数》PPT课件.ppt

上传人:san****019 文档编号:7343870 上传时间:2020-03-20 格式:PPT 页数:41 大小:1.13MB
返回 下载 相关 举报
《c语言第八章函数》PPT课件.ppt_第1页
第1页 / 共41页
《c语言第八章函数》PPT课件.ppt_第2页
第2页 / 共41页
《c语言第八章函数》PPT课件.ppt_第3页
第3页 / 共41页
点击查看更多>>
资源描述
我的程序有上百行 如何调试最方便 我想设计一个程序完成下面的计算 其中 m n为正整数且m n该如何设计程序最有效 内容提要 概述函数的定义函数参数 变量 数组 和函数值函数的调用函数的嵌套调用局部变量和全局变量及变量的存储类别 第八章函数 8 1概述 C程序的结构如图所示一个C程序可以分为若干个函数每个程序有且只能有一个主函数 main 其它函数都是 子函数 子函数可以互相调用 但主函数不能被调用一个C程序由一个或多个文件构成 一个源程序文件是一个编译单位 说明 C程序的执行从main函数开始 调用其它函数后仍回到main函数 程序在main函数结束时结束 所有子函数都是平行的 任何子函数都不属于其它函数 从用户角度看 函数可分为 标准函数 即库函数自定义函数从函数形式看 可分为 无参数函数 如printstar 有参数函数 如printf 例8 1 include stdio h voidprintstar printf n voidprintmessage printf Hello world n printstar voidmain printstar printmessage Hello world 函数定义的一般形式 类型说明函数名 形式参数说明 函数体 形式参数说明方法 类型说明变量名 类型说明变量名 1 无参数的定义形式类型说明函数名 函数体 2 有参数的定义形式类型说明函数名 形式参数说明 函数体 3 空函数的定义形式类型说明函数名 形式参数说明 include stdio intmax intx inty intz z x y x y return z voidmain inta b c scanf d d 8 2函数定义的一般形式 例如 intsum intx inty intz z x y return z 又如voidprinthello charname printf Hello s n name 函数定义的一般形式 类型说明函数名 形式参数说明 函数体 一般情况下 函数体由两部分组成 局部变量说明 语句 局部变量 函数体内定义的变量 其有效范围仅限于所在函数的内部 离开函数体则无意义 例如 intsum intx inty intz z x y return z 又如voidprinthello charname printf Hello s n name 8 3函数参数和函数的值 一个C程序由若干个函数组成 各函数调用时经常需要传递一些数据 即调用函数把数据传递给被调用函数 经被调用函数处理后 得到一个确定的结果 在返回调用函数时 把这结果带回调用函数 a b z 各函数间的信息往来是由参数传递和返回语句实现的 主调函数 被调函数 一 形式参数和实际参数函数参数 用于函数间数据的传递形式参数 定义函数时使用的参数实际参数 调用函数时使用的参数函数max有两个形式参数x和y形参x和y只是在函数max中使用a和b是主函数中定义的变量main调用函数maxa和b为函数max的实参 include stdio intmax intx inty intz z x y x y return z voidmain inta b c scanf d d 5995Maxis95 一 形式参数和实际参数说明 1 定义函数时 必须说明形参的类型 形参只能是变量或数组2 函数被调用前 形参不占用内存 函数调用结束后 形参所占用的内存也将被收回 3 实参可以是常量 变量或表达式 4 实参也形参的类型必须一致 字符型和整型可以互相匹配 5 C语言中实参对形参的数据传递是 值传递 即单向传递 它仅由参数的对应位置确定 与名字无关 include stdio intmax intx inty intz z x y x y return z voidmain inta b c scanf d d intmax intb inta intc z a b a b return c 一 形式参数和实际参数例8 3读程序 写出运行结果 Sumof1 3is4 一 形式参数和实际参数二 函数的返回值1 返回函数值的方法函数的返回值也就是函数值 是一个确定的值 如果一个函数由返回值 就必须使用return语句 一个函数中可以有一个以上的return语句 但不论执行到哪个return都将结束函数的调用返回主函数 return语句中的括号可以省略 return后面的值可以是一个表达式 include stdio intmax intx inty intz z x y x y return z voidmain inta b c scanf d d if x y returnx returny return x y x y 二 函数的返回值1 返回函数值的方法2 函数值的类型 函数的类型即函数值的类型 例如 函数max是int型的也就是函数值是int型的 省略了类型说明的函数是int型的 return语句中表达式的值一般应与函数类型一致 如果不一致 则需要进行类型转换 只有数值型数据可以进行自动类型转换 以函数类型为准 include stdio intmax intx inty intz z x y x y return z voidmain inta b c scanf d d 二 函数的返回值1 返回函数值的方法2 函数值的类型3 不需要返回值的函数 如果函数中没有使用return语句 函数返回的是一个不确定的数值 参见例8 1 如果一个函数不需要返回值 表示一个过程 可以用void做类型说明 如果一个函数被声明为void类型 就不允许再引用它的返回值 即只能用函数语句形式调用 例8 1 include stdio h voidprintstar printf n voidprintmessage printf Hello world n printstar voidmain printstar printmessage 8 4函数的调用 一 函数调用的一般形式一般形式 函数名 实参表列 说明 如果调用无参函数 实参表列可以忽略 但括号不能省 实参的个数和形参一般相等 实参与形参的类型应一一对应 必要时使用类型转换 注意 不同系统中 实参的计算顺序不同 微机上一般是从右到左 为避免由此引起的混乱 一般应在调用函数前计算出实参的值 include stdio intmax intx inty intz z x y x y return z voidmain inta b c scanf d d floatmax floatx floaty floatz z x y x y return z 一 函数调用的一般形式二 函数调用的方式1 函数语句形式为 函数名 实参表列 例如 printmessage printf d p 说明 这种方式不要求函数带返回值 函数仅完成一定的操作 2 函数表达式函数的返回值参与运算例如 m max a b m 3 max a b printf Maxis d n max a b 说明 这种调用方式不能用于void型函数 一 函数调用的一般形式二 函数调用的方式三 函数调用的执行过程 按从右向左的顺序 计算实参中各表达式的值 按照位置 将实参的值一一对应的传给形参 执行被调用函数 当遇到return 表达式 语句时 计算表达式的值 并返回主调函数 例8 5读程序 写出结果 include stdio h floatiabs floatx return x 0 x x voidmain floatx 1 2 y y iabs x printf x f iabs x f n x y 一 函数调用的一般形式二 函数调用的方式三 函数调用的执行过程四 函数的原形说明在程序中调用函数需满足以下条件 1 被调函数必须存在 且遵循 先定义后使用 的原则 2 如果被调函数的定义在主调函数之后 位置 可以先给出原形说明 原形说明的形式为 类型说明函数名 参数类型 参数类型 说明 库函数的原形说明存放在头文件 h 中 通过使用include预处理命令将这些原形说明插入程序中 8 5函数的嵌套调用 嵌套调用是指在一个函数的函数体中又调用了其它函数 例8 1 include stdio h voidprintstar printf n voidprintmessage printf Hello world n printstar voidmain printstar printmessage 例8 6用弦截法求方程的根 x3 5x2 16x 80 0 算法分析 对于任意的f x 0 1 给定两个x1 x2 满足x1 x2且f x1 和f x2 的符号相反2 过f x1 f x2 两点做直线 弦 交于x轴与x 其中3 求f x 若f x 与f x1 同符号 则根必在 x1 x2 区间内 令x1 x 反之 根必在 x1 x 区间内 令x2 x4 重复2和3 直到 f x 为一个很小的数 如10 6 为止 此时有f x 0 例8 6用弦截法求方程的根 x3 5x2 16x 80 0程序说明 1 函数f x x3 5x2 16x 802 用函数xpoint x1 x2 求弦截点x的坐标3 用函数root x1 x2 求区间 x1 x2 上的根 y 思考用函数编程的好处 例编写程序求Cnm 分析 重复三次求阶乘运算 只是每次的值不同 将求阶乘的过程编写一个函数fac 以不同的参数值k来调用函数 inputm n 588 5 8 5 56 8 6函数的递归调用 许多数学函数都是递归形式定义的 递归调用是指在调用一个函数时又直接或间接的调用了函数本身 直接递归调用间接递归调用注意 这两个递归都无法结束 因此应含某条件控制递归调用结束 例8 7有5个人坐在一起 问第五个人多少岁 答 比第四个大2岁 第四个人说他比第三个人大2岁 第三个人比第二个人大2岁 第二个人比第一个人大2岁 问第一个时回答是10岁 第五个人到底多大 例8 8用递归法求阶乘n n 0 使用函数做 8 7数组元素作为函数的参数 一 数组元素做函数实参与变量做实参一样 数组元素做实参是 值传递 例8 9 求十个任意整数中的最大数 Enter10integer 235410567943215Maxis79 一 数组元素做函数实参二 一维数组与函数参数若函数的形参是数组 对应的实参必须是数组名 说明 1 实参数组也形参数组的类型必须一致 2 用数组名做参数时 传递的是数组的首地址 因此形参数组也可以不指定大小 但需另设一个参数 传递数组元素的个数 一 数组元素做函数实参二 一维数组与函数参数3 数组做参数时 形参数组和实参数组共享同一内存单元 如果形参数组的元素的值被修改 实参数组元素的值也就被改变了 例8 10用比较法排序 从大到小 一 数组元素做函数实参二 一维数组与函数参数三 多维数组与函数参数1 多维数组可以做为函数的参数 2 如果形参是多维数组 可以省略第一维大小 但不能省略其它维大小 例8 11有一个3 4的矩阵 求最大元素值 实参与形参的小结 8 8局部变量与全局变量 一 局部变量下列变量是局部变量1 在一个函数内部定义的变量2 函数的形式参数3 在某个复合语句中定义的变量说明 1 局部变量只在自己的范围内有效 2 如果局部变量的有效范围有重叠 则有效范围小的优先 一 局部变量二 全局变量在函数之外定义的变量 外部变量 是全局变量全局变量的有效范围是 从定义变量的位置开始到源文件结束 在一个函数中 既可以使用本函数中的局部变量 也可以使用有效的全局变量 一 局部变量二 全局变量说明 1 利用全局变量可以在函数间传递数据 例8 12有10个学生的学习成绩 求平均分 最高分和最低分 分析 用一个函数返回三个数据 除了用函数值外 可以借助于全局变量 可见 利用全局变量可以减少函数的参数 include stdio h floatmax 0 min 0 floataverage floatscore intn inti floatsum score 0 max min score 0 for i 1 iscore i min score i returnsum n voidmain floatavg score 10 intI for i 0 i 10 i scanf f 一 局部变量二 全局变量1 利用全局变量可以在函数间传递数据 2 尽量少使用全局变量 3 若全局变量与局部变量同名 则局部变量优先 8 9变量的存储类别 一 变量的静态存储和动态存储全局变量与局部变量 变量的作用域静态存储变量和动态存储变量 变量的存储类别 即生存期内存中供用户使用的存储空间包括 程序区 静态存储区 编译时分配空间 动态存储区 执行时分配空间 一 变量的静态存储和动态存储二 局部变量的存储类别1 自动变量存储在动态存储区 用auto说明如 intf inta autointb c 3 通常 将auto省略如 形参a 变量b c都是自动变量 调用该函数时 系统给他们分配存存储空间 函数调用结束是自动释放存储空间 一 变量的静态存储和动态存储二 局部变量的存储类别1 自动变量2 局部静态变量占用静态存储区用static说明说明 局部静态变量属于静态存储类别 在整个程序运行期间都不释放存储空间 局部静态变量在编译时赋初值 仅赋一次值 如果定义局部静态变量没有赋初值 编译时会自动赋初值 局部静态变量只能在定义它的函数内被引用 它存在但不能被其它函数使用 1 12 23 64 245 120 1 自动变量2 局部静态变量3 寄存器变量 计算机寄存器的个数有限 寄存器变量对寄存器的占用是动态的 有的系统将寄存器变量转换为自动变量来处理 而有的系统会自动设置寄存器变量 一 变量的静态存储和动态存储二 局部变量的存储类别三 全局变量的存储类别1 全局变量都是静态的2 用extern说明一个在其它源文件中定义的全局变量3 用static说明一个不能在其它源文件中引用的全局变量 应尽量少的使用全局变量 四 存储类别的小结1 变量的定义方法 存储类别 数据类型变量名 2 变量的划分按作用域按生存期按变量的存放位置 程序举例 例8 16编写一个函数swap用于交换两个整数的值 例如 设a 3 b 4 调用函数swap后 得a 4 b 3
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!