官术网_书友最值得收藏!

5-1 函數(shù)的引入

還記得數(shù)學(xué)家高斯小時候的故事嗎:老師讓高斯他們計算從1加到100的值,高斯找到了一個巧妙的方法,很快就寫出了答案,而他的同學(xué)還在老老實實的計算。

如果我們今天讓計算機來計算,完全可以編寫如下程序:

【示例5-1】求從1加到100的值。

代碼如下:

這個方法雖然老實而笨拙,但是計算機具有運算速度快的特點,所以也沒有關(guān)系。但是如果老師怕各位同學(xué)互相抄襲,讓有的同學(xué)從1加到66,有的加到77……這個程序的通用性就差了一點。

于是就有了下面的求從1加到任意一個數(shù)n的通用程序,使用sum()函數(shù)來計算所有從1加到n,只不過在主程序中,調(diào)用它來滿足不同的需求。

【示例5-2】求從1加到n的值。

代碼如下:

在這個程序中,我們第一次地使用了函數(shù)這樣的結(jié)構(gòu)。這是C語言和大多數(shù)高級語言都提供的一種代碼集成機制,可以把特定的功能集中由函數(shù)(function)來完成。

函數(shù)完成固定的、規(guī)劃好的功能,在程序編寫中如果需要使用這樣的功能即可通過調(diào)用這個函數(shù)來實現(xiàn)。不管這個函數(shù)實現(xiàn)的功能有多復(fù)雜,調(diào)用它只需要很少的語句,而且調(diào)用形式(接口)是固定不變的。

C語言中引入函數(shù)這樣的結(jié)構(gòu)有很多的好處,一是提高程序的通用性;提高代碼的復(fù)用率;強化了程序的分工;還提高程序的可讀性。

相比較而言,有人說Basic語言的一個語句就是一個函數(shù),真的是很有道理。

函數(shù)的重要意義在于接口和實現(xiàn)的分家,這給開發(fā)大型程序、分工合作帶來了可能。

程序員各自開發(fā)各自的模塊,只需要約定好互相調(diào)用的接口即可。C語言的函數(shù)就是起到接口的作用,我們只需要使用函數(shù),而不需要知道函數(shù)的內(nèi)部是如何實現(xiàn)的。例如上面的程序可以改用高斯先生的算法,如下面示例所示。

【示例5-3】求從1加到n的值(高斯算法)。

代碼如下:

高斯先生果然聰明,采用他的算法,程序也可以簡單很多。我們也很聰明,從兩段程序的對比中會發(fā)現(xiàn)有很多不同:

(1)函數(shù)可以使用一個原型先聲明,實現(xiàn)可以在其他任何地方;

(2)接口不變,實現(xiàn)變了,不影響程序的執(zhí)行。

實際開發(fā)中也是如此,確定各個模塊的接口后,在優(yōu)化程序的時候,修改各個函數(shù)模塊的內(nèi)部實現(xiàn)即可,不用對整個系統(tǒng)“大動干戈”。函數(shù)的功能結(jié)合一定的程序設(shè)計方法,在求解問題的時候逐步細(xì)化,逐步到最簡單的、最底層的函數(shù),然后逐一實現(xiàn),這給軟件開發(fā)帶來了極大的便利。

主站蜘蛛池模板: 黄平县| 淳安县| 张掖市| 通海县| 阜新市| 彝良县| 合作市| 通榆县| 惠州市| 河源市| 德州市| 沐川县| 紫阳县| 永济市| 宿迁市| 连江县| 罗山县| 山西省| 沂源县| 黄山市| 谷城县| 万安县| 双鸭山市| 通化县| 丰台区| 马边| 镇坪县| 京山县| 玉龙| 尚义县| 康定县| 公主岭市| 牙克石市| 古丈县| 菏泽市| 永济市| 名山县| 满洲里市| 天全县| 吕梁市| 汤原县|