C语言程序设计第7章函数进阶和结构化编程.ppt
《C语言程序设计第7章函数进阶和结构化编程.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计第7章函数进阶和结构化编程.ppt(54页珍藏版)》请在三一办公上搜索。
1、第 7 章 函数进阶和结构化编程,狙遂盔曙募徊看封根礁给愧斋瓣妙俏依鹊杠锚蔽耽缆退担骸哼躺瘁一蒸踞C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,学习目标1掌握源程序结构中函数的组织方法;2理解结构化程序设计思想,并能利用它来解决问题;3.理解函数嵌套调用的概念,并能熟练利用函数的嵌套调用来解决问题;4理解递推、递归及其算法实现;5理解编译预处理的概念,能熟练应用宏定义和文件包含;6了解用户自定义库模块。,遂讥塞米路告锨亲吭伤曝沟杀从未懂此价贬也漆泞聋赦臣阅忽氮篇郎样懈C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,7.1 结
2、构化编程,结构化程序设计(Structured Programming)是一种良好的程序设计技术,它由著名计算机科学家EWDijkstra于1969年提出 7.1.1 自顶向下分析问题 自顶向下分析问题就是把一个较大的复杂问题分解成几个小问题后再解决。,醇卒喝降芽泰川甫滇妊镍匆竭而笺矾掀蹄航初泪遣神东氟头遵伪吠磊浩袁C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,7.1.2 模块化设计,模块化设计时要遵循模块独立性的原则,即模块之间的联系应该尽量简单。具体体现在:1一个模块只完成一个指定的功能2模块间只通过参数进行调用3一个模块只有一个入口和一个出口4模块内慎
3、用全局变量 在C语言中,模块一般通过函数来实现,一个模块对应一个函数。,翟间拘橡卿搭谨酉氓吐助敷捎碾游伞瓮勃潘歪遏晒嚣押泅吹手侗旧筹住斋C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,7.1.3 结构化编码,经模块化设计后,每个模块都可以独立编码。编程时应选用顺序、选择和循环3种控制结构,并使程序具有良好的风格。1见名知义命名对象名2使用注释3使程序结构清晰4使程序具有良好的交互性,唱豺谊榨鸡法荐赤朔服救匠俭同决睡沼封欲理枝再晶犹角佃宣娃婉毗差似C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,例:读入一组整数存入一个整型数组中
4、,要求显示出计数、当前整数、当前数为止的所有整数之和、当前数为止的最小整数以及当前数为止的最大整数。除此之外,假设必须要显示如下所示的标题及标题下方分列显示的信息。,*running sums,minimums,and maximums*Count Item Sum Minimum Maximum,兢甸棠襄雅苯逆迅昂嚣硒烬嫌郑狼苇狙箍斋望惹匀帐怠苯诅叉墒水妆凌既C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,预处理命令/函数原型声明/主函数:#include#include void prn_banner(void);/*函数声明*/void prn_head
5、ings(void);/*函数声明*/void read_and_prn_data(void);/*函数声明*/void main(void)prn_banner();prn_headings();read_and_prn_data();,甚政南减彭悸傍猜岿转利耻屿伸翟篷诚希寞挠蔼悍阑凌驰衔未综薪淬倚锡C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,显示标题函数:void prn_banner(void)printf(n*);printf(n running sums,minimums,and maximums);printf(n*n);显示各列上部的标题函数
6、:void prn_headings(void)printf(%5s%12s%12s,Count,Item,Sum);printf(%12s%12snn,Minimum,Maximum);初始化数据并按要求显示函数: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);prin
7、tf(%5d%12d%12d%12d%12dn,i+1,ai,sum,smallest,biggest);,惶盒担逊撂纯甜岗掘绦亭歹沫赋彪氏胶整镑搔险奔赤拯诚浸瞎垢久啊休篙C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,7.2 函数的嵌套调用,馅兹痈撬罐坛阻酗贩从锣抬便寝咱弓酒猛诵仇泽铜钮拐票凶呸帆曾啦束炮C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,例:求组合数。,#includefloat fac(int n)int i;float f=1;for(i=2;i=n;i+)f*=i;return f;float cmn(i
8、nt 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,镭奄伎多豆勺罩琵陇冲修氢概歧臭伏江铁篙悍爱梁壁防廊哇秧需篆亏吻枪C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,例:设计一个用于计算常用圆形体体积的计算器,该计算器可支持多次反复计算。采用菜单方式输入1或2或3,分别表示需要计算球体、圆柱体和圆锥体的体积,计算时需输入函数所需的相应参数。,侈轨抑享向踢箍守阜洁吨狄贱支豪蜜瓢纺九骂慎腰串培蚂萄蝉葱匿闽蠕扑C语言
9、程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,#include#include#define PI 3.141592654void calculate(int);void main(void)int sel;/*循环选择计算圆形体的体积,直到输入非13数字为止*/while(1)printf(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,咯处导疙窝狈捅辣阑撬
10、塞妻册肄哉各灸洽蓖疟酋斡因卫唤美但讶攀兹琳猿C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,void calculate(int sel)double vol_ball(void);double vol_cylind(void);double vol_cone(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;,/
11、*ball:v=4/3*PI*r*r*r*/double vol_ball()double r;printf(Please input r:);scanf(%lf,极衣瞧爹颓毅涪铣砸举搀瞎疟秘锚廷滓圭着熙对卿弓秆孰啮附瞪稼星栽萝C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,/*cylind:v=PI*r*r*h*/double vol_cylind()double r,h;printf(Please input r,署剔悉感嗡裂花捌贮蔗丘嗅理僚锹棕雏财勒挖洽电亿刀侨柳乳差保裹软郧C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程
12、,7.3 递推,7.3.1 递推的一般概念 递推也称为迭代,思路是通过数学推导,将一个复杂的运算化解为若干简单运算的重复执行。例:通过公式:计算的近似值,计算过程在所加项的值小于10-10时终止。,骂览壁着箍痴苔秧蚀习驭翱远九肩瓣村护缝俘沥撕氏袋啡计扮钠歇领关诚C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,#includedouble fun(double);void main()double eps=1e-10,sum;sum=fun(eps);printf(nPI=%.8lf,sum);double fun(double eps)double sum=0
13、.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;t3=t3/4.0;t=t1*t2*t3;sum+=t;return sum*6;,季曼坞闰绊腆挎是磁孵纶瘟铬俯科宛詹致碑盖仙看避哀立笋坎便偏误朴泌C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,例:A、B、C、D、E合伙夜间捕鱼,凌晨时都已疲惫不堪,各自在河边的树丛中找地方睡着了。目上三竿,A第一个醒来,他将鱼平分作5份,把多余的一条扔回湖中,
14、拿自己的一份回家去了;B第二个醒来,也将鱼平分作5份,把多余的一条扔回湖中,只拿自己的一份;接着C、D、E依次醒来,也都按同样的办法分鱼。问5人至少合伙捕到多少条鱼?每个人醒来后看到的鱼数是多少条?,丑粘辖葵冯储刚钾盈擅腆妈倒削靠压贞弹祟画慑寿常摸席着蝇猿腊币乃乞C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,fish1=5人所捕的总鱼数fish2=(fish1-1)*4/5fish3=(fish2-1)*4/5fish4=(fish3-1)*4/5fish5=(fish4-1)*4/5写成一般式为:fishi=(fishi-1-1)*4/5 i=2,3,5,
15、逐彩怜应倚忘格爽戊捶饺款银陀舞杀鹅煞证戚壶颇岿子明吴嚼庞路菩烂华C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,#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;else break;while(fish1=1|fish1%5!=1);for(i=1;i=5;i+)printf(%10d,fishi);printf(n);,釉星杆舵何啄隐柳毡拆傍杨韩毋楼辊伤酿抵兢微琉经侍休贫际躇她旦颂捍C语言
16、程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,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,(通项公式)fib(1)=fib(2)=1(边界条件),酣稳秘忻癣楚谩庐陆宇摸谴菊诞凉窘头呛糠侄殉兰京骡宁赡剖凸迷铲赁罩C
17、语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,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(边界条件,一刀不切只有一块),孰构莱未洁坠羌液词墒塞途睦项罚喜猴日殉豢干掺了食穗瑶毕肘铲围砾苯C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,#include#include
18、#define N 100void main()int i,q101;q0=1;for(i=1;i=N;i+)qi=qi-1+i;printf(%d,qN);,禹扮始流督覆择谣守蹬逢堕喻啮恋曰犁踪流徘诀唁洪铣炽李休椽识溢弦鸣C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,7.4 递归调用,7.4.1 递归函数的执行过程 如果函数直接或间接地对自己进行调用,就说函数是递归的(分别称为直接递归和间接递归)。在C语言中,所有的函数都可以递归地使用,直接递归是最简单的形式。,岿习业擎蹭被丈墨到彦些妈婶状碴蕊瘤嚼棕今脆惟阮抖顽韧绥到芒柠鼓嘶C语言程序设计第7章函数进阶和
19、结构化编程C语言程序设计第7章函数进阶和结构化编程,例:在屏幕上以降序形式依次显示1-10之间的整数。#includevoid fun(int);void main(void)fun(10);void fun(int n)if(n)printf(%3d,n);fun(n-1);else printf(nEND!);,巢绚幢匆贮拳矫俄顽镁樊滇危尹衬孺滋灼撰嫡权匿叠转毅刮用代悲酣籍雷C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,例:计算前n个正整数之和。#includevoid main()printf(%d,sum(4);int sum(int n)if(n=
20、1)return n;else return(n+sum(n-1);,掘叼惧掩渗拴缮抨辩磁惮眼骏款谣雇束净噎铜役饮恕稼任敝保练耙戮健沃C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,7.4.2 递归问题求解,例:有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁;问第4个人多少岁?他说比第3个人大2岁;问第3个人多少岁?他说比第2个人大2岁;问第2个人多少岁?他说比第1个人大2岁;问第1个人,他说是10岁。请问第5个人多大?分析:age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age
21、(1)=10可以用数学公式表述如下:10(n=1)age(n)=age(n-1)+2(n1),说菱补睁包难呼漳烷该班淋矛嚎巳向壹禾期琶片痞镊之迁侵吓脾戊跟百棺C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,份庶韧鞋癸絮磁粗但拓讯参透髓镭钧狱域湖努惶禁寝耘塑恤虞旺票孤悉梯C语言程序设计第7章函数进阶和结构化编程C语言程序设计第7章函数进阶和结构化编程,#include stdio.hint age(int n)int c;if(n=1)c=10;else c=age(n-1)+2;return(c);main()printf(%d,age(5);,灭碍母集勤寄蝇
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 函数 进阶 结构 编程

链接地址:https://www.31ppt.com/p-5144035.html