【正文】
)、終止于頂部的循環(huán)結(jié)構(gòu)(while,for)、終止于底部循環(huán)結(jié)構(gòu)(do),及其循環(huán)中斷命令(break)。函數(shù)的返回值可以是基本類型、結(jié)構(gòu)、共同體或指針。任何的函數(shù)均可以遞歸調(diào)用。通常局部變量都是“自動型的”,或者說,是在每次調(diào)用時重新建立的。函數(shù)定義不能嵌套,但是變量可以在塊結(jié)構(gòu)中說明。C程序的函數(shù)單獨存放于源文件中,分別編譯。變量可定義為函數(shù)的內(nèi)部變量,某一源文件中可以使用的外部變量,也可以定義為整個程序均可見的全程變量。預(yù)處理功能可以對程序文本進行宏替換,并可以蘊含其他源文件,或進行條件編譯。C語言是一種相對低級的語言,也就是說它可以處理大多數(shù)機器本身所能處理的數(shù)據(jù)類型,如:字符、數(shù)值、地址等。這些數(shù)據(jù)既可以同機器所支持的算術(shù)和邏輯運算符組合,也可以由它們進行傳送。對于字符串、集合、表、數(shù)組等組合數(shù)據(jù)類,C語言沒有提供直接的操作。雖然一個結(jié)構(gòu)可以整體復(fù)制,但是C語言中無法對整個數(shù)組或字符串進行整體操作。除了函數(shù)內(nèi)的局部變量可以進行靜態(tài)定義和堆堆棧無用內(nèi)存收集機制。最后一點,C語言本身也沒有提供輸入/輸出功能,沒有讀/寫語句及內(nèi)在的文件存取方法。所有這些高層的機制都是由通過函數(shù)顯式調(diào)用的。大多數(shù)的C語言版本都帶有基本標準的函數(shù)庫,其中包含了以上這些函數(shù)。基于同樣的道理,C語言僅僅提供了直接的、單線程的流程控制,如測試、循環(huán)、分支及子程序等;沒有多道程序控制、并行操作、同步,協(xié)同例程管理。沒有上述功能看起來像是一種缺陷,不過,把語言控制在較小的規(guī)模確有許多優(yōu)點。鑒于C語言相對較小,可以用比較少的篇幅予以描述,并可以短時間內(nèi)掌握。如果說程序員可以了解、掌握并確定經(jīng)常使用全部的語言,并不奇怪。1983年,美國國家標準協(xié)會(ANSI)成立了一個專門的委員會,對C語言進行全面的、現(xiàn)代化的定義。其結(jié)果便是ANSIC,是1988下后期完成的,這一標準的大多數(shù)功能在較新的編譯系統(tǒng)中業(yè)已付諸實施。這一標準是基于早期的C語言參考手冊建立的,相對而言,語言本身沒有多大變化;其目的之一就是為了保證現(xiàn)存的大多數(shù)程序可以有效運行,或者,在不兼容的情況下,由編譯程序提出警告,說明(程序可能導致的)新的操作。對大多數(shù)程序員來說,最重要的變化是函數(shù)的說明及定義有了一種新的語法?,F(xiàn)在,在函數(shù)的說明中可以包含參數(shù)的描述;函數(shù)的定義語法也作了相應(yīng)的修改。有了這種附加信息,編譯程序就可以很容易地檢查出由于參數(shù)類型不匹配所造成的錯誤。事實證明,對C語言的這一擴充非常奏效。ANSI C對C語言的第二個貢獻是定義了一套伴隨C語言的函數(shù)庫,其中說明的函數(shù)涉及到對操作系統(tǒng)的訪問(如文件的讀寫)、格式輸入輸出、內(nèi)存分配、字符串操作等等。ANSI C還規(guī)定了一套標準的首標文件,提供了對于函數(shù)說明及數(shù)據(jù)類型的統(tǒng)一使用方法。程序只要使用這一函數(shù)庫與機器交換信息,其兼容性就可以得到保證,大多數(shù)的庫函數(shù)都是以UNIX系統(tǒng)的“標準的I/O函數(shù)庫”為基礎(chǔ)建立的。雖然C語言可以充分發(fā)揮多數(shù)計算機的功能,但是,它并不依賴于具體的計算機體系結(jié)構(gòu),只需稍加注意,就可以編寫出可移植的應(yīng)用程序,也就是說程序不用修改就可以在各種機器上運行。不過,像其他語言一樣,C語言也有自己的缺陷。比如,某些運算符的優(yōu)先順序存在錯誤;還有的語句在語法上可以更好一些,盡管如此,實踐業(yè)已證明C語言在各種編程運用中非常有效,并具有良好的表現(xiàn)力。上面簡單介紹了C語言的歷史及特點,現(xiàn)在我們來考察一個C語言例程,以便大家對C語言程序的結(jié)構(gòu)有所了解。以下這個程序用于計算6的階乘: /*program to find factorial of 6*/includedefine VALUE 6int i,j。main(){ j=1。for (I=1。I=VALUE。I++) j=j*I。printf(“The factorial of %d is %d \n”,VALUE,j)。}如例中所示,C語言程序(代碼)以“include”一句開始,其目的只是編譯程序?qū)標準函數(shù)庫蘊含到用戶程序中,以便于讀寫數(shù)據(jù)、處理文本文件等等。C語言帶有大量像“”這樣的標準函數(shù)庫,包括字符串處理、時間及數(shù)學運算等函數(shù)庫?!癲efine”一行定義了一個常量?!癷nt i,j”一行說明了兩個全局變量,定義了兩個變量的屬性(本例中為整數(shù))。其他常用的變量類型還有浮點型(指實數(shù)型)、字符型(指字符)等,其說明格式同整型類似?!癿ain()”一行說明了本程序的主函數(shù)。每一個C語言程序都必須有一個名為“main()”的函數(shù),可出現(xiàn)于程序的任意位置,用以標記程序的開始。在C語言中函數(shù)的語句都被括在一對{}中。在本例中,主函數(shù)包括三行語句,分別是賦值語句、for循環(huán)語句,及printf格式輸出語句。C語言中的“printf”語句很容易使用。雙引號中的部分叫作格式串,用于描述數(shù)據(jù)在輸出時的格式。格式串可以包括字符常量,如“The factorial of”及“\n”(又稱作轉(zhuǎn)義序列,\n表示回車);還可以包括形如“%d”的操作符,用作待輸出變量的定位符。本例中格式串的兩個操作符(又叫作轉(zhuǎn)換說明),表示出現(xiàn)于后續(xù)參數(shù)表中的整型數(shù)值將被置于該格式字符串的指定位置。類似的格式操作符還有表示浮點數(shù)值的“%f”、表示字符的“%c”,及表示字符串的“%s”等。必須注意,在“printf”語句中,格式串中操作符的數(shù)目與后續(xù)的變量在類型及數(shù)目上要嚴格對應(yīng)。例如,如果格式串包含三個操作符,在后面的參數(shù)也必須有三個,并且參數(shù)在類型及出現(xiàn)的順序上要與前面的操作符一致。這個程序還可以,不過,如果能將常量改為由程序讀入數(shù)值,則會更好一些。編輯該程序,刪除VALUE常量,并說明一個全局變量“value”(把所有變更引用都改為小寫,因為“value”現(xiàn)已說明為一個變量),然后將以下兩行加到程序的開始處:printf(“Enter the value:”)。scanf(“%d”,amp。value)。修改程序,進行編譯并運行,以確保程序無誤。值得注意的是,“printf”使用的格式串與“scanf”相同,“value”變量前的“&”字符在C語言中稱作地址操作符,用于返回指定變量的內(nèi)存地址。出現(xiàn)于“scanf”中的字符型、整型、浮點型,以及記錄型(即結(jié)構(gòu)型)的任何變量都必須加上“&”操作符。倘若漏掉“&”,運行程序時就會出現(xiàn)錯誤。