資源描述:
《C語言_ch07_2_函數(shù)的嵌套調(diào)用和遞歸調(diào)用.pptx》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、2021/9/161上一節(jié)我們學(xué)到了函數(shù)的定義形參函數(shù)的聲明函數(shù)的調(diào)用實參函數(shù)的調(diào)用過程局部變量(包括形參)何時分配內(nèi)容、何時釋放內(nèi)存何時實參賦形參2021/9/162第7章用函數(shù)實現(xiàn)模塊化程序設(shè)計7.1為什么要用函數(shù)7.2怎樣定義函數(shù)7.3調(diào)用函數(shù)7.4對被調(diào)用函數(shù)的聲明和函數(shù)原型7.5函數(shù)的嵌套調(diào)用7.6函數(shù)的遞歸調(diào)用7.7數(shù)組作為函數(shù)參數(shù)7.8局部變量和全局變量7.9變量的存儲方式和生存期7.10關(guān)于變量的聲明和定義7.11內(nèi)部函數(shù)和外部函數(shù)2021/9/163函數(shù)的嵌套調(diào)用nestedfunction函數(shù)的嵌套調(diào)用:調(diào)用一個函數(shù)的過程中,又可以調(diào)用另一
2、個函數(shù)注意:C語言的函數(shù)定義是互相平行、獨立的,即函數(shù)不能嵌套定義2021/9/164嵌套調(diào)用的執(zhí)行過程main函數(shù)①調(diào)用a函數(shù)⑨結(jié)束a函數(shù)③調(diào)用b函數(shù)⑦②⑧b函數(shù)⑤④⑥2021/9/165例:設(shè)計一個常用圓形體體積計算器,采用命令方式輸入1、2、3,分別選擇計算球體、圓柱體、圓錐體的體積,并輸入計算所需相應(yīng)參數(shù)。分析:輸入1、2、3選擇計算3種體積,其他輸入結(jié)束計算設(shè)計一個控制函數(shù)cal(),經(jīng)它辨別圓形體的類型再調(diào)用計算球體、圓柱體、圓錐體體積的函數(shù)設(shè)計單獨的函數(shù)計算不同圓形體的體積2021/9/1663層結(jié)構(gòu),5個函數(shù)降低程序的構(gòu)思、編寫、調(diào)試的復(fù)雜度可
3、讀性好程序結(jié)構(gòu)main()cal()vol_ball()vol_cylind()vol_cone()程序結(jié)構(gòu)intmain(void){……cal(sel);}voidcal(intsel){……vol_ball();vol_cylind();vol_cone();}doublevol_ball(){……}doublevol_cylind(){……}doublevol_cone(){……}main()cal()vol_ball()vol_cylind()vol_cone()源程序#definePI3.141592654voidcal(intsel);doubl
4、evol_ball(void);doublevol_cylind(void);doublevol_cone(void);intmain(void){intsel;while(1){printf("1-計算球體體積");printf("2-計算圓柱體積");printf("3-計算圓錐體積");printf("其他-退出程序運行");printf("請輸入計算命令:");scanf("%d",&sel);if(sel<1
5、
6、sel>3)//輸入非1~3,循環(huán)結(jié)束break;cal(sel);//輸入1~3,調(diào)用cal()}return0;}/*常
7、用圓形體體積計算器的主控函數(shù)*/voidcal(intsel){switch(sel){case1:printf("球體積為:%.2f",vol_ball());break;case2:printf("圓柱體積為:%.2f",vol_cylind());break;case3:printf("圓錐體積為:%.2f",vol_cone());break;}}2021/9/1610//計算球體體積V=4/3*PI*r*r*rdoublevol_ball(){doubler;printf("請輸入球的半徑:");scanf("%lf",&r);retur
8、n(4.0/3.0*PI*r*r*r);}//計算圓柱體積V=PI*r*r*hdoublevol_cylind(){doubler,h;printf("請輸入圓柱的底圓半徑和高:");scanf("%lf%lf",&r,&h);return(PI*r*r*h);}//計算圓錐體積V=h/3*PI*r*rdoublevol_cone(){doubler,h;printf("請輸入圓錐的底圓半徑和高:");scanf("%lf%lf",&r,&h);return(PI*r*r*h/3.0);}2021/9/1611遞歸(Recursion)函數(shù)直接或間接調(diào)用自己為
9、遞歸unsignedintfact(unsignedintn){if(0==n)return1;elsereturnn*fact(n-1);}2021/9/16122021/9/1613遞歸的實現(xiàn)遞歸(recursion)的定義調(diào)用自身的程序遞歸的基本思想問題分解:把一個不能或不好解決的大問題轉(zhuǎn)化為一個或幾個小問題,再把這些小問題進(jìn)一步分解成更小的小問題,直至每個小問題都可以直接解決。德羅斯特效應(yīng)—遞歸的視覺效應(yīng)2021/9/1614遞歸應(yīng)用遞歸算法一般用于解決三類問題:(1)數(shù)據(jù)的定義是按遞歸定義的。求階乘:n!=1×2×3×……×n或n!=n×(n-1
10、)!Fibonacci函數(shù)(效率極其低