函數>函數的嵌套使用
函數的嵌套使用
圖表示了兩層嵌套的情形。其執行過程是:執行main函數中使用a函數的語句時,即轉去執行a函數,在a函數中使用b 函數時,又轉去執行b函數,b函數執行完畢返回a函數的中斷點繼續執行,a函數執行完畢返回main函數的中斷點繼續執行。
【例】計算s=22!+32!
本題可編寫兩個函數,一個是用來計算平方值的函數f1,另一個是用來計算階乘值的函數f2。主函數先以函數 f1計算出平方值,再在 f1中以平方值為傳入參數,使用 f2計算其階乘值,然後返回f1,再返回主函數,在迴圈程式中計算累加和。
long f1(int p) { int k; long r; long f2(int); k=p*p; r=f2(k); return r; } long f2(int q) { long c=1; int i; for(i=1;i<=q;i++) c=c*i; return c; } main() { int i; long s=0; for (i=2;i<=3;i++) s=s+f1(i); printf("\ns=%ld\n",s); } |
在程式中,函數 f1和 f2 均為長整數,都在主函數之前定義,故不必再在主函數中對 f1和 f2加以說明。在主程序中,執行迴圈程式依次把 i 值作為傳入參數使用函數 f1求 i2值。在 f1中又發生對函數f2的使用,這時是把i2的值作為傳入參數去調f2,在 f2 中完成求 i2! 的計算。f2執行完畢把C值(即 i2! )返回給 f1,再由 f1返回主函數作累加。至此,由函數的嵌套使用實現了題目的要求。由於數值很大,所以函數和一些變數的類型都說明為長整型,否則會造成計算錯誤。