版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- s版小学四年级语文下册教案(全册)
- 工业机器人虚拟仿真与实操课件 项目四 任务一 正方形物料搬运工作站仿真
- 天津市部分区2024-2025学年高三上学期期中考试生物(含答案)
- 网络安全专题培训
- 壁挂灯产业链招商引资的调研报告
- 打猎用伪装掩蔽物市场需求与消费特点分析
- 减肥用化妆品产业规划专项研究报告
- 录音装置市场发展预测和趋势分析
- 手杖市场需求与消费特点分析
- 冰镇球产业运行及前景预测报告
- “三新”背景下2024年高考政治一轮复习策略建议
- 网球活动策划推广方案
- 全国食品安全风险监测参考值 2024年版
- 急救学教学课件
- 2023年福建省考评员考试题
- (高清版)TDT 1032-2011 基本农田划定技术规程
- 中国钇-90行业市场现状分析及竞争格局与投资发展研究报告2024-2029版
- 2024全国职业院校技能大赛ZZ060母婴照护赛项规程+赛题
- 安全管理办法中的海外项目安全管理
- 文物修复保护方案
- 电气线路设备检修作业中安全保证规程培训
评论
0/150
提交评论