第06章函数与预处理.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第06章函数与预处理

第6章 函数与预处理 *重点与难点 6.1 模块化软件与C程序的模块结构 6.2 函数定义、参数和返回值 6.3 函数调用 6.4 函数中使用的变量 6.5 内部函数与外部函数 6.6 多文件的程序运行 6.7 预处理命令 *本章小结 *作业 重点与难点 重点:函数的定义、声明、参数传递和调用;函数的嵌套调用;变量的作用域与生存期。 难点:参数传递和函数的嵌套调用。 6.1 模块化软件与C程序的模块结构 6.1.1 模块化软件 6.1.2 C语言的模块结构 6.1.1 模块化软件 模块化:就是将一个较为复杂的、大型的项目按其功能与结构,划分为若干个功能相对独立的模块(Module),每个模块实现一个功能。 C语言:是一种结构化程序设计语言,结构化程序设计的基本思想之一就是程序的“模块化”。每个模块在C语言中可以用函数来实现。 6.1.2 C语言的模块结构 C程序的组成 C程序:可以由一个或多个C源程序文件组成。在C语言中,一个C语言的源程序文件就是一个编译单位。 函数:它是C源程序的基本模块。 函数分类 从用户使用的角度 标准库函数与用户自定义函数 从有无函数返回值的角度 有返回值函数与无返回值函数 从有无参数的角度 有参函数与无参函数 6.2 函数定义、参数和返回值 6.2.1 函数定义的一般形式 6.2.2 函数参数与参数传递 6.2.3 函数返回值 6.2.1 函数定义的一般形式 1、无参函数 2、有参函数 3、空函数 1、无参函数 2、有参函数 3、空函数 6.2.2 函数参数与参数传递 1、分类:形式参数和实际参数。 2、形参:在函数定义的时候声明的参数称为形式参数,简称形参。形参是变量名。 3、实参:在函数调用的时候使用到的参数称为实际参数,简称实参。实参是表达式。 参数传递 1、参数传递是实参传递给形参。 2、传递要求:在参数传递的过程中,实参的个数必须与形参的个数一样多,并且类型应相同或保持兼容,否则系统会给出错误。 3、分类 值传递与地址传递 值传递方式 值传递图示 地址传递方式 6.2.3 函数返回值 函数的返回值是通过return语句返回主调函数。该语句的形式如下: 返回值类型 return语句的表达式的计算结果的类型常常与函数定义的返回类型不一致。这时应该以哪一个为准呢? (1)C语言规定,函数的返回值的类型以函数定义的类型为准。 (2)如果return语句中的表达式是数值型的,系统自动进行类型转换。如果系统不能自动转换的,则需要编程人员进行强制转换。 函数默认类型 如果在函数定义时没有指定返回值的类型,系统默认为int型的。 无return语句 如果被调用函数中没有return语句,是不是没有返回值呢? 其实不是,函数仍然返回一个值,只不过这个值是不确定的、也不是用户所希望得到的。 如果一个函数没有返回值,最好是用void明确地表示出来。这样,可以保证函数正确调用,减少出错。 6.3 函数调用 6.3.1 函数的一般调用 6.3.2 函数的嵌套调用 6.3.3 函数的递归调用 6.3.1 函数的一般调用 函数名(实参表列) 函数调用形式 (1)函数语句 printf(Welcome to C language.); (2)函数表达式 c=max(a,b); (3)函数作参数 d=max(a,max(b,c)) ; 6.3.2 函数的嵌套调用 举例:用弦截法求方程的根。 自定义函数 1、f(x) = 2、xpoint( , )= 3、root(x1,x2) 函数调用关系 root函数 float root(float x1,float x2) { float x,y,y1=f(x1); do{ x=point(x1,x2); y=f(x); if(y*y10) {y1=y;x1=x;} else x2=x; }while(fabs(y)=0.0001); return(x); } 6.3.3 函数的递归调用 递归的两个阶段 回推和递推 回推到可以确定值(即递归结束条件)时结束;递推从起初值开始进行迭代。 4!的回推与递推举例 回推 f(4)=4*f(3)=4*3*f(2)=4*3*2*f(1) 递推 f(1)=1 f(2)=2*f(1)=2 f(3)=3*f(2)=3*2=6 f(4)=4*f(3)=4*6=24 递归调用实质 在不能计算出结果时,先压栈;在能够计算时,逐个出栈。 例6.8 利

文档评论(0)

kabudou + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档