資源描述:
《C語言_ch07_2_函數的嵌套調用和遞歸調用.pptx》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、2021/9/161上一節(jié)我們學到了函數的定義形參函數的聲明函數的調用實參函數的調用過程局部變量(包括形參)何時分配內容、何時釋放內存何時實參賦形參2021/9/162第7章用函數實現(xiàn)模塊化程序設計7.1為什么要用函數7.2怎樣定義函數7.3調用函數7.4對被調用函數的聲明和函數原型7.5函數的嵌套調用7.6函數的遞歸調用7.7數組作為函數參數7.8局部變量和全局變量7.9變量的存儲方式和生存期7.10關于變量的聲明和定義7.11內部函數和外部函數2021/9/163函數的嵌套調用nestedfunction函數的嵌套調用:調用一個函數的過程中,又可以調用另一
2、個函數注意:C語言的函數定義是互相平行、獨立的,即函數不能嵌套定義2021/9/164嵌套調用的執(zhí)行過程main函數①調用a函數⑨結束a函數③調用b函數⑦②⑧b函數⑤④⑥2021/9/165例:設計一個常用圓形體體積計算器,采用命令方式輸入1、2、3,分別選擇計算球體、圓柱體、圓錐體的體積,并輸入計算所需相應參數。分析:輸入1、2、3選擇計算3種體積,其他輸入結束計算設計一個控制函數cal(),經它辨別圓形體的類型再調用計算球體、圓柱體、圓錐體體積的函數設計單獨的函數計算不同圓形體的體積2021/9/1663層結構,5個函數降低程序的構思、編寫、調試的復雜度可
3、讀性好程序結構main()cal()vol_ball()vol_cylind()vol_cone()程序結構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)結束break;cal(sel);//輸入1~3,調用cal()}return0;}/*常
7、用圓形體體積計算器的主控函數*/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)函數直接或間接調用自己為
9、遞歸unsignedintfact(unsignedintn){if(0==n)return1;elsereturnn*fact(n-1);}2021/9/16122021/9/1613遞歸的實現(xiàn)遞歸(recursion)的定義調用自身的程序遞歸的基本思想問題分解:把一個不能或不好解決的大問題轉化為一個或幾個小問題,再把這些小問題進一步分解成更小的小問題,直至每個小問題都可以直接解決。德羅斯特效應—遞歸的視覺效應2021/9/1614遞歸應用遞歸算法一般用于解決三類問題:(1)數據的定義是按遞歸定義的。求階乘:n!=1×2×3×……×n或n!=n×(n-1
10、)!Fibonacci函數(效率極其低