函數的嵌套調用

  • 2017-08-22
  • 49

西安做網站 函數的嵌套調用

C語言中不允許作嵌套的函數定義。因此各函數之間是平行的,不存在上一級函數和下一級函數的問題。但是C語言允許在一個函數的定義中出現對另一個函數的調用。這樣就出現了函數的嵌套調用。即在被調函數中又調用其它函數。這與其它語言的子程序嵌套的情形是類似的。其關係可表示如圖。

 

圖表示了兩層嵌套的情形。其執行過程是:執行main函數中調用a函數的語句時,即轉去執行a函數,在a函數中調用b 函數時,又轉去執行b函數,b函數執行完畢返回a函數的斷點繼續執行,a函數執行完畢返回main函數的斷點繼續執行。

【例8.4】計算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返回主函數實現累加。至此,由函數的嵌套調用實現了題目的要求。由於數值很大,所以函數和一些變量的類型都說明為長整型,否則會造成計算錯誤。

西安做網站