ch7函数进阶和结构化编程_第1页
ch7函数进阶和结构化编程_第2页
ch7函数进阶和结构化编程_第3页
ch7函数进阶和结构化编程_第4页
ch7函数进阶和结构化编程_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、第 7 章 函数进阶和结构化编程7.1 7.1 结构化编程结构化编程 结构化程序设计结构化程序设计(Structured Programming)(Structured Programming)是一种良是一种良好的程序设计技术,它由著名计算机科学家好的程序设计技术,它由著名计算机科学家E EW WDijksDijkstratra于于19691969年提出年提出 7.1.1 7.1.1 自顶向下分析问题自顶向下分析问题 自顶向下分析问题就是把一个较大的复杂问题分解成自顶向下分析问题就是把一个较大的复杂问题分解成几个小问题后再解决。几个小问题后再解决。待解决的问题待解决的问题模块模块2 2模块模块

2、1 1模块模块3 3模块模块2.12.1模块模块2.22.27.1.2 7.1.2 模块化设计模块化设计 模块化设计时要遵循模块独立性的原则,即模块之间模块化设计时要遵循模块独立性的原则,即模块之间的联系应该尽量简单。具体体现在:的联系应该尽量简单。具体体现在:1 1一个模块只完成一个指定的功能一个模块只完成一个指定的功能2 2一个模块只有一个入口和一个出口一个模块只有一个入口和一个出口3 3模块间通过参数进行调用模块间通过参数进行调用4 4模块内慎用全局变量模块内慎用全局变量 在在C C语言中,模块一般通过函数来实现,一个模块对应语言中,模块一般通过函数来实现,一个模块对应一个函数。一个函数

3、。7.1.3 7.1.3 结构化编码结构化编码 经模块化设计后,每个模块都可以独立编码。编程时经模块化设计后,每个模块都可以独立编码。编程时应选用应选用顺序、选择和循环顺序、选择和循环3 3种控制结构种控制结构,并使程序具有,并使程序具有良好的风格。良好的风格。1 1见名知义命名对象名见名知义命名对象名2 2使用注释使用注释3 3使程序结构清晰使程序结构清晰4 4使程序具有良好的交互性使程序具有良好的交互性7.2 7.2 函数的嵌套调用函数的嵌套调用main( ) 函数函数调用调用a 函数函数结束结束a 函数函数调用调用b 函数函数b 函数函数例例: :求组合数。求组合数。float fac(

4、int n) int i; float f=1; for(i=2;i=n;i+) f*=i; return f;float cmn(int m,int n) float res; res=fac(m)/(fac(n)*fac(m-n); return res;void main() int m, n; float t; scanf(%d%d,&m,&n); t=cmn(m,n); printf(C(%d,%d)=%10.0fn,m,n,t);7.4 7.4 递归调用递归调用7.4.1 7.4.1 递归函数的执行过程递归函数的执行过程 如果函数如果函数直接直接或或间接间接地对自己进行调用,称函数

5、地对自己进行调用,称函数是递归函数,这种调用过程称为递归调用。是递归函数,这种调用过程称为递归调用。例例: 计算前计算前n个正整数之和。个正整数之和。main() printf(%d,sum(4);int sum(int n) if(n1) age(n-1)+2 (n1)age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10age(2)=12age(3)=14age(4)=16age(5)=18回推回推递推递推结束条件结束条件int age(int n) int c ; if (n=1) c=10; else

6、c=age(n-1)+2; return(c); main() printf(%d,age(5);例例2 2:求:求FibonacciFibonacci数列的第数列的第4040个数。个数。FibonacciFibonacci数列有如数列有如下特点:第下特点:第1 1、第、第2 2个数均为个数均为1 1,从第,从第3 3个数开始的每一个数开始的每一个数均是其前两个数之和。个数均是其前两个数之和。分析:递归公式表示分析:递归公式表示 1 1 (n=1,2)(n=1,2) Fn= Fn= Fn-1+Fn-2 Fn-1+Fn-2 (n3)(n3)long fib(int t) long int c;

7、if(t=1|t=2) c=1; else c=fib(t-1)+fib(t-2); return c; void main() printf(%10ld,fib(40);7.5 7.5 编译预处理编译预处理7.5.1 7.5.1 预处理的概念预处理的概念预处理:在预处理:在C C编译系统对程序进行通常的编译前,先对编译系统对程序进行通常的编译前,先对程序中以程序中以“”开头的命令进行的特殊处理。开头的命令进行的特殊处理。然后再将预处理的结果和源程序一起进行通常的编译然后再将预处理的结果和源程序一起进行通常的编译处理,从而得到目标代码。处理,从而得到目标代码。预处理命令以预处理命令以“”开头,

8、且占用单一的书写行;开头,且占用单一的书写行;预处理命令一般放在源程序的前面,且一般不以预处理命令一般放在源程序的前面,且一般不以“;”结束。结束。7.5.2 7.5.2 宏定义宏定义宏:代表一个字符串的标识符;宏:代表一个字符串的标识符;宏代换(宏展开):在编译预处理时,对程序中所有的宏代换(宏展开):在编译预处理时,对程序中所有的“宏宏”,用宏定义中的字符串去代换的过程。,用宏定义中的字符串去代换的过程。一、宏替换一、宏替换 1无参宏的定义无参宏的定义 格式:格式:define 标识符标识符 字符串字符串 如:如: define PI 3.1415926 define M (y*y+3*y

9、)说明:说明:1宏名习惯上用大写字母;宏名习惯上用大写字母;2宏定义不是说明或语句,不作语法检查;宏定义不是说明或语句,不作语法检查;3宏名的作用域一般自定义起到本源程序结束;宏名的作用域一般自定义起到本源程序结束; 可用可用undef 结束。结束。4宏定义允许嵌套;如:宏定义允许嵌套;如: #define PI 3.1415926 #define S PI*y*y printf(“%f”, S); 5宏名在源程序中若用引号括起来,则宏名在源程序中若用引号括起来,则TC中预处理不对其中预处理不对其作宏代换;如:作宏代换;如: printf(“PIn”);二、有参宏二、有参宏格式:格式: #de

10、fine #define 宏名宏名( (参数参数1 1,参数,参数n) n) 字符串字符串如:如: define S(a, b) a*b area=S(3, 2); 例:利用宏定义求两个数中的大数。例:利用宏定义求两个数中的大数。#define MAX(a, b) (ab)?a:bmain() int x, y, max; scanf(“%d %d”,&x,&y); max=MAX(x,y); printf(“max=%dn”,max); 例:例:#define PI 3.1415926#define S(r) PIrrmain() float a, area; a=3.6; area=S(a

11、); printf(“r=%fnarea=%fn”,a, area);说明:说明:1 1宏名与参数间不能有空格;宏名与参数间不能有空格;2如上例改为:如上例改为: #define PI 3.1415926 #define S(r) PIrr main() float a, b, area; a=3.6; b=4.1; area=S( a+b ); printf(“r=%fnarea=%fn”,a+b, area); 则宏展开为:则宏展开为: area=3.1415926*a+b*a+b7.5.3 7.5.3 文件包含文件包含一般形式:一般形式: #include 需包含的文件名需包含的文件名或或 #include 例如:例如: #include stdio.h #include 说明:说明:(1)(1)包含命令中的文件名可以用双引号或尖括号括起包含命令中的文件名可以用双引号或尖括号括起来,但有区别:来,但有区别: 使用尖括号:在标准目录中查找文件。使用尖括号:在标准目录中查找文件。 使用双引号:首先在当使用双引号:首先在当前前目录中查找,若没有找到,目录中查找,若没有找到,才去标准目录中查找。

温馨提示

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

评论

0/150

提交评论