任何一種程序設(shè)計語言都具有特定的語法規(guī)則和規(guī)定的表達(dá)方法。一個程序只有嚴(yán)格按照語言規(guī)定的語法和表達(dá)方式編寫,才能保證編寫的程序在計算機(jī)中能正確地執(zhí)行,同時也便于閱讀和理解。
為了了解C語言的基本程序結(jié)構(gòu),我們先介紹幾個簡單的C程序。

這是一個最簡單的C程序,其執(zhí)行結(jié)果是在屏幕上顯示一行信息:
RUN <enter>
This is a sample of c program.
本程序的執(zhí)行過程是:
• 程序從m a i n ( )處開始。
• 變量a代表一個整數(shù),并且初始值為3。
• 執(zhí)行程序(函數(shù))p r o c ( );屏幕上顯示H e l l o,\ n為轉(zhuǎn)義字符,代表換行的意思。
• 執(zhí)行程序(函數(shù))f u n c ( );并將結(jié)果賦予a,此時,a的值為2。
• 屏幕上顯示“This is a sample of c program.”。
程序執(zhí)行的結(jié)果是在屏幕顯示兩行信息:
R U N <enter>
H e l l o .
This is a sample of c program.
程序中/ * . . . . . * /表示對程序的說明(稱為注釋),不參與程序的運行。注釋文字可以是任意字符,如漢字、拼音、英文等。
本程序的功能是對從鍵盤輸入的長方體的長、寬、高三個整型量求其體積的值。程序運行的情況如下:
R U N ↵
5 , 8 , 6 ↵
v = 240
在本例中,m a i n函數(shù)在調(diào)用v o l u m e函數(shù)時,將實際參數(shù)x、y、z的值分別傳送給v o l u m e函數(shù)中的形式參數(shù)a、b、c。經(jīng)過執(zhí)行v o l u m e函數(shù)得到一個結(jié)果(即v o l u m e函數(shù)中變量p的值)并把這個值賦給變量v。
從上面程序例子,可以看出C程序的基本結(jié)構(gòu)。
C程序為函數(shù)模塊結(jié)構(gòu),所有的C程序都是由一個或多個函數(shù)構(gòu)成,其中必須只能有一個主函數(shù)m a i n ( )。程序從主函數(shù)開始執(zhí)行,當(dāng)執(zhí)行到調(diào)用函數(shù)的語句時,程序?qū)⒖刂妻D(zhuǎn)移到調(diào)用函數(shù)中執(zhí)行,執(zhí)行結(jié)束后,再返回主函數(shù)中繼續(xù)運行,直至程序執(zhí)行結(jié)束。C程序的函數(shù)是由編譯系統(tǒng)提供的標(biāo)準(zhǔn)函數(shù)(如p r i n t f、s c a n f等)和由用戶自己定義的函數(shù)(如p r o c、f u n c、v o l u m e等)。雖然從技術(shù)上講,主函數(shù)不是C語言的一個成分,但它仍被看做是其中的一部分,因此,“m a i n”不能用作變量名。
函數(shù)的基本形式是:函數(shù)類型函數(shù)名(形式參數(shù))形式參數(shù)說明;
{
數(shù)據(jù)說明部分;
語句部分;
}
其中:函數(shù)頭包括函數(shù)說明、函數(shù)名和圓括號中的形式參數(shù)(如int volume(a,b,c)),如果函數(shù)
調(diào)用無參數(shù)傳遞,圓括號中形式參數(shù)為空(如void proc()函數(shù))。形式參數(shù)說明指定函數(shù)調(diào)用傳遞參數(shù)的數(shù)據(jù)類型(如例1 . 3中語句int a,b,c;)。函數(shù)體包括函數(shù)體內(nèi)使用的數(shù)據(jù)說明和執(zhí)行函數(shù)功能的語句,花括號{和}表示函數(shù)體的
開始和結(jié)束。
1.3.2 函數(shù)庫和鏈接
從技術(shù)上講,純粹由程序員自己編寫的語句構(gòu)成C語言程序是可能的,但這卻是罕見的。因為所有的C編譯程序都提供能完成各種常用任務(wù)的函數(shù)—函數(shù)庫(如p r i n t f、s c a n f等)。C編譯程序的實現(xiàn)者已經(jīng)編寫了大部分常見的通用函數(shù)。當(dāng)我們調(diào)用一個別人編寫的函數(shù)時編譯程序“記憶”它的名字。隨后,“鏈接程序”把我們編寫的程序同標(biāo)準(zhǔn)函數(shù)庫中找到的目標(biāo)碼結(jié)合起來,這個過程稱為“鏈接”。
保存在函數(shù)庫中的函數(shù)是可重定位的。這意味著其中機(jī)器碼指令的內(nèi)存地址并未絕對地確定, 只有偏移量是確定的。當(dāng)把程序與標(biāo)準(zhǔn)函數(shù)庫中的函數(shù)相鏈接時,內(nèi)存偏移量被用來產(chǎn)生實際地址。有關(guān)重定位的詳細(xì)內(nèi)容,請查閱其他技術(shù)書籍。
編寫程序時用到的函數(shù),許多都可以在標(biāo)準(zhǔn)函數(shù)庫中找到。它們是可以簡單地組合起來的程序構(gòu)件。編寫了一個經(jīng)常要用的函數(shù)之后,可將其放入庫中備用。
1.3.3 開發(fā)一個C程序
開發(fā)一個C程序,包括以下四步:
1) 程序設(shè)計程序設(shè)計亦稱程序編輯。程序員用任一編輯軟件(編輯器)將編寫好的C程序輸入計算機(jī),并以文本文件的形式保存在計算機(jī)的磁盤上。編輯的結(jié)果是建立C源程序文件。C程序習(xí)慣上使用小寫英文字母,常量和其他用途的符號可用大寫字母。C語言對大、小寫字母是有區(qū)別的。關(guān)鍵字必須小寫。
2) 程序編譯編譯是指將編輯好的源文件翻譯成二進(jìn)制目標(biāo)代碼的過程。編譯過程是使用C語言提供的編譯程序(編譯器)完成的。不同操作系統(tǒng)下的各種編譯器的使用命令不完全相同,使用時應(yīng)注意計算機(jī)環(huán)境。編譯時,編譯器首先要對源程序中的每一個語句檢查語法錯誤,當(dāng)發(fā)現(xiàn)錯誤時,就在屏幕上顯示錯誤的位置和錯誤類型的信息。此時,要再次調(diào)用編輯器進(jìn)行查錯修改。然后,再進(jìn)行編譯,直至排除所有語法和語義錯誤。正確的源程序文件經(jīng)過編譯后在磁盤上生成目標(biāo)文件。
3 ) 鏈接程序編譯后產(chǎn)生的目標(biāo)文件是可重定位的程序模塊,不能直接運行。鏈接就是把目標(biāo)文件和其他分別進(jìn)行編譯生成的目標(biāo)程序模塊(如果有的話)及系統(tǒng)提供的標(biāo)準(zhǔn)庫函數(shù)鏈接在一起,生成可以運行的可執(zhí)行文件的過程。鏈接過程使用C語言提供的鏈接程序(鏈接器)完成,生成的可執(zhí)行文件存在磁盤中。
4) 程序運行生成可執(zhí)行文件后,就可以在操作系統(tǒng)控制下運行。若執(zhí)行程序后達(dá)到預(yù)期目的,則C程序的開發(fā)工作到此完成。否則,要進(jìn)一步檢查修改源程序,重復(fù)編輯—編譯
—鏈接—運行的過程,直到取得預(yù)期結(jié)果為止。
大部分C語言都提供一個獨立的開發(fā)集成環(huán)境,它可將上述四步連貫在一個程序之中。本書所涉及的程序全部在Turbo C環(huán)境中進(jìn)行。
1.3.4 C語言的關(guān)鍵字
表1 - 2列舉了3 2個關(guān)鍵字,它們與標(biāo)準(zhǔn)C句法結(jié)合,形成了程序設(shè)計語言C。

C語言的關(guān)鍵字都用小寫字母。C語言中區(qū)分大寫與小寫,e l s e是關(guān)鍵字,“E L S E”則不是。在C程序中,關(guān)鍵字不能用于其它目的,即不允許將關(guān)鍵字作為變量名或函數(shù)名使用。