- 1、本文档共33页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言课件第6章函数2.0
递归调用 变量的存储类别和作用域 预编译指令 预编译指令 所谓预编译,是指在对源程序进行编译之前,先对源程序中进行一些预处理;然后再将处理的结果,和源程序一起进行编译,以得到目标代码。 1.不带参数的宏定义(简单替换) 1、宏名遵循标识符规定,习惯用大写字母表示,以便区别普通的变量。 2、宏定义字符串不要以分号结束,否则分号也作为字符串的一部分参加展开。 2.带参数的宏定义 1、因为带参宏定义本质还是简单字符替换(除了参数替换),所以容易发生错误。 例:有宏定义: #define S(r) 3.14*r*r 则语句area=S(a+b); 应如何改呢? 宏定义改为 #define S(r) 3.14*(r)*(r) 总结:使用宏的优点 1、程序中的常量可以用有意义的符号代替,程序更加清晰,容易理解(易读)。 2、常量值改变时,不用在整个程序中查找修改,只要改变宏定义就可以。比如,提高PI精度值。 3、带参数宏定义比函数调用具有更高的时间效率,因为相当于代码的直接嵌入。(空间效率:多次调用占用空间较多,一次调用没有什么影响)。 (二)、文件包含 1、被包含的文件常常被称为“头文件”(#include一般写在文件的开头)。头文件常常以“.h”为扩展名(也可以用其它的扩展名,.h只是习惯或风格)。 2、一条#include只能包含一个头文件,如果要包含多个头文件,使用多条#include命令。 3、在一个被包含的文件中又可以包含另一个被包含文件,即文件包含是可以嵌套的。 4、被包含的头文件可以用“ ”括起来,也可以用括起来。区别在于: “”先在用户当前目录查找头文件,如果没找到,再到存放C库函数头文件的目录中查找;而直接到存放C库函数头文件的目录中查找。 一般地说,使用双引号比较保险。 5、习惯上,用户头文件一般在用户目录下,所以常常用“”;系统库函数的头文件一般在系统指定目录下,所以常常用。 第二部分讲义 本部分讲述: 函数的嵌套调用是指,在执行被调用函数时,被调用函数又调用了其它函数。其关系可表示如下图。 void f2() { … } void f1() { f2(); } main() { f1(); … } 1. 函数的嵌套调用 问题分析: 孪生素数是指间隔为2的两个素数,如:5和7 11和13 。 若求100-200间的孪生素数,可以先编写判断一个数是否素数的函数,然后再编写判断是否是孪生素数的函数。步骤如下: (1)定义一个判断素数的函数isPrime; (2)定义一个判断是否是孪生素数的函数isTwinPrimes。 (3)在主函数中调用isTwinPrimes ,输出100到200之间的所有孪生素数。 例6.6 求100-200之间孪生素数 #include “stdio.h” #include “math.h” int isPrime(int m) { int i,k; k=sqrt(m); for (i=2;i=k;i++) if(m%i==0) return 0; return 1; } int isTwinPrimes(int n) { if(isPrime(n)isPrime (n+2)) return 1; return 0; } void main() { int i; for(i=101;i200;i+=2) if(isTwinPrimes(i)==1) printf(“%d,%d\n”,i,i+2); } 程序如下: 在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。 在实际问题求解的时候,有时会遇到这样一类问题: 问题本身一般比较复杂,但是可以把它分解为一些子问题,子问题从复杂度上或规模上要比原问题更简单。另外,子问题的求解方法与原问题有相似的结构,可以继续分解下去,直到某一个终止条件成立时,分解到最后的子问题是非常容易求解的。然后我们可以把分解的过程再一步步的回溯综合起来,从而得到原问题的解。 2. 函数的递归调用 解的相似子结构 递归的条件: 终止条件 递归应用实例: 求阶乘; 汉诺塔问题; 用辗转相除法求两个整数的最大公约数 用递归法求一个整数的阶乘。
您可能关注的文档
最近下载
- 第五届国家级新区经开区高新区班组长管理技能大赛备赛试题库-上(单选题汇总).docx VIP
- 第五届国家级新区经开区高新区班组长管理技能大赛试题库(浓缩500题).docx VIP
- 肝硬化腹水病人的护理.pptx VIP
- 第21课 五四运动与中国共产党的诞生 教学设计-统编版(2019)高中历史必修中外历史纲要上册.doc VIP
- 大庆油田生产经营管理与辅助决策系统设计与实施.pdf VIP
- 公司行政人事部年终工作总结PPT.pptx VIP
- 宝宝家庭护理要点.pptx VIP
- 借条-借条模板.docx VIP
- 万元分利借条范本.docx VIP
- 2024-2025学年人教版数学五年级上册月考试卷(1-2单元)含答案.pdf VIP
文档评论(0)