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