c语言第7章 模块化程序设计.ppt_第1页
c语言第7章 模块化程序设计.ppt_第2页
c语言第7章 模块化程序设计.ppt_第3页
c语言第7章 模块化程序设计.ppt_第4页
c语言第7章 模块化程序设计.ppt_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、第 7 章 模块化程序设计,本章主要描述模块化程序及模块化编程技术,第七章 模块化程序设计,7.1模块化程序概述 7.2用函数实现模块化编程技术 7.3常见编程错误,7.1 概述,1.模块化编程概念 当解决一个比较复杂的问题时,如果把问题分解成若干个易于求解的子问题,每个子问题都用一个相对独立的程序段来处理,最后再把所有的程序段结合在一起,形成完整程序,这就是模块化程序设计的方法。 2.模块化编程的基本方法和步骤 模块化编程主要针对两方面:分析数据、控制程序流程。 实现模块化编程主要分为五步:,Step1:明确问题 Step2:分析问题 Step3:算法设计 (1)分解模块 (2)设计模块 S

2、tep4:实现模块 Step5:测试,7.2 用函数实现模块化编程技术,使用函数实现模块化编程,通常可以通过嵌套调用、递归调用、按地址传递以及空返回等方式来实现。,7.2.1.函数的嵌套调用,1.嵌套调用 一个函数在被调用的同时,又调用了另外一个函数,称为嵌套调用,如图所示:,函数A,函数B,函数C,调用,调用,2.【案例7.1】编写程序,计算并打印两个整数的平均值。 /*求两个整数的平均值*/ #include Int sum(int n1,int n2) Int s; s=n1+n2; return s; Int ave(int num1, int num2) int x; x=sum(n

3、um1,num2)/2; /*在ave函数中调用sum函数*/ return x; Int main() int a,b; printf(“a=”);scanf(“%d, ,3.代码分析,函数执行过程: (1)执行main函数的开头部分 (2)遇到调用ave函数的语句,流程转去ave函数 (3)执行ave函数的开头部分 (4)遇到调用sum函数的语句,流程转去sum函数 (5)执行sum函数,没有再调用其它函数,完成sum函数全部操作。 (6)返回调用sum函数处,即回到ave函数 (7)继续执行ave函数尚未执行的部分,直到ave结束 (8)返回到main中调用ave处 (9)继续执行mai

4、n的剩余部分语句,直到结束。,7.2.2 递归调用,1.定义 嵌套调用还有一种特殊的格式,就是一个函数直接或者间接的调用自己,称为递归调用。如图所示:,函数,调用,函数A,函数B,调用,2.【案例7.2有5各人坐在一起,求第五个人的岁数?他比第四个人大3岁。第四个人比第三个人大3岁,第三个人比第二个人大3岁,第二个人比第一个人大3岁。第一个人是10岁。(用递归编程),/*使用递归调用*/ #include Int age(int n) int x; if (n=1) x=10; /*递归终止的条件*/ else x=age(n-1)+3; /*递归调用自身*/ return x; Int ma

5、in() printf(“第五个人d岁n”, age(5); return 0; ,3.源码分析说明,递归调用以递归终止条件是否成立为界限,分为递推和回推两个阶段: (1)递归调用终止条件 递归调用不可以无终止的调用下去,否则就成了死循环。递归调用必须有一个终止条件。案例7.2的递归调用终止条件是n=1,即当求到第一个人的年龄时,结束调用。 (2)递推过程 当终止条件不成立时,调用age函数。传递的实参值时n-1,每调用一次,n的值就减1,即先调用age(5),求age(5)的值就是求age(4)+3;再调用age(4),求age(4)的值就是求age(3)+3直到n的值等于1。 (3)回推过

6、程 当终止条件成立时,终止递归调用,执行x=10;然后执行语句return x;将x的值返回给age(1),则age(1)的值是10。再将age(1)+3的值13返回给age(2),依次类推,每返回一次,就退回到上一级,直到把age(4)+3的值22返回给age(5).,7.2.3 指针变量做形参,1.定义 在函数调用时,将实参的地址传递给形参,实参和形参共用同一个存储单元,当形参的值发生变化时,实参的值也发生变化。,2.案例7.3值传递和传递地址的比较,/*使用传递地址和传递值的方式,改变两个变量的值*/ #include Void tranAddress(int *p1, int *p2)

7、 /*形参是两个指针变量*/ *p1+=10; *p2-=5; Void tranValue(int x, int y) /*形参时两个整型变量*/ x+=10; y-=5; Int main() int a=3,b=5; printf(“调用函数前a=d,b=%dn”,a,b); tranValue(a,b); printf(“使用值传递方式调用函数后,a=d,b=%dn”,a,b); tranAddress( ,3.源码分析说明,(1)值传递 1)当执行语句tranValue(a,b)调用函数时,为形参x,y分配内存空间,并将实参a,b的值赋给x,y。形参和实参拥有不同的存储空间。 2)执行tranValue函数体内部的语句时,形参的值会发生变化,但是不影响实参的值。 3)tranValue函数执行完毕,形参的内存空间释放,实参的值不变。 (2)地址传递 1)执行

温馨提示

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

评论

0/150

提交评论