景建國
(長治職業技術學院,山西 長治 046011)
主函數與函數互變編程方法的實現
景建國
(長治職業技術學院,山西 長治 046011)
文章介紹了C語言程序中如何將主函數變為函數、函數變為主函數的程序設計方法,為擴充程序的使用、程序調試和分析提供了方便。
函數;主函數;程序;模塊化
C語言是一種結構化的程序設計語言,除了提供順序、選擇、循環三種基本結構外,還提供了定義“函數”的功能,允許對函數單獨進行編譯。通過文件包含實現對單獨編譯的函數進行調用,為模塊化程序設計提供了方便。由于C語言這種函數式的結構,難怪有人說:C語言程序設計就是編寫函數。這一點不假,因為一個C語言程序中至少要編寫一個主函數,且只能有一個主函數,沒有主函數的程序是不能直接執行的,因為C語言程序的執行總是從主函數開始的。
在程序設計學習初期,一般編寫的程序只有主函數,主函數中包括了數據輸入、數據處理、數據輸出等程序段。這種情況下,源程序的程序行會很多,為程序的調試和程序的分析帶來許多不便;還有源程序中的某些程序段,具有一定的功能或作用,在以后的編程中也可被利用。如果能把這些程序段變為函數,不但為程序的調試和程序的分析帶來方便,也可以作為一個獨立的函數單獨編譯,通過頭文件的包含,被其它程序調用,擴展程序的應用范圍。
排序是數據處理的重要內容,排序的方法也很多,對應的排序段也很多。如果把該程序段變為函數,就可單獨分析該程序段的執行過程和結果,通過單獨編譯,其它的程序中就可以調用。下面以常用的冒泡排序程序進行介紹。

以上程序對數組a中的10個元素按從小到大排序,源程序中的主要程序是排序程序段,變為函數如下:

變為函數的關鍵是如何把要處理的數據傳遞給函數的形式參數,傳遞給形式參數的數據中哪些是可以變化的。這些變化的參數,就形成了函數中處理數據的可變化的內容,增加了函數的通用性。
以上的bubble函數中,第一個形式參數是主函數中所排序的數組,第二個形式參數是參加排序數的個數,由于這兩個變化的形式參數,在調用此函數時,只需用不同數組名的不同排序數的個數所具有實在參數去替換它,即可實現不同數組、不同個數的數組排序。在bubble函數的基礎上,可以實現數組元素的從大到小排序、只對奇數下標的元素進行排序、只對偶數下標的元素進行排序、把排序的數據個數一分為二,前半部分按從小到大排序,后半部分按從大到小排序。因此,變為函數后它的靈活性就增加了。
求解累加和階乘(累乘)的問題,也是程序設計中的主要內容,特別是在用級數進行近似求解用時的最多,有的問題中累加和階乘求方式都用才能解決。如果能把這兩種求解的程序段變為函數,也可起到與冒泡排序函數同樣的作用。下面以階乘段為例進行介紹:

以上程序對輸入的整型數n計算階乘。變為函數時,函數的形參只接收一個整型數,在調用該函數時只需用不同的實在參數替換就可求出該數的階乘。變為函數如下:

在此函數的基礎上,通過改變函數循環語句的步長,可以變為求偶數的階乘、求奇數階乘、求分子為1的分數的階乘,重復調用可用于求組合數。需要注意的是,以上程序的返回值是整型,當求階乘的數較大時,階乘值就超出了整型數規定的范圍,此時只需改變函數的返回值類型和存放階乘變量的類型即可。
函數變為主函數的作用在于,由于C語言的程序執行是從主函數開始的,當編好函數后,如果想知道函數功能與具體解決的問題是否一致,需執行和調試后才能確定。由于函數需要調用才能執行,就得與主函數在同一編譯單位才能實現。這時如果把函數變為主函數,便可以單獨對函數的程序段進行調試并執行,確定函數的執行結果。
在全國計算等級考試上機考試中,不論是二級機試還是三級機試,都要求考生根據題目的要求,編寫一個函數,除了函數以外其它的程序部分都不要管。自己想編寫函數去練習時,除了自己編寫函數外,為了使函數能調試執行,還需輸入函數以外的程序段,比較復雜。如果直接把題目中要求處理的問題編寫成主函數,便可調試和執行。
編寫一個函數,從傳入的num個字符串中找出最長的一個字符串,并通過函數值返回該串地址的完整程序如下:

以上程序中的函數 fun(char(*a)[81],int num)變為主函數如下:

變為主函數時,保留主函數中的定義和輸入數據程序段;要把函數中處理的形參變為主函數調用函數時的實參;把函數中處理形參的程序段變為主函數中的處理程序段;函數返回的值,用輸出函數直接輸出。這時就可編譯、調試和運行主函數來確定函數的輸出結果。
在模塊化程序設計時,函數變為主函數,可以對各個模塊對應的程序直接編譯、調試和運行,及時發現模塊中的問題,為各模塊聯合調試打下基礎。
主函數與函數互變的編程方法,還需要經過大量的編程實踐,才能熟練地掌握,并用于以后的程序設計中。程序編寫過程中,通過主函數與函數互變,可以加深對C語言程序設計中函數式程序結構的認識。在C語言程序設計中,函數與被調用函數通過形參與實參進行數據傳遞時,被調用函數中形參的變化,與調用函數中實參的變化有著一定的關系,這體現在函數形參變量定義的類型和函數對這些形參變量的處理,這就涉及到C語言中較難的數據類型“指針”,如果不斷的在編程中使用主函數與函數互變的編程方法,對這些內容的掌握也變得容易些了。
[1]田淑清.全國計算機等級考試二級教程C語言程序設計(2010年版)[M].北京:高等教育出版社,2009.09.
[2]譚浩強,張基溫.C語言程序設計教程[M](第三版),北京:高等教育出版社,2007.07.
[3]陳萍等.全國計算機等級考試上機考試題庫三級網絡技術[M].北京:清華同方光盤電子出版社,2009.10.
[4]柳寒冰.全國計算機等級考試上機考試新版題庫二級C[M].成都:電子科技大學出版社,2009.10.
The Main Function of Each Function and Implementation of Programming Changes
Jing Jian-guo
(Changzhi Vocational and Technical Collgeg,Changzhi Shanxi 046011)
This article describes how to program in C language function to change the main function,the function becomes the main function of the programming method used for the expansion of the program,the program provides a convenient debugging and analysis.
function;main function;program;modular
TP312
A
1673-2014(2012)02-0056-03
2012—02—08
景建國(1976—),男,晉城沁水人,助教,碩士,主要從事計算機的開發與應用研究。
(責任編輯 趙巨濤)