王秀娟 趙山林
摘 要: 函數(shù)是C語(yǔ)言學(xué)習(xí)的難點(diǎn)和重點(diǎn),通過(guò)分析函數(shù)的結(jié)構(gòu),將函數(shù)編寫(xiě)中難以確定的問(wèn)題進(jìn)行分解、細(xì)化。按照返回值的個(gè)數(shù)將函數(shù)分為:無(wú)返回值函數(shù)、單反回值函數(shù)、多返回值函數(shù)三種類(lèi)型。對(duì)這三種類(lèi)型函數(shù)的設(shè)計(jì)方法分別舉例分析和說(shuō)明,詳細(xì)闡述了函數(shù)編寫(xiě)的具體過(guò)程。
關(guān)鍵詞: 函數(shù); 形式參數(shù); 指針變量; 調(diào)用
中圖分類(lèi)號(hào):TP399 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2014)02-49-02
0 引言
C語(yǔ)言是一種結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言,通過(guò)函數(shù)來(lái)實(shí)現(xiàn)模塊化的程序設(shè)計(jì)[1]。程序是由若干個(gè)函數(shù)來(lái)組成的,因此函數(shù)在C語(yǔ)言程序設(shè)計(jì)中具有舉足輕重的地位。很多學(xué)生在編寫(xiě)函數(shù)時(shí),很迷茫,不知從何入手,經(jīng)常出現(xiàn)這種情況:無(wú)論一個(gè)程序多么復(fù)雜,都將所有的功能全部放在主函數(shù)中,這樣會(huì)造成很多的問(wèn)題,例如:程序編寫(xiě)困難、程序結(jié)構(gòu)不清晰、功能難于擴(kuò)充、調(diào)試?yán)щy等。為了解決這些問(wèn)題,本文重點(diǎn)分析函數(shù)的結(jié)構(gòu),并總結(jié)出不同類(lèi)型函數(shù)的編寫(xiě)方法。
1 函數(shù)結(jié)構(gòu)
函數(shù)由兩大部分組成:函數(shù)頭和函數(shù)體。第一行為函數(shù)頭部分,花括號(hào)括起來(lái)的為函數(shù)體部分。其中,函數(shù)類(lèi)型指的是函數(shù)返回值的類(lèi)型,若函數(shù)無(wú)返回值則函數(shù)類(lèi)型為“void”。函數(shù)名由編程者來(lái)命名,通常應(yīng)該做到見(jiàn)名知意[3]。函數(shù)名后面小括號(hào)中的是形式參數(shù),其中的每一個(gè)參數(shù)應(yīng)該分別定義數(shù)據(jù)類(lèi)型。函數(shù)體部分和主函數(shù)的函數(shù)體部分一樣,由數(shù)據(jù)描述和算法實(shí)現(xiàn)兩部分組成。函數(shù)體用順序、選擇、循環(huán)三種結(jié)構(gòu)的設(shè)計(jì)方法編寫(xiě)即可。從函數(shù)的結(jié)構(gòu)可以看出,只要設(shè)計(jì)出函數(shù)頭,整個(gè)函數(shù)的設(shè)計(jì)也就迎刃而解。
2 函數(shù)設(shè)計(jì)過(guò)程分析
第一步:設(shè)計(jì)函數(shù)頭。①分析哪些量是函數(shù)的已知量,數(shù)據(jù)類(lèi)型是什么,將已知數(shù)據(jù)作為函數(shù)的形參;②哪些是未知量,即函數(shù)需要得到的結(jié)果,若未知數(shù)據(jù)只有一個(gè),可確定其數(shù)據(jù)類(lèi)型,即為函數(shù)類(lèi)型。
第二步:編寫(xiě)函數(shù)體[4]。
3 無(wú)返回值函數(shù)的編寫(xiě)
無(wú)返回值函數(shù)的功能通常是為了調(diào)用函數(shù)實(shí)現(xiàn)特定的功能,這種函數(shù)的類(lèi)型應(yīng)定義為“void”,函數(shù)體中不需要使用“return”語(yǔ)句[5-6]。
5 多返回值函數(shù)的編寫(xiě)
C語(yǔ)言中通過(guò)return語(yǔ)句只能返回一個(gè)值,如果在調(diào)用函數(shù)過(guò)程中需要返回多個(gè)值給主調(diào)函數(shù)通常有兩種方法:①設(shè)定n個(gè)指針變量,利用間接訪問(wèn)方式訪問(wèn)主調(diào)中的變量來(lái)實(shí)現(xiàn);②設(shè)定1個(gè)指針變量,調(diào)用時(shí)使其指向主調(diào)中的數(shù)組,利用主調(diào)中的數(shù)組的各個(gè)元素表示n個(gè)返回值[9]。
5.1 通過(guò)多個(gè)指針變量返回多值
被調(diào)函數(shù)原型聲明:
void fun(帶類(lèi)型說(shuō)明的形參表列,類(lèi)型 *p1,類(lèi)型 *p2,類(lèi)型 *p3,……類(lèi)型 *pn);
這種方法是在主調(diào)函數(shù)中定義多個(gè)變量來(lái)表示多個(gè)返回值,在被調(diào)用函數(shù)中用指針指向主調(diào)函數(shù)中表示未知的變量,通過(guò)間接訪問(wèn)的方式修改主調(diào)函數(shù)中變量的值,從而獲得多個(gè)返回值[10-11]。分析時(shí),已知量仍作為函數(shù)的形參,未知量也作為函數(shù)的形參,但要定義為指針類(lèi)型。函數(shù)的結(jié)果不再通過(guò)“return”語(yǔ)句返回,所以函數(shù)類(lèi)型定義為“void”。
編寫(xiě)函數(shù),求兩個(gè)數(shù)的最大公約數(shù)和最小公倍數(shù)。
6 結(jié)束語(yǔ)
函數(shù)是C語(yǔ)言程序的基本組成單位,因此掌握函數(shù)的編寫(xiě)至關(guān)重要。從本文的分析中不難看出,對(duì)于函數(shù)的編寫(xiě),函數(shù)頭的確定是首要內(nèi)容,一旦函數(shù)頭確定了,則該函數(shù)的已知(即普通形參)和未知(即函數(shù)返回結(jié)果)便明確了。若未知量是一個(gè),則把未知量的類(lèi)型定義為函數(shù)類(lèi)型,未知量是多個(gè)時(shí),通常使用指針指向需返回的多個(gè)值[14]。另外需要注意的是,我們分析的已知量,不是通過(guò)“scanf”函數(shù)從鍵盤(pán)讀取數(shù)據(jù),而是在調(diào)用函數(shù)的過(guò)程中將實(shí)參的值傳遞給對(duì)應(yīng)的形參,因此,實(shí)參和形參的個(gè)數(shù)應(yīng)相等,類(lèi)型應(yīng)一致,按順序一一對(duì)應(yīng)[15]。筆者在多年從事C語(yǔ)言程序教學(xué)的過(guò)程中發(fā)現(xiàn),只要學(xué)生掌握了函數(shù)編寫(xiě)的正確方法和技巧,就可以事半功倍,使函數(shù)的編寫(xiě)不再成為一個(gè)難題。
參考文獻(xiàn):
[1] 趙山林,高媛.C程序設(shè)計(jì)[M].人民郵電出版社,2012.
[2] 譚浩強(qiáng).C程序設(shè)計(jì)(第三版)[M].清華大學(xué)出版社,2005.
[3] 吉順如.C語(yǔ)言程序設(shè)計(jì)教程[M].機(jī)械工業(yè)出版社,2010.
[4] 何欽銘,顏暉.C語(yǔ)言程序設(shè)計(jì)[M].高等教育出版社,2008.
[5] 濤偉,楊秀金.C++函數(shù)的參數(shù)傳遞和返回值問(wèn)題的教學(xué)研討[J].吉林大學(xué)學(xué)報(bào)(信息科學(xué)版),2005.23:70-74
[6] 趙家剛,李俊蔌.C語(yǔ)言程序設(shè)計(jì)[M].西安交通大學(xué)出版社,20l0.
[7] 尹寶林.C程序設(shè)計(jì)思想與方法[M].機(jī)械工業(yè)出版社,2009.
[8] 王立柱.C語(yǔ)言程序設(shè)計(jì)[M].機(jī)械工業(yè)出版社,2011.
[9] 賈伯琪,顧衛(wèi)兵,蘇仕華,張四海,何克東.計(jì)算機(jī)程序設(shè)計(jì)[M].機(jī)械工業(yè)出版社,2011.
[10] Harry H.Cheng著,何欽銘,王兆青,陸漢權(quán)譯.C For Engineers And Scientists[M].高等教育出版社,2011.
[11] 龔沛曾,楊志強(qiáng).C/C++程序設(shè)計(jì)教材[M].高等教育出版社,2004.
[12] 朱小菲,劉玉喜.C語(yǔ)言程序設(shè)計(jì)教程[M].清華大學(xué)出版社,2005.
[13] 夏濤.C語(yǔ)言程序設(shè)計(jì)[M].北京郵電大學(xué)出版社,2007.
[14] 蘇小紅,王宇穎,孫志崗.C語(yǔ)言程序設(shè)計(jì)[M].高等教育出版社,2008.
[15] 王金鵬,肖進(jìn)杰.C程序設(shè)計(jì)進(jìn)階與實(shí)例解析[M].清華大學(xué)出版社,2011.