亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        C/C++語(yǔ)言程序中函數(shù)調(diào)用解決辦法

        2007-01-01 00:00:00羅碧波
        計(jì)算機(jī)時(shí)代 2007年5期

        摘要:程序員在設(shè)計(jì)應(yīng)用程序時(shí),通常把程序劃分為若干功能較為單一的模塊,然后分別予以實(shí)現(xiàn),最后再把所有的模塊裝配起來(lái)。這種程序設(shè)計(jì)中分而治之的策略,被稱(chēng)為模塊化程序設(shè)計(jì)。C語(yǔ)言中,函數(shù)是程序的基本組成單位,也是模塊化程序設(shè)計(jì)的惟一工具,使用函數(shù)調(diào)用和嵌套,可使程序設(shè)計(jì)變得簡(jiǎn)單直觀、易讀和易維護(hù),并可大大地減輕程序員的代碼工作量。文章就C/C++語(yǔ)言在程序設(shè)計(jì)中的解決方法、特點(diǎn)進(jìn)行闡述。

        關(guān)鍵詞:模塊化程序設(shè)計(jì);函數(shù)調(diào)用;嵌套;遞歸

        0 引言

        程序調(diào)用是指當(dāng)前正在執(zhí)行的程序(又稱(chēng)調(diào)用程序)中出現(xiàn)了調(diào)用其它程序的語(yǔ)句,使得程序的執(zhí)行轉(zhuǎn)移到另一個(gè)程序段(又稱(chēng)為被調(diào)用程序)中,同時(shí)保存必要的信息,以便在被調(diào)用程序執(zhí)行結(jié)束后恢復(fù)執(zhí)行調(diào)用程序的過(guò)程。在C/C++語(yǔ)言中,稱(chēng)程序調(diào)用為函數(shù)調(diào)用。當(dāng)在一個(gè)函數(shù)中出現(xiàn)了函數(shù)名時(shí),就發(fā)生了函數(shù)調(diào)用。在C/C++語(yǔ)言中,有以下兩種函數(shù)調(diào)用方式:

        (1)函數(shù)調(diào)用以一個(gè)語(yǔ)句的形式出現(xiàn),這時(shí)被調(diào)用函數(shù)可以沒(méi)有返回值(函數(shù)類(lèi)型可以設(shè)置為void類(lèi)型);

        (2)以表達(dá)式中的一個(gè)項(xiàng)的形式出現(xiàn),被調(diào)用函數(shù)必須有一個(gè)明確的返回值。

        按照函數(shù)調(diào)用的性質(zhì)的不同,函數(shù)調(diào)用又分為兩類(lèi):函數(shù)嵌套調(diào)用和函數(shù)遞歸調(diào)用。以下就嵌套調(diào)用與遞歸調(diào)用概念進(jìn)行一些說(shuō)明。

        1 存在問(wèn)題和解決辦法

        C語(yǔ)言函數(shù)的定義都是獨(dú)立的,互不包含。換句話來(lái)說(shuō),一個(gè)函數(shù)內(nèi)不能包含對(duì)另一個(gè)函數(shù)的定義。

        嵌套調(diào)用。C語(yǔ)言不能嵌套定義函數(shù),但可以嵌套調(diào)用(nested calling)函數(shù)。嵌套調(diào)用過(guò)程如圖1所示。

        圖1 C語(yǔ)言函數(shù)嵌套調(diào)用過(guò)程

        遞歸調(diào)用。在調(diào)用一個(gè)函數(shù)的過(guò)程中出現(xiàn)了直接或間接地調(diào)用該函數(shù)本身,稱(chēng)為函數(shù)的遞歸調(diào)用。換句話說(shuō),當(dāng)一個(gè)程序調(diào)用它自身時(shí)就發(fā)生了遞歸(recursive calling)。C/C++語(yǔ)言的特點(diǎn)之一就在于允許函數(shù)的遞歸調(diào)用,如圖2所示。

        遞歸算法的實(shí)質(zhì)是將原來(lái)的問(wèn)題分解為新的問(wèn)題,而對(duì)新的問(wèn)題又用到了原有問(wèn)題的解法。按照這一原則分解下去,每次出現(xiàn)的新問(wèn)題是原有問(wèn)題的簡(jiǎn)化子集,而最終分解出來(lái)的問(wèn)題,是一個(gè)已知解的問(wèn)題(即調(diào)用至滿足調(diào)用終止條件,得到一個(gè)可用的基礎(chǔ)值),這便是有限的遞歸調(diào)用。只有有限的遞歸調(diào)用才是有意義的;無(wú)限的遞歸調(diào)用永遠(yuǎn)得不到解,沒(méi)有實(shí)際意義。

        圖2 函數(shù)的遞歸調(diào)用過(guò)程

        遞歸的過(guò)程有兩個(gè)階段:

        第一階段,遞推。將原有的問(wèn)題不斷分解為新的子問(wèn)題,逐漸從未知向已知推進(jìn),直到推進(jìn)至滿足調(diào)用終止條件,得到一個(gè)可用的基礎(chǔ)值。

        第二階段,回歸。從基礎(chǔ)值出發(fā),按照遞推的逆過(guò)程,逐一求值回歸,最后到達(dá)遞推的開(kāi)始處,結(jié)束遞歸調(diào)用。

        2 函數(shù)嵌套調(diào)用與遞歸調(diào)用實(shí)例分析

        現(xiàn)各舉一個(gè)嵌套調(diào)用和遞歸調(diào)用的小程序,以說(shuō)明上面的理解(為了表明C++也支持嵌套調(diào)用和遞歸調(diào)用,以下程序用C++語(yǔ)言編寫(xiě))。

        例1:輸入兩個(gè)整數(shù),求它們和的平方。

        分析:為了說(shuō)明函數(shù)的嵌套調(diào)用,針對(duì)該問(wèn)題可以設(shè)計(jì)兩個(gè)函數(shù),求平方的函數(shù)SQU及求另一個(gè)整數(shù)平方和的函數(shù)SUM。由主函數(shù)調(diào)用SQU,SQU又調(diào)用SUM(見(jiàn)圖3)。

        圖3 函數(shù)的嵌套調(diào)用和遞歸調(diào)用

        假設(shè)求平方的函數(shù)為為a,求整數(shù)平方和的函數(shù)為b,程序

        如下(Source Code):

        //

        //nestf.cpp

        //The C++program illustrates nested functiOn calling.

        //CaIculation of the quadratic sum of two Integers.

        //

        #incIude<iOstream.h>

        Vo|d math(void)

        {int m,n;

        int a(int x,inl y);//function prolotype

        COUl<<\"pIease enter two jntegers:\"<<endI;

        cin>>m>>n;

        COUt<<“the quadratic sum of m and n is\"<<a(m,n)<<endl;

        //calIing function

        }

        int a(int x,int y) //function decIaration

        {int b(int m);//function prototype

        return(b(x)+b(y));

        //calling nested functiOn and function retum

        }

        int b(int k)//function declaration

        {reIum(k*k);)//funclion return

        例2:求n!

        分析:根據(jù)

        程序流程:

        圖4 程序流程

        以下以6 1為例:

        我們可以進(jìn)行以下分析:

        6!=6*5!→5!=5*4!→4!=4*3!→3!=3*2!→2!=2*1!→1!=1*0!→0!=1

        未知——————→(遞推)——————————→已知

        6!=6*5!=720←5=5*4!=120←4!=4×3!=24←3!=3*2!=6←2!=2←1!=1*0!=1←0!=1

        未知←——————(回歸)←—————————已知

        Source Code:

        //

        //factof.cpp

        //A C++program illustrating recursiVe functiOn caIIs.

        //CaIcuIating the factorial of a number.

        //ExamDIe:6!=6*5*4*3*2*1=720

        //

        #incIude<iOstream.h>

        long flactof(int n)//funclion declaration

        {long a;

        if(n<0)

        count<<\"The integer(n)which you entered must be

        greater than or equal to zero!\"<<endI;

        eIse if(n==0)a=1;//the basic condition to terminale

        eIse a=facfof(n-1)*n;//iterating

        retum(a);

        }

        void main()

        {long faclof(inI n);//funclion procotype

        int b=6;

        long y;

        y=factof(b);//recursiVe calling

        COUl<<\"6!=\"<<y<<endl;

        }

        3 結(jié)束語(yǔ)

        嵌套調(diào)用是將功能獨(dú)立的函數(shù)有機(jī)地結(jié)合起來(lái),完成一項(xiàng)任務(wù)。采用嵌套調(diào)用,提高了程序的可讀性、可維護(hù)性和可擴(kuò)充性。而采用遞歸調(diào)用允許某些算法用簡(jiǎn)單的小例程來(lái)實(shí)現(xiàn),但不能保證速度或效率。遞歸使用不當(dāng)會(huì)導(dǎo)致程序在執(zhí)行過(guò)程中耗盡空間(因?yàn)樵谶f歸調(diào)用時(shí)必然要一次次生成新的同名局部變量,并動(dòng)態(tài)地為其分配存儲(chǔ)單元),從而引起程序(有時(shí)是整個(gè)系統(tǒng))崩潰。

        函數(shù)定義中是否直接或間接的調(diào)用了自己是遞歸函數(shù)與函數(shù)嵌套調(diào)用兩個(gè)概念的最根本區(qū)別。

        注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。

        亚洲av无码专区在线播放中文| 亚洲一区视频中文字幕| 97青草超碰久久国内精品91| 伊人大杳焦在线| 性欧美大战久久久久久久久| 精品国产品欧美日产在线| 亚洲一区二区三区码精品色| 国产亚洲精品久久午夜玫瑰园 | 丝袜美腿制服诱惑一区二区| 在线观看免费无码专区| 四虎影库久免费视频| 亚洲综合伦理| 亚洲精品综合中文字幕组合| 欧美性猛交xxxx免费看蜜桃 | 果冻蜜桃传媒在线观看| 亚洲国产av一区二区三区| 亚洲成av人的天堂在线观看| 日韩无码无播放器视频| 国产粉嫩美女一区二区三| 亚洲av乱码二区三区涩涩屋 | xxxx国产视频| 国产三级视频一区二区| 极品粉嫩小仙女高潮喷水网站| 久久久久人妻精品一区蜜桃| 亚洲午夜无码久久yy6080| 亚洲天堂线上免费av| 老妇高潮潮喷到猛进猛出| 日韩精品中文字幕无码一区| 亚洲AV无码一区二区三区精神| 亚洲毛片免费观看视频| 怡红院av一区二区三区| 专区国产精品第一页| 日本一区二区高清在线观看| 4455永久免费视频| 亚洲有码转帖| 91精品亚洲一区二区三区| 91日韩东京热中文字幕| 幻女bbwxxxx在线视频| 国产成人av在线影院无毒| 亚洲捆绑女优一区二区三区| 无码国内精品久久人妻|