C语言程序设计第7章函数进阶和结构化编程课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言程序设计第7章函数进阶和结构化编程课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 函数 进阶 结构 编程 课件
- 资源描述:
-
1、第 7 章 函数进阶和结构化编程1完整版ppt学习目标1掌握源程序结构中函数的组织方法;2理解结构化程序设计思想,并能利用它来解决问题;3.理解函数嵌套调用的概念,并能熟练利用函数的嵌套调用来解决问题;4理解递推、递归及其算法实现;5理解编译预处理的概念,能熟练应用宏定义和文件包含;6了解用户自定义库模块。2完整版ppt7.1 7.1 结构化编程结构化编程 结构化程序设计(Structured Programming)是一种良好的程序设计技术,它由著名计算机科学家EWDijkstra于1969年提出 7.1.1 7.1.1 自顶向下分析问题自顶向下分析问题 自顶向下分析问题就是把一个较大的复杂
2、问题分解成几个小问题后再解决。待解决的问题模块2模块1模块3模块2.1模块2.23完整版ppt7.1.2 7.1.2 模块化设计模块化设计 模块化设计时要遵循模块独立性的原则,即模块之间的联系应该尽量简单。具体体现在:1一个模块只完成一个指定的功能2模块间只通过参数进行调用3一个模块只有一个入口和一个出口4模块内慎用全局变量 在C语言中,模块一般通过函数来实现,一个模块对应一个函数。4完整版ppt7.1.3 7.1.3 结构化编码结构化编码 经模块化设计后,每个模块都可以独立编码。编程时应选用顺序、选择和循环3种控制结构,并使程序具有良好的风格。1见名知义命名对象名2使用注释3使程序结构清晰4
3、使程序具有良好的交互性5完整版ppt例:读入一组整数存入一个整型数组中,要求显示出计数、当前整数、当前数为止的所有整数之和、当前数为止的最小整数以及当前数为止的最大整数。除此之外,假设必须要显示如下所示的标题及标题下方分列显示的信息。*running sums,minimums,and maximums*Count Item Sum Minimum Maximum6完整版ppt预处理命令/函数原型声明/主函数:#include#include void prn_banner(void);/*函数声明*/void prn_headings(void);/*函数声明*/void read_and_
4、prn_data(void);/*函数声明*/void main(void)prn_banner();prn_headings();read_and_prn_data();7完整版ppt显示标题函数:void prn_banner(void)printf(n*);printf(n running sums,minimums,and maximums );printf(n*n);显示各列上部的标题函数:void prn_headings(void)printf(%5s%12s%12s,Count,Item,Sum);printf(%12s%12snn,Minimum,Maximum);初始化数据
5、并按要求显示函数:void read_and_prn_data(void)int i,sum,smallest,biggest;int a10=1,2,6,7,0,-6,19,52,10,-10;sum=0;smallest=biggest=a0;for(i=0;i10;i+)sum+=ai;smallest=min(ai,smallest);biggest=max(ai,biggest);printf(%5d%12d%12d%12d%12dn,i+1,ai,sum,smallest,biggest);8完整版ppt7.2 7.2 函数的嵌套调用函数的嵌套调用main函数调用a函数结束a函数调
6、用b函数b函数a函数结束b函数结束函数嵌套调用结构示意图函数嵌套调用结构示意图9完整版ppt例:求组合数。#includefloat fac(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;printf(Input m&n:);scanf(%d%d,&m,&n);t=cmn(m,n);printf(C(%d,%d)=%10.0fn,m,n,t);1
7、0完整版ppt例:设计一个用于计算常用圆形体体积的计算器,该计算器可支持多次反复计算。采用菜单方式输入1或2或3,分别表示需要计算球体、圆柱体和圆锥体的体积,计算时需输入函数所需的相应参数。main函数calculate函数vol_cylind函数vol_ball函数vol_cone函数圆形体体积计算器函数调用结构圆形体体积计算器函数调用结构11完整版ppt#include#include#define PI 3.141592654void calculate(int);void main(void)int sel;/*循环选择计算圆形体的体积,直到输入非13数字为止*/while(1)pri
8、ntf(tt%s,1-balln);printf(tt%s,2-cylindn);printf(tt%s,3-conen);printf(tt%s,other-exitn);printf(ttPlease input your selete:);scanf(%d,&sel);if(sel3)printf(n input errornplease input 13n);break;else calculate(sel);12完整版pptvoid calculate(int sel)double vol_ball(void);double vol_cylind(void);double vol_c
9、one(void);switch(sel)case 1:printf(ball:%.2lfn,vol_ball();break;case 2:printf(cylind:%.2lfn,vol_cylind();break;case 3:printf(cone:%.2lfn,vol_cone();break;/*ball:v=4/3*PI*r*r*r*/double vol_ball()double r;printf(Please input r:);scanf(%lf,&r);return 4.0/3*PI*r*r*r;13完整版ppt/*cylind:v=PI*r*r*h*/double v
10、ol_cylind()double r,h;printf(Please input r&h:);scanf(%lf%lf,&r,&h);return PI*r*r*h;/*cone:v=PI*r*r*h/3.0*/double vol_cone()double r,h;printf(Please input r&h:);scanf(%lf%lf,&r,&h);return PI*r*r*h/3.0;14完整版ppt7.3 7.3 递推递推7.3.1 7.3.1 递推的一般概念递推的一般概念 递推也称为迭代,思路是通过数学推导,将一个复杂的运算化解为若干简单运算的重复执行。例:通过公式:计算的近
11、似值,计算过程在所加项的值小于10-10时终止。75321716543212151432121312121615完整版ppt#includedouble fun(double);void main()double eps=1e-10,sum;sum=fun(eps);printf(nPI=%.8lf,sum);double fun(double eps)double sum=0.5,t,t1,t2,t3;int odd=1,even=2;t=t1=t2=1.0;t3=0.5;while(t1e-10)t1=t1*(even-1)/even;odd+=2;even+=2;t2=1.0/odd;t
12、3=t3/4.0;t=t1*t2*t3;sum+=t;return sum*6;16完整版ppt 例:A、B、C、D、E合伙夜间捕鱼,凌晨时都已疲惫不堪,各自在河边的树丛中找地方睡着了。目上三竿,A第一个醒来,他将鱼平分作5份,把多余的一条扔回湖中,拿自己的一份回家去了;B第二个醒来,也将鱼平分作5份,把多余的一条扔回湖中,只拿自己的一份;接着C、D、E依次醒来,也都按同样的办法分鱼。问5人至少合伙捕到多少条鱼?每个人醒来后看到的鱼数是多少条?17完整版pptfish1=5人所捕的总鱼数fish2=(fish1-1)*4/5fish3=(fish2-1)*4/5fish4=(fish3-1)*
13、4/5fish5=(fish4-1)*4/5写成一般式为:fishi=(fishi-1-1)*4/5 i=2,3,5int fish6=1,1,1,1,1,1,ifish5=fish5+5for(i=4;i0;i-)fishi+1%5=1YNbreakfishi=fishi+1*5/4+1当fish1=1|fish1%5!=1输出计算结果fish1fish518完整版ppt#include void main()int fish6=1,1,1,1,1,1,i;do fish5=fish5+5;for(i=4;i0;i-)if(fishi+1%5=1)fishi=fishi+1*5/4+1;el
14、se break;while(fish1=1|fish1%5!=1);for(i=1;i=5;i+)printf(%10d,fishi);printf(n);19完整版ppt7.3.2 7.3.2 递推数列递推数列 如果一个数列从某一项起,它的任何一项都可以用它前面的若干项来确定,这样的数列被称为递推数列,表示某项与其前面的若干项的关系就称为递推公式。例如Fibonacci数列如下:1,1,2,3,5,8,13,令fib(n)表示Fibonacci数列的第n项,依据数列中项与项之间的关系可写出如下Fibonacci数列的递推公式:fib(n)=fib(n-1)+fib(n-2)n=3,4,(通
15、项公式)fib(1)=fib(2)=1 (边界条件)20完整版ppt7.3.3 7.3.3 递推算法的程序实现递推算法的程序实现例:王小二自夸刀工不错,有人放一张大的煎饼在砧板上,问他:“饼不许离开砧板,切100刀最多能分成多少块?”q(1)=1+1=2q(2)=1+1+2=4q(3)=1+1+2+3=7q(4)=1+1+2+3+4=11用归纳法不难得出:q(n)=q(n-1)+n(通项公式)q(0)=1(边界条件,一刀不切只有一块)切1刀切饼问题示意图切2刀切3刀切4刀21完整版ppt#include#include#define N 100void main()int i,q101;q0=
16、1;for(i=1;i=N;i+)qi=qi-1+i;printf(%d,qN);22完整版ppt7.4 7.4 递归调用递归调用7.4.1 7.4.1 递归函数的执行过程递归函数的执行过程 如果函数直接或间接地对自己进行调用,就说函数是递归的(分别称为直接递归和间接递归)。在C语言中,所有的函数都可以递归地使用,直接递归是最简单的形式。23完整版ppt例:在屏幕上以降序形式依次显示1-10之间的整数。#includevoid fun(int);void main(void)fun(10);void fun(int n)if(n)printf(%3d,n);fun(n-1);else prin
17、tf(nEND!);24完整版ppt例:计算前n个正整数之和。#includevoid main()printf(%d,sum(4);int sum(int n)if(n1)26完整版pptage(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求年龄的递归调用过程27完整版ppt#include stdio.hint age(int n)int c;if(n=1)c=10;else c=age(n-1)+2;return(c);main()
展开阅读全文