999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2007-01-01 00:00:00羅碧波
計算機時代 2007年5期

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

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

0 引言

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

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

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

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

1 存在問題和解決辦法

C語言函數(shù)的定義都是獨立的,互不包含。換句話來說,一個函數(shù)內(nèi)不能包含對另一個函數(shù)的定義。

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

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

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

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

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

遞歸的過程有兩個階段:

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

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

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

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

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

分析:為了說明函數(shù)的嵌套調(diào)用,針對該問題可以設(shè)計兩個函數(shù),求平方的函數(shù)SQU及求另一個整數(shù)平方和的函數(shù)SUM。由主函數(shù)調(diào)用SQU,SQU又調(diào)用SUM(見圖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為例:

我們可以進行以下分析:

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é)束語

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

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

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

主站蜘蛛池模板: 亚洲精品人成网线在线 | 五月婷婷精品| 国产精品lululu在线观看| 四虎成人免费毛片| 国产成熟女人性满足视频| 日本高清有码人妻| 中文字幕人成乱码熟女免费| 国产91无毒不卡在线观看| 操操操综合网| 亚洲一本大道在线| 在线欧美国产| 91一级片| 99久久精彩视频| 欧美日韩国产一级| 萌白酱国产一区二区| 欲色天天综合网| 99视频在线观看免费| 亚洲人成网站在线播放2019| 亚洲AV无码乱码在线观看代蜜桃| 国产在线观看成人91| 美女被操91视频| 波多野结衣一二三| 亚洲国产成人久久77| 国产成人禁片在线观看| 无码精品福利一区二区三区| 在线观看免费黄色网址| 亚洲国产综合精品一区| 人妻中文久热无码丝袜| 性欧美精品xxxx| 日韩av无码DVD| 九九香蕉视频| 久久网欧美| 色天天综合| 毛片免费在线视频| 日本一区中文字幕最新在线| 亚洲精品桃花岛av在线| AV熟女乱| 九色在线视频导航91| 色综合天天综合| 欧美天天干| 日韩成人在线网站| 美美女高清毛片视频免费观看| 无码精品国产dvd在线观看9久| 超碰色了色| 欧美精品在线看| 精品视频在线观看你懂的一区| 99无码中文字幕视频| 伊人久久大香线蕉aⅴ色| 91午夜福利在线观看| 亚洲性色永久网址| 成人午夜视频网站| 99这里只有精品在线| 亚洲伊人久久精品影院| 日本中文字幕久久网站| 国产黄色片在线看| 亚洲国产看片基地久久1024| 亚洲无码视频喷水| 国产成人亚洲综合A∨在线播放| 无码内射中文字幕岛国片| www亚洲天堂| 在线观看免费国产| 91青青视频| 天天摸夜夜操| 国产亚洲精品yxsp| 美女潮喷出白浆在线观看视频| 精品人妻一区二区三区蜜桃AⅤ| 欧美特黄一级大黄录像| 黄色网在线| 国产熟女一级毛片| 国产精品极品美女自在线网站| 久久婷婷人人澡人人爱91| 黄片一区二区三区| 91口爆吞精国产对白第三集| 国产乱子伦精品视频| 国产色婷婷| 高潮毛片免费观看| 广东一级毛片| 久久99精品久久久久纯品| 999精品色在线观看| 国内精品视频在线| 色妺妺在线视频喷水| 亚洲日本中文综合在线|