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

C/C++語言程序中函數調用解決辦法

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

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

關鍵詞:模塊化程序設計;函數調用;嵌套;遞歸

0 引言

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

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

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

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

1 存在問題和解決辦法

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

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

圖1 C語言函數嵌套調用過程

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

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

圖2 函數的遞歸調用過程

遞歸的過程有兩個階段:

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

第二階段,回歸。從基礎值出發,按照遞推的逆過程,逐一求值回歸,最后到達遞推的開始處,結束遞歸調用。

2 函數嵌套調用與遞歸調用實例分析

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

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

分析:為了說明函數的嵌套調用,針對該問題可以設計兩個函數,求平方的函數SQU及求另一個整數平方和的函數SUM。由主函數調用SQU,SQU又調用SUM(見圖3)。

圖3 函數的嵌套調用和遞歸調用

假設求平方的函數為為a,求整數平方和的函數為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!

分析:根據

程序流程:

圖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 結束語

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

函數定義中是否直接或間接的調用了自己是遞歸函數與函數嵌套調用兩個概念的最根本區別。

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

主站蜘蛛池模板: 青草91视频免费观看| 五月婷婷激情四射| 91精品国产一区| 国内熟女少妇一线天| 波多野结衣AV无码久久一区| 亚洲va精品中文字幕| 亚洲综合亚洲国产尤物| 国产福利大秀91| 欧美激情视频一区| 亚洲欧美色中文字幕| 国产99热| 四虎在线观看视频高清无码| 国产国拍精品视频免费看| 精品夜恋影院亚洲欧洲| 国产成人狂喷潮在线观看2345| 国产在线拍偷自揄观看视频网站| 国产成人精品亚洲77美色| 亚洲—日韩aV在线| 国产人免费人成免费视频| 最新亚洲人成网站在线观看| 免费A级毛片无码无遮挡| 亚洲福利片无码最新在线播放| 色综合久久无码网| 小13箩利洗澡无码视频免费网站| 青草视频网站在线观看| 国产麻豆精品在线观看| 国产在线视频欧美亚综合| 欧美在线精品怡红院| 免费观看精品视频999| 国产chinese男男gay视频网| 亚洲高清中文字幕| 国产精彩视频在线观看| 亚洲高清中文字幕| 在线观看国产精美视频| 精品亚洲国产成人AV| 中文字幕永久在线看| 2022精品国偷自产免费观看| 99视频在线精品免费观看6| 国产无码网站在线观看| 久久熟女AV| 婷婷六月天激情| 成人福利在线观看| 最新加勒比隔壁人妻| 国产精品第一区在线观看| 亚洲区第一页| 亚洲资源站av无码网址| 蜜臀AV在线播放| 成人在线观看一区| 国产激情在线视频| 日本在线免费网站| 国产亚洲欧美在线人成aaaa | 最新国产麻豆aⅴ精品无| 亚洲人成人无码www| 操美女免费网站| 亚洲天堂网在线播放| 精品久久久久成人码免费动漫| 欧美日韩国产成人高清视频 | 亚洲欧州色色免费AV| 亚洲成A人V欧美综合| 天堂成人在线| 国产人成网线在线播放va| 国产人成乱码视频免费观看| 国产成人精品男人的天堂下载| 国产主播一区二区三区| 天天综合色网| 免费无遮挡AV| 久热这里只有精品6| 日本不卡在线播放| 欧美成人影院亚洲综合图| 日韩不卡高清视频| 巨熟乳波霸若妻中文观看免费| 精品久久久无码专区中文字幕| 亚洲高清在线播放| 久久久波多野结衣av一区二区| 国产91成人| 中文字幕无码中文字幕有码在线| 欧美无专区| 亚洲男人天堂网址| 亚洲手机在线| 一级一级一片免费| 一级爆乳无码av| 久久亚洲综合伊人|