第5章 模块设计.pptVIP

  • 1
  • 0
  • 约2.19万字
  • 约 75页
  • 2021-10-19 发布于广东
  • 举报
2021/10/15 * 说明:这里主要讨论函数的直接递归调用 递归就是某一事物直接或间接地由自己组成。如果一个函数在它的函数体内,直接或间接地调用自身,则称这个函数为递归函数,称这种调用方式为函数的递归调用。 递归的概念 int f(int x) { int y; z=f(y); retrun z; } int A(int n) { …… x=B(n-1); …… } int B(int m) { …… y=A(m-1); …… } 直接递归 间接递归 2021/10/15 * 递归函数的执行 执行过程(设n=3): 通过函数的递归调用计算n的阶乘。 fac(int n) { int t; ??if ((n==1)||(n= =0)) return 1; ??else? t=n*fac(n-1); ??return t ; } main() { int m,y; ????printf(“Enter m:”); ????scanf(%d,m); ????y=fac(n); ????printf(%d!=%d\n,m,y); }? y=fac(3) 输出y fac(3) main( ) t=3*fac(2) 返回t的值 t=2*fac(1) 返回t的值 t=1 返回t的值 fac(2) fac(1) 1 2 3 6 4 5 递归 回溯 参数传递 执行 返回 递归 函数 递归 公式 终止 条件 2021/10/15 * 递归函数的编写 从要解决的问题出发,按倒推的方法来思考:如果要解决一个规模大的问题,只要解决与之相似的小规模问题就好了(寻找递归公式);直到倒推到一个显而易见的已知问题为止,使这个已知的问题成立的条件就是递归终止条件。 long fact(int n) { long x; ???if (n=1) x=1; ???else? x=fact(n-1)*n; return(x); } 1 n=1 n*fac(n-1) n1 fac(n) = n!=n*(n-1)! (n-1)!=(n-1)*(n-2)! …… 2!=2*1! 1!=1 fact(n)=n*fact(n-1) fac(n-1)=(n-1)*fac(n-2) …… fac(2)=2*fac(1) fac(1)=1 递归公式 终止条件 递归公式 递归终止条件 2021/10/15 * 5.7编译预处理 作用:在编译前对源程序进行一些预加工,生成扩展C源程序 具体功能: 宏替换 #define 文件包含 #include 条件编译 #if--#else--#endif 预处理命令说明: “#”开头 占单独书写行 尾部不加分号 可以出现在程序中的任何位置 作用域是自出现点到程序正文结束 2021/10/15 * 功能:一个源文件可将另一个源文件的内容全部包含进来 一般形式: #include “文件名” 或 #include 文件名 #include “” A B A 处理过程:预编译时,用被包含文件的内容取代该预处理命令,再对“包含”后的文件作一个源文件编译 直接按标准目录搜索 “” 先在当前目录搜索,再搜索标准目录 可指定路径 1.文件包含 2021/10/15 * 源文件(*.c) 头文件(*.h) 宏定义 数据结构定义 函数说明等 文件包含可嵌套 #include “” A C #include “” B A 被包含文件内容 文件包含 2021/10/15 * 功能:对源程序中部分内容指定编译条件,条件满足的部分才进行编译 条件编译可有效地提高程序的可移植性 条件编译命令一般形式: 2.条件编译 形式1: #ifdef 标识符 程序段1 [#else 程序段2] #endif 含义:当标识符已经被#define命令定义,则对程序段1进行编译,否则若有#else部分,则编译程序段2。#else部分可以缺省。 形式2: #ifndef 标识符 程序段1 [#else 程序段2] #endif 含义:当标识符未被#define命令定义,则对程序段1进行编译,否则若有#else部分,则编译程序段2。#else部分可以缺省。 形式3: #if 表达式 程序段1 [#else 程序段2] #endif 含义:当表达式值为非零,则对程序段1进行编译,否则若有#else部分,则编译程序段2。#else部分可以缺省。 常

文档评论(0)

1亿VIP精品文档

相关文档