亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        全國計(jì)算機(jī)二級(jí)考試輔導(dǎo):C語言之函數(shù)(3)

        字號(hào):

        C語言中不允許作嵌套的函數(shù)定義。因此各函數(shù)之間是平行的,不存在上一級(jí)函數(shù)和下一級(jí)函數(shù)的問題。 但是C語言允許在一個(gè)函數(shù)的定義中出現(xiàn)對(duì)另一個(gè)函數(shù)的調(diào)用。 這樣就出現(xiàn)了函數(shù)的嵌套調(diào)用。即在被調(diào)函數(shù)中又調(diào)用其它函數(shù)。 這與其它語言的子程序嵌套的情形是類似的。其關(guān)系可表示如圖5.2。
            圖5.2表示了兩層嵌套的情形。其執(zhí)行過程是:執(zhí)行main函數(shù)中調(diào)用a函數(shù)的語句時(shí),即轉(zhuǎn)去執(zhí)行a函數(shù),在a函數(shù)中調(diào)用b 函數(shù)時(shí),又轉(zhuǎn)去執(zhí)行b函數(shù),b函數(shù)執(zhí)行完畢返回a函數(shù)的斷點(diǎn)繼續(xù)執(zhí)行,a 函數(shù)執(zhí)行完畢返回main函數(shù)的斷點(diǎn)繼續(xù)執(zhí)行。
            [例5.8]計(jì)算s=22! 32!
            本題可編寫兩個(gè)函數(shù),一個(gè)是用來計(jì)算平方值的函數(shù)f1, 另一個(gè)是用來計(jì)算階乘值的函數(shù)f2。主函數(shù)先調(diào)f1計(jì)算出平方值, 再在f1中以平方值為實(shí)參,調(diào)用 f2計(jì)算其階乘值,然后返回f1,再返回主函數(shù),在循環(huán)程序中計(jì)算累加和。
            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);
            }
            long f1(int p)
            {
            ……
            long f2(int);
            r=f2(k);
            ……
            }
            long f2(int q)
            {
            ……
            }
            main()
            { ……
            s=s f1(i);
            ……
            }
            在程序中,函數(shù)f1和f2均為長(zhǎng)整型,都在主函數(shù)之前定義, 故不必再在主函數(shù)中對(duì)f1和f2加以說明。在主程序中, 執(zhí)行循環(huán)程序依次把i值作為實(shí)參調(diào)用函數(shù)f1求i2值。在f1中又發(fā)生對(duì)函數(shù)f2的調(diào)用,這時(shí)是把i2的值作為實(shí)參去調(diào)f2,在f2 中完成求i2! 的計(jì)算。f2執(zhí)行完畢把C值(即i2!)返回給f1,再由f1 返回主函數(shù)實(shí)現(xiàn)累加。至此,由函數(shù)的嵌套調(diào)用實(shí)現(xiàn)了題目的要求。 由于數(shù)值很大, 所以函數(shù)和一些變量的類型都說明為長(zhǎng)整型,否則會(huì)造成計(jì)算錯(cuò)誤。
            函數(shù)的遞歸調(diào)用
            一個(gè)函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用。 這種函數(shù)稱為遞歸函數(shù)。C語言允許函數(shù)的遞歸調(diào)用。在遞歸調(diào)用中, 主調(diào)函數(shù)又是被調(diào)函數(shù)。執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身。 每調(diào)用一次就進(jìn)入新的一層。例如有函數(shù)f如下:
            int f (int x)
            {
            int y;
            z=f(y);
            return z;
            }
            這個(gè)函數(shù)是一個(gè)遞歸函數(shù)。 但是運(yùn)行該函數(shù)將無休止地調(diào)用其自身,這當(dāng)然是不正確的。為了防止遞歸調(diào)用無終止地進(jìn)行, 必須在函數(shù)內(nèi)有終止遞歸調(diào)用的手段。常用的辦法是加條件判斷, 滿足某種條件后就不再作遞歸調(diào)用,然后逐層返回。 下面舉例說明遞歸調(diào)用的執(zhí)行過程。
            [例5.9]用遞歸法計(jì)算n!用遞歸法計(jì)算n!可用下述公式表示:
            n!=1 (n=0,1)
            n×(n-1)! (n>1)
            按公式可編程如下:
            long ff(int n)
            {
            long f;
            if(n<0) printf("n<0,input error");
            else if(n==0||n==1) f=1;
            else f=ff(n-1)*n;
            return(f);
            }
            main()
            {
            int n;
            long y;
            printf("\ninput a inteager number:\n");
            scanf("%d",&n);
            y=ff(n);
            printf("%d!=%ld",n,y);
            }
            long ff(int n)
            { ……
            els
            e f=ff(n-1)*n;
            ……
            }
            main()
            { ……
            y=ff(n);
            ……
            }