浙江大学C颜晖原版课件C6函 数_第1页
浙江大学C颜晖原版课件C6函 数_第2页
浙江大学C颜晖原版课件C6函 数_第3页
浙江大学C颜晖原版课件C6函 数_第4页
浙江大学C颜晖原版课件C6函 数_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

第六章函数 函数的基本使用函数的嵌套调用函数的递归调用变量存储特征宏 函数的概念 k n m f 1 for i 1 i n i f f i scanf d d d includevoidmain intk m n floatfk fm fn scanf d d d includevoidmain intk m n floatfk fm fn floatfact intn scanf d d d floatfact intn inti floatf 1 for i 1 i n i f f i returnf includevoidmain intk m n floatfk fm fn floatfact intn scanf d d d main 库函数 自定义函数 库函数 main主调函数 fact被调用函数 调用 定义 函数的概念 库函数scanf printf sqrt 功能独立 反复使用的代码段计算阶乘fact 模块化编程学生成绩档案管理软件 成绩输入成绩修改成绩统计成绩打印 includevoidmain intin printf 1 INPUT2 EDIT3 PROCESS4 PRINT5 EXIT n while 1 printf pleaseinput1 5 scanf d voidinput 成绩输入 voidedit 成绩修改 4个函数的定义voidprocess 成绩统计 voidprint 成绩打印 函数的定义和调用 voidmain intm n floatfk fm fn floatfact intn fm fact 6 调用 定义 floatfact intn inti floatf 1 for i 1 i n i f f i returnf 函数的定义和调用 返回值类型函数名 形式参数表 voidmain intm n floatfk fm fn floatfact intn fm fact 6 floatfact intn inti floatf 1 for i 1 i n i f f i returnf 调用 定义 函数名 实际参数表 参数传递 返回值类型函数名 形式参数表 voidmain intm n floatfk fm fn floatfact intn fm fact 6 floatfact intn inti floatf 1 for i 1 i n i f f i returnf 1 函数的参数形式参数类型1参数1 类型2参数2 类型n参数n定义函数时需要知道的信息参数个数 0 n实际参数调用时由主调函数给出 实参 形参 函数的参数 函数名 实际参数表 main output voidoutput printf n printf verygood n printf n main intx y z scanf d d 问题 实参可以是表达式吗 如果实参和形参的类型不一样 返回值类型函数名 形式参数表 voidmain intm n floatfk fm fn floatfact intn fm fact 6 floatfact intn inti floatf 1 for i 1 i n i f f i returnf 2 返回值类型函数返回一个值 合法类型return exp 函数的返回值 main output voidoutput printf n printf verygood n printf n 2 返回值类型函数返回一个值 合法类型return f 函数不返回值 voidreturn 或省略返回值类型缺省是int main intx y z scanf d d int 问题 如果返回值的类型与return exp 中的exp不一致 实参 实参与形参参数传递 voidmain intx y z scanf d d printf d z intmax inta intb intc c a b a b returnc 常量变量表达式 形参 变量 实参与形参参数传递 intmax inta intb intc c a b a b returnc voidmain intx y z scanf d d printf d z 5 1 实参与形参 个数相同 类型一致 按顺序传递2 实参 形参 值传递单向形参值的变化不会影响实参的值实参和形参可以同名 实参与形参参数传递 voidmain intx y z scanf d d printf d z intmax inta intb intc c a b a b returnc voidmain intx y scanf d d 阅读程序 voidswap intx inty intt t x x y y t 输入35 函数的说明 voidswap inta intb intt t a a b b t voidmain intx y scanf d d voidmain intx y scanf d d voidswap inta intb 函数在被调用前必须先定义或说明 函数调用小结 函数调用时 实参计算值 复制给相应位置的形参 函数执行完后 通过return exp 可返回结果 调用其他函数 必须先说明 分析函数调用过程 includevoidmain intk m n floatfk fm fn floatfact intn scanf d d d 例T6 11 2 n 算法 k 1tons s ff k k s 0 for k 1 k n k f fact k s s f floatfact intn inti floatf 1 for i 1 i n i f f i return f 例T6 2x x2 xn 算法 k 1tons s ff xkk s 0 for k 1 k n k f mypow x k s s f floatmypow floatx intn inti floatf 1 for i 1 i n i f f x return f 例T6 3编写函数比较2个变量是否相等 equal x y 当x y 返回1否则 返回0 intequal intx inty if x y return1 elsereturn0 voidmain intx y scanf d d intequal intx inty return x y 例T6 4输出100 200间所有素数 算法 m 100to200ifm是素数printm intprime intm inti n sqrt m for i 2 in return1 elsereturn0 for m 100 m 200 m if prime m printf d m prime m ifm是素数 返回1否则 返回0 函数的顺序调用和嵌套调用 顺序调用voidmain f1 f2 f1 f2 函数的顺序调用和嵌套调用 嵌套调用voidmain f1 f1 f2 f2 例求三角形面积area s s a s b s c s a b c 2 include includevoidmain floata b c floatarea floata floatb floatc floats floata floatb floatc scanf f f f 递归式 递归出口 函数的递归调用 递归函数 求n 递归定义n n n 1 n 1 n 1 n 0 1 voidmain floatfact intn printf f n fact 5 floatfact intn floatres if n 0 n 1 res 1 elseres n fact n 1 returnres fact n n fact n 1 递归函数求n 的实现过程 fact 3 3 fact 2 2 fact 1 1 2 6 floatfact intn floatres if n 0 n 1 res 1 elseres n fact n 1 returnres 函数的递归调用 递归函数 用递归实现的问题 满足两个条件 问题可以逐步简化成自身较简单的形式 递归式 n n n 1 nn 1 i n ii 1i 1递归最终能结束 递归出口 两个条件缺一不可解决递归问题的两个着眼点 变量作用范围 作用域 在函数内定义的变量 包括形参 局部变量作用范围 本函数内部 定义在复合语句内的变量 作用范围 复合语句内部 全局变量 在函数以外定义的变量 不从属于任一函数 作用范围 从定义处到源文件结束 包括各函数 变量作用范围示例 区分局部变量和全局变量intx 1 voidmain inta 2 intb 3 f intt 4 voidf intx 5 b 6 inta 7 x a b b x 5b 6t 4a没定义 若局部变量与全局变量同名 局部变量优先 变量作用范围示例 intx 1 intf intx return x main inty y f 2 x f x printf d d y x x 1 变量作用范围 如果局部变量与全局变量同名 局部变量优先 不要滥用全局变量 副作用 intx 1 voidf1 x voidf2 x 5 voidmain x 10 f1 printf d x f2 printf d x 115 变量存储形式和生存期 1 动态存储自动变量 auto 普通的局部变量intx y autointx y charc1 autocharc1 函数调用时 才定义变量 分配存储单元 函数调用结束 收回存储单元 即使对同一函数的几次调用 分配的存储单元也不同 floatfact intn floatres if n 0 n 1 res 1 elseres n fact n 1 returnres n 3 n 2 n 1 变量存储形式 2 静态存储在静态存储区分配单元执行程序时定义变量 分配单元 运行结束时收回 全局变量静态局部变量静态全局变量 intk main inti k 2 for i 4 i 0 i fun fun intj 2 printf j d k d n j k k k k j j j 示例 j 2 k 2 j 2 k 4 j 2 k 16 j 2 k 256 作用域 生存期 intgobal 1 voidfun voidmain inti for i 0 i 3 i fun voidfun intlocal 1 staticintstatic local 1 printf gobal d local d static local d n gobal local static local gobal local static local 静态局部变量 gobal 1 local 1 static local 1 gobal 2 local 1 static local 2 gobal 3 local 1 static local 3 作用域 生存期 intgobal 1 voidfun voidmain inti for i 0 i 3 i fun voidfun intlocal 1 staticintstatic local 1 printf gobal d local d static local d n gobal local static local gobal local static local 变量的初始化 作用域 生存期 intlocal local 1 staticintstatic local static local 1 等价吗 静态变量初值为0 变量存储形式 3 外部变量externintx 4 寄存器变量registerintk 某些系统对寄存器变量的使用会比普通变量运行速度快 但 中寄存器变量与auto变量等价 程序模块结构 文件模块的连接 include F1 c voidmain intn longt scanf d 文件名F1 c longfact intk inti longres 1 for i 1 i k i res res i returnres 文件名F2 c longfact intk inti longres 1 for i 1 i k i res res i returnres voidmain intn longt scanf d 文件名F1 c 程序模块结构 一 文件包含可以实现一个文件把另一个文件的全部内容包含进来 格式 include 文件名 说明 1 include不是 语句 无需分号 2 如果要连接多个文件 可用多个include包含 顺序按调用关系 被调的应在调用的前面 允许多层调用 3 文件与 性质相同 都是 程序文件 文件突出了头文件 head 的性质 4 include有两种写法 include file1 c include 只在tc include文件夹下找 适用于系统头文件 除此之外 还到程序所在文件夹下查找 适用于自定义头文件 二 使用工程文件 externlongfact intk voidmain intn longt scanf d 文件名file1 c longfact intk

温馨提示

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

评论

0/150

提交评论