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