C語(yu)(yu)言(yan)是(shi)一(yi)門面(mian)向(xiang)過程的(de)(de)計算機(ji)編(bian)(bian)程語(yu)(yu)言(yan),與(yu)(yu)C++、C#、Java等(deng)面(mian)向(xiang)對(dui)象編(bian)(bian)程語(yu)(yu)言(yan)有所不(bu)同。C語(yu)(yu)言(yan)的(de)(de)設(she)計目標(biao)是(shi)提(ti)供一(yi)種能(neng)以(yi)(yi)簡易的(de)(de)方式編(bian)(bian)譯、處理低級存儲器、僅產生少量的(de)(de)機(ji)器碼(ma)(ma)以(yi)(yi)及不(bu)需(xu)要(yao)任何運(yun)行環(huan)境(jing)支持便能(neng)運(yun)行的(de)(de)編(bian)(bian)程語(yu)(yu)言(yan)。C語(yu)(yu)言(yan)描述問題比匯(hui)編(bian)(bian)語(yu)(yu)言(yan)迅速、工(gong)作(zuo)量小、可讀性好、易于調(diao)試、修改和移植,而代(dai)(dai)碼(ma)(ma)質(zhi)量與(yu)(yu)匯(hui)編(bian)(bian)語(yu)(yu)言(yan)相當。C語(yu)(yu)言(yan)一(yi)般(ban)只比匯(hui)編(bian)(bian)語(yu)(yu)言(yan)代(dai)(dai)碼(ma)(ma)生成(cheng)的(de)(de)目標(biao)程序效率低10%-20%。因(yin)此,C語(yu)(yu)言(yan)可以(yi)(yi)編(bian)(bian)寫系(xi)統軟件。
當前階段,在(zai)編程領域中(zhong),C語(yu)(yu)(yu)言的(de)(de)運用(yong)非常之多,它兼顧了(le)高級語(yu)(yu)(yu)言和匯編語(yu)(yu)(yu)言的(de)(de)優(you)(you)點,相(xiang)較于其它編程語(yu)(yu)(yu)言具有較大優(you)(you)勢。計(ji)算(suan)(suan)機系統(tong)(tong)設(she)計(ji)以及應用(yong)程序(xu)編寫是C語(yu)(yu)(yu)言應用(yong)的(de)(de)兩大領域。同時,C語(yu)(yu)(yu)言的(de)(de)普適較強,在(zai)許多計(ji)算(suan)(suan)機操(cao)作系統(tong)(tong)中(zhong)都能(neng)夠(gou)得到適用(yong),且效(xiao)率(lv)顯(xian)著(zhu)。
C語(yu)言(yan)擁有經過了漫長(chang)發展歷史的(de)完整的(de)理論(lun)體系,在編程語(yu)言(yan)中具有舉足輕重的(de)地位。
C語(yu)言誕(dan)生于美國的(de)貝爾實(shi)驗(yan)室,由丹尼(ni)斯(si)·里(li)(li)奇(Dennis MacAlistair Ritchie)以肯尼(ni)斯(si)·藍·湯(tang)普森(Kenneth Lane Thompson)設計的(de)B語(yu)言為(wei)基礎發(fa)展(zhan)而來,在它的(de)主體(ti)設計完成(cheng)后(hou),湯(tang)普森和(he)里(li)(li)奇用它完全(quan)重寫了(le)(le)(le)UNIX,且隨著UNIX的(de)發(fa)展(zhan),c語(yu)言也(ye)(ye)得到了(le)(le)(le)不斷的(de)完善。為(wei)了(le)(le)(le)利(li)于C語(yu)言的(de)全(quan)面(mian)推廣,許多專家學者(zhe)和(he)硬件廠(chang)商聯合組(zu)成(cheng)了(le)(le)(le)C語(yu)言標準委(wei)員會,并在之后(hou)的(de)1989年,誕(dan)生了(le)(le)(le)第一個完備的(de)C標準,簡稱(cheng)“C89”,也(ye)(ye)就是“ANSI C”,截至2020年,最(zui)新的(de)C語(yu)言標準為(wei)2018年6月發(fa)布的(de)“C18”。
C語(yu)(yu)言(yan)(yan)之所以命名為C,是(shi)因為C語(yu)(yu)言(yan)(yan)源自Ken Thompson發明(ming)的B語(yu)(yu)言(yan)(yan),而(er)B語(yu)(yu)言(yan)(yan)則源自BCPL語(yu)(yu)言(yan)(yan)。
1967年,劍橋大(da)學(xue)的Martin Richards對CPL語(yu)言進(jin)行了簡(jian)化,于(yu)是產生了BCPL(Basic Combined Programming Language)語(yu)言。
20世紀60年代,美國AT&T公司(si)貝爾實驗室(AT&T Bell Laboratories)的(de)(de)研究員肯·湯普森(Kenneth Lane Thompson)閑(xian)來(lai)無(wu)事,手(shou)癢難(nan)耐,想玩一個他自己(ji)編的(de)(de),模擬在太(tai)陽系(xi)(xi)航行的(de)(de)電(dian)子游(you)(you)戲——Space Travel。他背著老板(ban),找到了臺(tai)空(kong)閑(xian)的(de)(de)小型計算(suan)機——PDP-7。但這臺(tai)電(dian)腦沒有操作(zuo)(zuo)系(xi)(xi)統,而游(you)(you)戲必須使用操作(zuo)(zuo)系(xi)(xi)統的(de)(de)一些功(gong)能,于是他著手(shou)為PDP-7開發操作(zuo)(zuo)系(xi)(xi)統。后來(lai),這個操作(zuo)(zuo)系(xi)(xi)統被命名為——UNICS(Uniplexed Information and Computing Service)。
1969年,美國貝爾實驗室的(de)Ken Thompson,以BCPL語言(yan)為基礎,設計(ji)出很(hen)簡單且很(hen)接近硬件的(de)B語言(yan)(取BCPL的(de)首字母),并(bing)且用(yong)B語言(yan)寫了(le)初版UNIX操作系統(tong)(叫UNICS)。
1971年,同樣酷愛Space Travel的(de)丹尼斯·里奇為(wei)了能早點兒玩上游戲,加(jia)入(ru)了湯普森的(de)開發(fa)(fa)項目,合作開發(fa)(fa)UNIX。他的(de)主要(yao)工(gong)作是改造B語言,使其更成熟。
1972年,美國貝爾實驗室(shi)的丹尼斯·里奇(qi)在B語(yu)言(yan)的基(ji)礎上最終(zhong)設計出了一種新的語(yu)言(yan),他取(qu)了BCPL的第二個字母作為這種語(yu)言(yan)的名字,這就是C語(yu)言(yan)。
1973年(nian)初(chu),C語(yu)(yu)言(yan)的(de)主體完(wan)成。湯(tang)普森和(he)里奇(qi)迫不及待地(di)開(kai)始用(yong)它完(wan)全重寫了UNIX。此時,編程的(de)樂趣使他(ta)們已(yi)經(jing)完(wan)全忘記了那個(ge)“Space Travel”,一門(men)心思地(di)投入(ru)到(dao)了UNIX和(he)C語(yu)(yu)言(yan)的(de)開(kai)發中。隨著UNIX的(de)發展,C語(yu)(yu)言(yan)自身也(ye)在不斷地(di)完(wan)善。直到(dao)2020年(nian),各(ge)種版本的(de)UNIX內(nei)核和(he)周邊工具仍(reng)然(ran)使用(yong)C語(yu)(yu)言(yan)作(zuo)為(wei)最主要的(de)開(kai)發語(yu)(yu)言(yan),其中還有不少繼承湯(tang)普遜和(he)里奇(qi)之(zhi)手的(de)代碼。
在(zai)(zai)開發中,他們還考慮把UNIX移植到其他類(lei)型的(de)計算機(ji)上使用(yong)。C語言強大的(de)移植性(xing)(Portability)在(zai)(zai)此顯現。機(ji)器(qi)語言和(he)(he)匯編(bian)語言都(dou)不(bu)具(ju)有移植性(xing),為x86開發的(de)程(cheng)序(xu),不(bu)可(ke)能在(zai)(zai)Alpha、SPARC和(he)(he)ARM等機(ji)器(qi)上運行(xing)(xing)。而(er)C語言程(cheng)序(xu)則可(ke)以(yi)使用(yong)在(zai)(zai)任意架構(gou)的(de)處理器(qi)上,只(zhi)要那種架構(gou)的(de)處理器(qi)具(ju)有對應(ying)的(de)C語言編(bian)譯器(qi)和(he)(he)庫(ku),然后將C源代碼編(bian)譯、連(lian)接成目標(biao)二(er)進制(zhi)文件之后即(ji)可(ke)在(zai)(zai)哪種架構(gou)的(de)處理器(qi)運行(xing)(xing)。
1977年,丹尼斯·里奇(qi)發表了不依賴于具體機(ji)器系統的(de)C語(yu)言(yan)編譯(yi)文本《可移植的(de)C語(yu)言(yan)編譯(yi)程(cheng)序》。
C語(yu)言(yan)(yan)(yan)繼續(xu)發展,在1982年(nian)(nian),很多(duo)有識之士和(he)美(mei)國(guo)國(guo)家標(biao)(biao)準協會(ANSI)為了(le)使C語(yu)言(yan)(yan)(yan)健康(kang)地發展下去,決定成立C標(biao)(biao)準委員會,建立C語(yu)言(yan)(yan)(yan)的(de)(de)標(biao)(biao)準。委員會由硬件廠(chang)商、編(bian)譯器及其他軟件工(gong)具生產商、軟件設計師、顧問、學術界人(ren)(ren)士、C語(yu)言(yan)(yan)(yan)作者和(he)應用(yong)程序(xu)員組(zu)成。1989年(nian)(nian),ANSI發布了(le)第一個完整的(de)(de)C語(yu)言(yan)(yan)(yan)標(biao)(biao)準——ANSI X3.159-1989,簡稱(cheng)“C89”,不過(guo)人(ren)(ren)們也習慣稱(cheng)其為“ANSI C”。C89在1990年(nian)(nian)被國(guo)際標(biao)(biao)準化(hua)組(zu)織(International Standard Organization,ISO)一字不改(gai)地采納,ISO官(guan)方(fang)給予的(de)(de)名稱(cheng)為:ISO/IEC 9899,所以ISO/IEC9899:1990也通常被簡稱(cheng)為“C90”。1999年(nian)(nian),在做(zuo)了(le)一些必要的(de)(de)修正和(he)完善(shan)后,ISO發布了(le)新(xin)的(de)(de)C語(yu)言(yan)(yan)(yan)標(biao)(biao)準,命名為ISO/IEC 9899:1999,簡稱(cheng)“C99”。在2011年(nian)(nian)12月8日,ISO又正式發布了(le)新(xin)的(de)(de)標(biao)(biao)準,稱(cheng)為ISO/IEC9899:2011,簡稱(cheng)為“C11”。
數據類型
C的數據類(lei)(lei)型(xing)(xing)(xing)包括:整(zheng)型(xing)(xing)(xing)(short、int、long、long long)、字符型(xing)(xing)(xing)(char)、實型(xing)(xing)(xing)或浮(fu)點型(xing)(xing)(xing)(單精度float和(he)雙(shuang)精度double)、枚舉類(lei)(lei)型(xing)(xing)(xing)(enum)、數組類(lei)(lei)型(xing)(xing)(xing)、結(jie)構體類(lei)(lei)型(xing)(xing)(xing)(struct)、共用體類(lei)(lei)型(xing)(xing)(xing)(union)、指針(zhen)類(lei)(lei)型(xing)(xing)(xing)和(he)空類(lei)(lei)型(xing)(xing)(xing)(void)。
常量與變量
常(chang)(chang)量其值不可改變,符號常(chang)(chang)量名(ming)通常(chang)(chang)用大寫。
變(bian)量(liang)是以(yi)某標(biao)識(shi)符(fu)為(wei)(wei)名字(zi),其(qi)值可以(yi)改變(bian)的(de)(de)量(liang)。標(biao)識(shi)符(fu)是以(yi)字(zi)母(mu)或(huo)(huo)下(xia)劃線(xian)開(kai)頭的(de)(de)一串由字(zi)母(mu)、數字(zi)或(huo)(huo)下(xia)劃線(xian)構成的(de)(de)序列,請注意第(di)一個字(zi)符(fu)必須為(wei)(wei)字(zi)母(mu)或(huo)(huo)下(xia)劃線(xian),否則為(wei)(wei)不合法(fa)的(de)(de)變(bian)量(liang)名。變(bian)量(liang)在編譯(yi)時為(wei)(wei)其(qi)分配相應存(cun)儲單元。
數組
如果一(yi)(yi)(yi)個(ge)變量名后(hou)面(mian)跟著一(yi)(yi)(yi)個(ge)有數(shu)字的(de)(de)中括(kuo)號,這個(ge)聲明(ming)就(jiu)是(shi)數(shu)組聲明(ming)。字符串也是(shi)一(yi)(yi)(yi)種(zhong)數(shu)組。它們以ASCII的(de)(de)NULL作為(wei)數(shu)組的(de)(de)結束。要特別注(zhu)意的(de)(de)是(shi),中括(kuo)號內的(de)(de)索引值是(shi)從0算起(qi)的(de)(de)。
指針
如果一個(ge)變(bian)量聲明時在(zai)前面使用(yong)*號,表明這(zhe)是(shi)個(ge)指(zhi)針型(xing)變(bian)量。換(huan)句話說,該(gai)變(bian)量存(cun)(cun)儲(chu)一個(ge)地(di)址,而*(此處特(te)指(zhi)單目運(yun)算符*,下同(tong)。C語(yu)言中另有雙(shuang)目運(yun)算符*)則是(shi)取(qu)內容操作(zuo)符,意思是(shi)取(qu)這(zhe)個(ge)內存(cun)(cun)地(di)址里存(cun)(cun)儲(chu)的(de)內容。指(zhi)針是(shi)C語(yu)言區別于其(qi)他同(tong)時代高(gao)級語(yu)言的(de)主要特(te)征之一。
指(zhi)針(zhen)不(bu)僅可以是變量的地址,還可以是數(shu)組(zu)、數(shu)組(zu)元素、函數(shu)的地址。通過指(zhi)針(zhen)作為形式(shi)參數(shu)可以在(zai)函數(shu)的調用過程得到一(yi)個以上(shang)的返回值,不(bu)同于return(z)這樣的僅能得到一(yi)個返回值。
指(zhi)針是(shi)一(yi)把雙刃劍,許多操作可以(yi)通過指(zhi)針自然的表(biao)達,但是(shi)不正確的或者(zhe)過分(fen)的使用指(zhi)針又會給程序(xu)帶來大量潛在(zai)的錯誤(wu)。
字符串
C語(yu)言的字(zi)(zi)符(fu)(fu)串其實就是(shi)以' '字(zi)(zi)符(fu)(fu)結(jie)尾(wei)的char型(xing)數(shu)組,使(shi)用字(zi)(zi)符(fu)(fu)型(xing)并(bing)不(bu)需要(yao)引用庫(ku),但是(shi)使(shi)用字(zi)(zi)符(fu)(fu)串就需要(yao)C標準庫(ku)里面的一些(xie)用于(yu)(yu)對字(zi)(zi)符(fu)(fu)串進行操作的函數(shu)。它(ta)們不(bu)同于(yu)(yu)字(zi)(zi)符(fu)(fu)數(shu)組。使(shi)用這些(xie)函數(shu)需要(yao)引用頭文件。
文件輸入/輸出
在C語言中(zhong)(zhong),輸入和輸出是經由標準庫中(zhong)(zhong)的(de)一組(zu)函數來實(shi)現的(de)。在ANSI C中(zhong)(zhong),這些函數被定義在頭文件;中(zhong)(zhong)。
標準輸入/輸出
有(you)三個標(biao)準輸入/輸出是(shi)標(biao)準I/O庫(ku)預先定義(yi)的:
stdin標準輸入(ru)
stdout標(biao)準輸出(chu)
stderr輸入輸出錯(cuo)誤
C語言(yan)的(de)運(yun)(yun)算(suan)(suan)(suan)非(fei)常靈活,功(gong)能十分豐富,運(yun)(yun)算(suan)(suan)(suan)種(zhong)類遠多于其它程序(xu)設計語言(yan)。在表(biao)(biao)達(da)式(shi)方面較其它程序(xu)語言(yan)更為簡潔,如自加(jia)、自減、逗(dou)號運(yun)(yun)算(suan)(suan)(suan)和(he)三(san)目運(yun)(yun)算(suan)(suan)(suan)使表(biao)(biao)達(da)式(shi)更為簡單(dan),但初(chu)學者(zhe)往往會覺的(de)這種(zhong)表(biao)(biao)達(da)式(shi)難讀,關(guan)鍵(jian)原因就(jiu)是對(dui)運(yun)(yun)算(suan)(suan)(suan)符(fu)和(he)運(yun)(yun)算(suan)(suan)(suan)順(shun)序(xu)理解不(bu)透不(bu)全。當多種(zhong)不(bu)同(tong)運(yun)(yun)算(suan)(suan)(suan)組成一(yi)個(ge)運(yun)(yun)算(suan)(suan)(suan)表(biao)(biao)達(da)式(shi),即一(yi)個(ge)運(yun)(yun)算(suan)(suan)(suan)式(shi)中出現多種(zhong)運(yun)(yun)算(suan)(suan)(suan)符(fu)時,運(yun)(yun)算(suan)(suan)(suan)的(de)優先順(shun)序(xu)和(he)結合規則就(jiu)會顯得十分重要。
關鍵字(zi)(zi)又稱為(wei)保(bao)留(liu)字(zi)(zi),就(jiu)是(shi)已被C語言本身使用(yong)(yong),不(bu)能(neng)(neng)作(zuo)其它用(yong)(yong)途使用(yong)(yong)的字(zi)(zi)。例如關鍵字(zi)(zi)不(bu)能(neng)(neng)用(yong)(yong)作(zuo)變量名、函數名等標(biao)識符。
數據類型關鍵字
short:修飾int,短整型(xing)數據,可省略(lve)被修飾的int。(K&R時期引(yin)入)
long:修飾(shi)int,長整型(xing)數(shu)據,可省略被修飾(shi)的int。(K&R時(shi)期引(yin)入)
long long:修飾int,超長(chang)整型數據,可(ke)省(sheng)略(lve)被修飾的int。(C99標(biao)準新增)
signed:修(xiu)飾整型數(shu)據(ju),有符號(hao)數(shu)據(ju)類(lei)型。(C89標準(zhun)新增)
unsigned:修飾整(zheng)型數(shu)(shu)據,無(wu)符號數(shu)(shu)據類型。(K&R時(shi)期(qi)引入)
restrict:用于限定(ding)和約束指針,并表(biao)明指針是訪問一個數據對(dui)象的初始且(qie)唯(wei)一的方式。(C99標準新增)
復雜類型關鍵字
struct:結構體聲明。(K&R時期引入)
union:聯合體聲明。(K&R時期引入)
enum:枚舉聲(sheng)明。(C89標準(zhun)新增)
typedef:聲明類型別名。(K&R時期引入(ru))
sizeof:得到(dao)特定(ding)類型或特定(ding)類型變量的(de)大小。(K&R時期引入)
inline:內聯函數用于取代宏定義,會在任何調(diao)用它(ta)的地方展開(kai)。(C99標(biao)準(zhun)新增)
存儲級別關鍵字
auto:指定(ding)為自動(dong)變(bian)量,由編譯器自動(dong)分(fen)配(pei)及釋(shi)放。通常在棧(zhan)上分(fen)配(pei)。與(yu)static相反(fan)。當(dang)變(bian)量未指定(ding)時(shi)默認為auto。(K&R時(shi)期引入)
static:指(zhi)定為靜態變(bian)量,分配(pei)在靜態變(bian)量區,修飾函(han)數時,指(zhi)定函(han)數作用域(yu)為文(wen)件(jian)內部。(K&R時期(qi)引入)
register:指(zhi)定(ding)為(wei)寄存(cun)器(qi)變量(liang),建議編譯(yi)器(qi)將變量(liang)存(cun)儲(chu)到寄存(cun)器(qi)中使用(yong),也(ye)可以修飾(shi)函(han)數形參,建議編譯(yi)器(qi)通(tong)過寄存(cun)器(qi)而不是(shi)堆棧傳遞參數。(K&R時期(qi)引入)
extern:指定對(dui)應變量(liang)為外部變量(liang),即標示(shi)變量(liang)或者函數的(de)定義在(zai)別的(de)文件中,提示(shi)編譯器(qi)遇到此變量(liang)和函數時在(zai)其他模塊中尋(xun)找其定義。(K&R時期引入(ru))
const:指(zhi)定變(bian)量不可被當前線程改變(bian)(但有可能被系統或(huo)其他線程改變(bian))。(C89標準新增)
volatile:指定(ding)變(bian)量的值(zhi)有可能會被系(xi)統或(huo)其他線程(cheng)改變(bian),強制編譯器每(mei)次從內存中取得該(gai)變(bian)量的值(zhi),阻止編譯器把該(gai)變(bian)量優化成寄存器變(bian)量。(C89標準新增)
流程控制關鍵字
return:用(yong)在函數(shu)體(ti)中,返回(hui)特定值(如(ru)果(guo)是void類(lei)型,則(ze)不返回(hui)函數(shu)值)。(K&R時期引(yin)入(ru))
continue:結束當前(qian)循環(huan),開始下一輪循環(huan)。(K&R時(shi)期(qi)引入)
break:跳(tiao)出當前循(xun)環(huan)或switch結構(gou)。(K&R時期(qi)引入)
goto:無條件跳轉(zhuan)語(yu)句。(K&R時(shi)期引入)
分支結構
if:條件語句,后面(mian)不需要放分號(hao)。(K&R時期(qi)引入)
else:條(tiao)件語句否(fou)定分支(zhi)(與if連用)。(K&R時(shi)期引入)
switch:開關語句(多重分支語句)。(K&R時期(qi)引(yin)入)
case:開關(guan)語句中的(de)分支標記,與switch連用。(K&R時(shi)期引入)
default:開關語句中的“其他(ta)”分支,可選。(K&R時(shi)期引入)
語法結構
順序結構
順序結構的程(cheng)序設計是最簡單的,只要按照解決(jue)問題的順序寫出相應(ying)的語句就(jiu)行(xing),它的執行(xing)順序是自上而下(xia),依次(ci)執行(xing)。
例如:a=3,b=5,現交(jiao)換(huan)a、b的(de)(de)(de)(de)(de)值,這個(ge)(ge)問題就(jiu)(jiu)好(hao)像交(jiao)換(huan)兩(liang)個(ge)(ge)杯(bei)子(zi)(zi)里面(mian)的(de)(de)(de)(de)(de)水(shui),這當然(ran)要(yao)用到第三個(ge)(ge)杯(bei)子(zi)(zi),假如第三個(ge)(ge)杯(bei)子(zi)(zi)是(shi)c,那么(me)正確(que)的(de)(de)(de)(de)(de)程序(xu)(xu)(xu)(xu)為(wei):c=a;a=b;b=c,執(zhi)(zhi)行結(jie)(jie)(jie)果(guo)是(shi)a=5,b=c=3,如果(guo)改變其順(shun)(shun)序(xu)(xu)(xu)(xu),寫(xie)成(cheng)(cheng)(cheng):a=b;c=a;b=c;則執(zhi)(zhi)行結(jie)(jie)(jie)果(guo)就(jiu)(jiu)變成(cheng)(cheng)(cheng)a=b=c=5,不能(neng)達到預(yu)期的(de)(de)(de)(de)(de)目的(de)(de)(de)(de)(de),初學者(zhe)最容易犯這種錯誤。順(shun)(shun)序(xu)(xu)(xu)(xu)結(jie)(jie)(jie)構(gou)(gou)(gou)可以獨立使用構(gou)(gou)(gou)成(cheng)(cheng)(cheng)一(yi)個(ge)(ge)簡單的(de)(de)(de)(de)(de)完整(zheng)程序(xu)(xu)(xu)(xu),常見(jian)的(de)(de)(de)(de)(de)輸入、計算、輸出三步曲的(de)(de)(de)(de)(de)程序(xu)(xu)(xu)(xu)就(jiu)(jiu)是(shi)順(shun)(shun)序(xu)(xu)(xu)(xu)結(jie)(jie)(jie)構(gou)(gou)(gou),例如計算圓的(de)(de)(de)(de)(de)面(mian)積(ji),其程序(xu)(xu)(xu)(xu)的(de)(de)(de)(de)(de)語句順(shun)(shun)序(xu)(xu)(xu)(xu)就(jiu)(jiu)是(shi)輸入圓的(de)(de)(de)(de)(de)半(ban)徑r,計算s=3.14159*r*r,輸出圓的(de)(de)(de)(de)(de)面(mian)積(ji)s。不過大多(duo)數情況(kuang)下順(shun)(shun)序(xu)(xu)(xu)(xu)結(jie)(jie)(jie)構(gou)(gou)(gou)都是(shi)作(zuo)為(wei)程序(xu)(xu)(xu)(xu)的(de)(de)(de)(de)(de)一(yi)部分,與(yu)其它結(jie)(jie)(jie)構(gou)(gou)(gou)一(yi)起構(gou)(gou)(gou)成(cheng)(cheng)(cheng)一(yi)個(ge)(ge)復雜的(de)(de)(de)(de)(de)程序(xu)(xu)(xu)(xu),例如分支結(jie)(jie)(jie)構(gou)(gou)(gou)中的(de)(de)(de)(de)(de)復合語句、循環結(jie)(jie)(jie)構(gou)(gou)(gou)中的(de)(de)(de)(de)(de)循環體(ti)等。
選擇結構
順序(xu)(xu)結(jie)構(gou)(gou)的(de)(de)(de)(de)程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu)雖然能(neng)(neng)解決計(ji)算(suan)、輸出(chu)等問(wen)題(ti),但不能(neng)(neng)做判(pan)斷再選(xuan)(xuan)(xuan)擇(ze)(ze)(ze)(ze)。對于要(yao)(yao)先做判(pan)斷再選(xuan)(xuan)(xuan)擇(ze)(ze)(ze)(ze)的(de)(de)(de)(de)問(wen)題(ti)就要(yao)(yao)使用選(xuan)(xuan)(xuan)擇(ze)(ze)(ze)(ze)結(jie)構(gou)(gou)。選(xuan)(xuan)(xuan)擇(ze)(ze)(ze)(ze)結(jie)構(gou)(gou)的(de)(de)(de)(de)執(zhi)(zhi)行(xing)是依據一定的(de)(de)(de)(de)條(tiao)件選(xuan)(xuan)(xuan)擇(ze)(ze)(ze)(ze)執(zhi)(zhi)行(xing)路徑,而不是嚴格按照(zhao)語句出(chu)現(xian)的(de)(de)(de)(de)物理順序(xu)(xu)。選(xuan)(xuan)(xuan)擇(ze)(ze)(ze)(ze)結(jie)構(gou)(gou)的(de)(de)(de)(de)程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu)設計(ji)方法的(de)(de)(de)(de)關鍵在于構(gou)(gou)造合適(shi)的(de)(de)(de)(de)分(fen)支條(tiao)件和分(fen)析程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu)流(liu)程(cheng)(cheng)(cheng)(cheng)(cheng),根(gen)據不同的(de)(de)(de)(de)程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu)流(liu)程(cheng)(cheng)(cheng)(cheng)(cheng)選(xuan)(xuan)(xuan)擇(ze)(ze)(ze)(ze)適(shi)當的(de)(de)(de)(de)選(xuan)(xuan)(xuan)擇(ze)(ze)(ze)(ze)語句。選(xuan)(xuan)(xuan)擇(ze)(ze)(ze)(ze)結(jie)構(gou)(gou)適(shi)合于帶有邏輯或關系比較等條(tiao)件判(pan)斷的(de)(de)(de)(de)計(ji)算(suan),設計(ji)這(zhe)(zhe)類程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu)時往(wang)往(wang)都(dou)要(yao)(yao)先繪制(zhi)其程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu)流(liu)程(cheng)(cheng)(cheng)(cheng)(cheng)圖(tu),然后根(gen)據程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu)流(liu)程(cheng)(cheng)(cheng)(cheng)(cheng)寫出(chu)源程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu),這(zhe)(zhe)樣做把程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu)設計(ji)分(fen)析與語言分(fen)開,使得問(wen)題(ti)簡單化,易(yi)于理解。程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu)流(liu)程(cheng)(cheng)(cheng)(cheng)(cheng)圖(tu)是根(gen)據解題(ti)分(fen)析所繪制(zhi)的(de)(de)(de)(de)程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu)執(zhi)(zhi)行(xing)流(liu)程(cheng)(cheng)(cheng)(cheng)(cheng)圖(tu)。
循環結構
循(xun)(xun)環(huan)結(jie)構可(ke)(ke)以減少源程(cheng)(cheng)序重復書寫(xie)的工作量,用(yong)來(lai)(lai)描述重復執行某段算(suan)法(fa)的問題(ti),這是程(cheng)(cheng)序設計(ji)中最能發揮計(ji)算(suan)機特長(chang)的程(cheng)(cheng)序結(jie)構,C語言中提供四種循(xun)(xun)環(huan),即goto循(xun)(xun)環(huan)、while循(xun)(xun)環(huan)、do while循(xun)(xun)環(huan)和for循(xun)(xun)環(huan)。四種循(xun)(xun)環(huan)可(ke)(ke)以用(yong)來(lai)(lai)處理同(tong)一問題(ti),一般情(qing)況下它(ta)們可(ke)(ke)以互相代替(ti)換,但一般不提倡用(yong)goto循(xun)(xun)環(huan),因為強制改變程(cheng)(cheng)序的順(shun)序經常(chang)會給程(cheng)(cheng)序的運行帶來(lai)(lai)不可(ke)(ke)預(yu)料(liao)的錯誤。
特別要(yao)注意(yi)在循環體內應包含趨于結束的語句(ju)(即循環變量值(zhi)的改變),否則就(jiu)可能成了一個(ge)死循環,這是初(chu)學(xue)者的一個(ge)常見錯誤。
三個循(xun)(xun)(xun)環(huan)(huan)(huan)的(de)(de)異同(tong)點(dian):用(yong)while和(he)(he)do while循(xun)(xun)(xun)環(huan)(huan)(huan)時(shi),循(xun)(xun)(xun)環(huan)(huan)(huan)變量的(de)(de)初始化的(de)(de)操作應在循(xun)(xun)(xun)環(huan)(huan)(huan)體(ti)(ti)之前(qian),而for循(xun)(xun)(xun)環(huan)(huan)(huan)一(yi)般在語句(ju)1中進(jin)行的(de)(de);while循(xun)(xun)(xun)環(huan)(huan)(huan)和(he)(he)for循(xun)(xun)(xun)環(huan)(huan)(huan)都(dou)是(shi)先(xian)判斷表達式,后執(zhi)行循(xun)(xun)(xun)環(huan)(huan)(huan)體(ti)(ti),而do while循(xun)(xun)(xun)環(huan)(huan)(huan)是(shi)先(xian)執(zhi)行循(xun)(xun)(xun)環(huan)(huan)(huan)體(ti)(ti)后判斷表達式,也(ye)就(jiu)是(shi)說do while的(de)(de)循(xun)(xun)(xun)環(huan)(huan)(huan)體(ti)(ti)最少被執(zhi)行一(yi)次(ci),而while循(xun)(xun)(xun)環(huan)(huan)(huan)和(he)(he)for就(jiu)可能一(yi)次(ci)都(dou)不執(zhi)行。另(ling)外還要注(zhu)意的(de)(de)是(shi)這三種循(xun)(xun)(xun)環(huan)(huan)(huan)都(dou)可以用(yong)break語句(ju)跳出循(xun)(xun)(xun)環(huan)(huan)(huan),用(yong)continue語句(ju)結束本(ben)次(ci)循(xun)(xun)(xun)環(huan)(huan)(huan),而goto語句(ju)與if構(gou)成(cheng)的(de)(de)循(xun)(xun)(xun)環(huan)(huan)(huan),是(shi)不能用(yong)break和(he)(he)continue語句(ju)進(jin)行控(kong)制的(de)(de)。
順序(xu)結構(gou)、分(fen)支結構(gou)和循(xun)環結構(gou)并(bing)不彼此孤立的(de),在循(xun)環中(zhong)可(ke)(ke)以(yi)(yi)有(you)(you)分(fen)支、順序(xu)結構(gou),分(fen)支中(zhong)也可(ke)(ke)以(yi)(yi)有(you)(you)循(xun)環、順序(xu)結構(gou),其實不管(guan)哪種(zhong)結構(gou),均可(ke)(ke)廣義的(de)把(ba)它們看成(cheng)(cheng)一個語句(ju)。在實際(ji)編程(cheng)過程(cheng)中(zhong)常(chang)將這(zhe)三種(zhong)結構(gou)相互(hu)結合以(yi)(yi)實現各種(zhong)算法,設(she)計出(chu)相應程(cheng)序(xu),但是要編程(cheng)的(de)問題較(jiao)大,編寫出(chu)的(de)程(cheng)序(xu)就往往很(hen)長、結構(gou)重復(fu)多(duo),造(zao)成(cheng)(cheng)可(ke)(ke)讀(du)性(xing)差(cha),難以(yi)(yi)理解,解決這(zhe)個問題的(de)方法是將C程(cheng)序(xu)設(she)計成(cheng)(cheng)模塊化結構(gou)。
具體內容:
for循環
for循環結構(gou)是c語(yu)(yu)言(yan)中最具有(you)特色的循環語(yu)(yu)句,使用最為靈活方(fang)便,它的一(yi)般形(xing)式(shi)為:
for(表達式1;表達式2;表達式3)循環體語(yu)句。(其中;不能省(sheng)略)
表達式1為初(chu)值(zhi)表達式,用于在循環開(kai)始前為循環變量賦初(chu)值(zhi)。
表達式2是(shi)循環(huan)控制邏輯表達式,它(ta)控制循環(huan)執(zhi)行的條件,決定循環(huan)的次數。
表(biao)達式3為循環(huan)控制變量修改表(biao)達式,它使for循環(huan)趨(qu)向結束。
循環體(ti)語(yu)句是在循環控(kong)制(zhi)條件成立的(de)情況下被反復執行的(de)語(yu)句。
但是在整個for循(xun)環(huan)過程中,表達(da)式1只計算(suan)一次(ci)(ci),表達(da)式2和表達(da)式3則可能(neng)計算(suan)多次(ci)(ci),也可能(neng)一次(ci)(ci)也不計算(suan)。循(xun)環(huan)體可能(neng)多次(ci)(ci)執行,也可能(neng)一次(ci)(ci)都不執行。
先執行表達式(shi)2,然后(hou)執行循環(huan)結(jie)構,最(zui)后(hou)表達式(shi)3,一直這樣循環(huan)下去。
for循環語句(ju)是c語言種功能最(zui)為強大的(de)語句(ju),甚至在(zai)一定程度(du)上可以代替其他的(de)循環語句(ju)。
do
do循(xun)(xun)環結構,do 1 while(2);的執行順序是(shi)1->2->1...循(xun)(xun)環,2為循(xun)(xun)環條件。
while
while循環(huan)結構,while(1)2;的執行順序是1->2->1...循環(huan),1為循環(huan)條件
以上循(xun)環語句,當循(xun)環條件表達式為(wei)真則繼續(xu)循(xun)環,為(wei)假(jia)則跳出循(xun)環。
函數
C程(cheng)(cheng)序(xu)是(shi)(shi)(shi)由一(yi)(yi)組變量或是(shi)(shi)(shi)函(han)數(shu)的(de)(de)(de)外(wai)部(bu)對(dui)象組成(cheng)(cheng)的(de)(de)(de)。函(han)數(shu)是(shi)(shi)(shi)一(yi)(yi)個自(zi)我包含的(de)(de)(de)完(wan)成(cheng)(cheng)一(yi)(yi)定相關功能(neng)的(de)(de)(de)執(zhi)行(xing)代(dai)碼段。我們可以(yi)把函(han)數(shu)看(kan)成(cheng)(cheng)一(yi)(yi)個“黑盒子(zi)”,你只要將數(shu)據送進去就(jiu)能(neng)得到結果,而函(han)數(shu)內部(bu)究竟是(shi)(shi)(shi)如何工作的(de)(de)(de),外(wai)部(bu)程(cheng)(cheng)序(xu)是(shi)(shi)(shi)不知道(dao)的(de)(de)(de)。外(wai)部(bu)程(cheng)(cheng)序(xu)所(suo)知道(dao)的(de)(de)(de)僅限于輸入給函(han)數(shu)什(shen)么以(yi)及函(han)數(shu)輸出什(shen)么。函(han)數(shu)提供了(le)編制程(cheng)(cheng)序(xu)的(de)(de)(de)手段,使之容易(yi)讀、寫、理解、排除(chu)錯(cuo)誤(wu)、修改和維護。
C程(cheng)序(xu)中函(han)數(shu)的數(shu)目實際上是不(bu)限(xian)的,如果說有什么限(xian)制的話,那(nei)就是,一個(ge)(ge)(ge)C程(cheng)序(xu)中必須(xu)至少有一個(ge)(ge)(ge)函(han)數(shu),而且其中必須(xu)有一個(ge)(ge)(ge)并且僅有一個(ge)(ge)(ge)以main為名的函(han)數(shu),這個(ge)(ge)(ge)函(han)數(shu)稱為主(zhu)函(han)數(shu),整個(ge)(ge)(ge)程(cheng)序(xu)從(cong)這個(ge)(ge)(ge)主(zhu)函(han)數(shu)開始(shi)執行。
C語言(yan)程(cheng)(cheng)序鼓勵和提倡人們把一(yi)個(ge)大(da)(da)問題劃(hua)分(fen)成(cheng)(cheng)一(yi)個(ge)個(ge)子(zi)問題,對應于解決一(yi)個(ge)子(zi)問題編(bian)制一(yi)個(ge)函(han)數(shu)(shu)(shu),因(yin)此,C語言(yan)程(cheng)(cheng)序一(yi)般是(shi)由大(da)(da)量的(de)(de)小函(han)數(shu)(shu)(shu)而不(bu)是(shi)由少(shao)量大(da)(da)函(han)數(shu)(shu)(shu)構(gou)成(cheng)(cheng)的(de)(de),即所(suo)謂“小函(han)數(shu)(shu)(shu)構(gou)成(cheng)(cheng)大(da)(da)程(cheng)(cheng)序”。這(zhe)樣的(de)(de)好處是(shi)讓各部分(fen)相互充分(fen)獨立(li),并且任(ren)務單一(yi)。因(yin)而這(zhe)些(xie)充分(fen)獨立(li)的(de)(de)小模塊也可(ke)以作為一(yi)種固定規格的(de)(de)小“構(gou)件”,用來(lai)構(gou)成(cheng)(cheng)新的(de)(de)大(da)(da)程(cheng)(cheng)序。
C語(yu)言(yan)(yan)發展(zhan)的那(nei)么多(duo)年來(lai),用(yong)C語(yu)言(yan)(yan)開發的系統和程序(xu)浩如(ru)煙海。在發展(zhan)的同時也積累了很多(duo)能直接使用(yong)的庫函數。
ANSI C提供了標準(zhun)C語(yu)言庫函數。
C語言初學者比較喜歡的Turbo C 2.0提(ti)供了400多個運行(xing)時函(han)(han)(han)數(shu)(shu)(shu),每個函(han)(han)(han)數(shu)(shu)(shu)都完(wan)成特(te)定(ding)的功能,用戶可隨(sui)意(yi)調用。這些函(han)(han)(han)數(shu)(shu)(shu)總(zong)體分成輸入輸出函(han)(han)(han)數(shu)(shu)(shu)、數(shu)(shu)(shu)學函(han)(han)(han)數(shu)(shu)(shu)、字符串和(he)(he)(he)內存函(han)(han)(han)數(shu)(shu)(shu)、與BIOS和(he)(he)(he)DOS有關的函(han)(han)(han)數(shu)(shu)(shu)、字符屏幕和(he)(he)(he)圖形功能函(han)(han)(han)數(shu)(shu)(shu)、過程控制函(han)(han)(han)數(shu)(shu)(shu)、目錄函(han)(han)(han)數(shu)(shu)(shu)等。
Windows系統所(suo)提(ti)供(gong)的Windows SDK中包含了(le)數千個跟Windows應用(yong)(yong)程序開(kai)發相關(guan)的函(han)數。其它操(cao)作系統,如Linux,也(ye)同樣提(ti)供(gong)了(le)大量(liang)的函(han)數讓(rang)應用(yong)(yong)程序開(kai)發人員調(diao)用(yong)(yong)。
作為(wei)程序(xu)員應盡(jin)量熟(shu)悉目標(biao)平(ping)臺(tai)庫函(han)數(shu)其功(gong)能(neng)(neng)。這樣才能(neng)(neng)游刃有余(yu)地開發特定平(ping)臺(tai)的應用(yong)程序(xu)。比如作為(wei)Windows應用(yong)程序(xu)的開發者,應盡(jin)量熟(shu)悉Windows SDK;作為(wei)Linux應用(yong)程序(xu)開發者,應盡(jin)量熟(shu)悉Linux系統(tong)調用(yong)和(he)POSIX函(han)數(shu)規范。
運算符號
比較特(te)別的是(shi)(shi),比特(te)右(you)移(yi)(>>)運算(suan)(suan)符可以是(shi)(shi)算(suan)(suan)術(shu)(左端補最高有效位)或是(shi)(shi)邏輯(左端補0)位移(yi)。例如,將11100011右(you)移(yi)3比特(te),算(suan)(suan)術(shu)右(you)移(yi)后成為11111100,邏輯右(you)移(yi)則為00011100。因(yin)算(suan)(suan)術(shu)比特(te)右(you)移(yi)較適于處理帶負號整數,所(suo)以幾乎所(suo)有的編譯(yi)器都(dou)是(shi)(shi)算(suan)(suan)術(shu)比特(te)右(you)移(yi)。
運(yun)(yun)(yun)算(suan)符的(de)優(you)先(xian)級從高(gao)到低大致(zhi)是(shi):單目運(yun)(yun)(yun)算(suan)符、算(suan)術運(yun)(yun)(yun)算(suan)符、關系(xi)運(yun)(yun)(yun)算(suan)符、邏(luo)輯運(yun)(yun)(yun)算(suan)符、條件運(yun)(yun)(yun)算(suan)符、賦值(zhi)運(yun)(yun)(yun)算(suan)符(=)和逗號運(yun)(yun)(yun)算(suan)符。
GCC,GNU組織開發的(de)開源(yuan)免費的(de)編譯器(qi)
MinGW,Windows操作系統下的(de)GCC
Clang,開源的BSD協議的基(ji)于LLVM的編譯器
Visual C++ :: cl.exe,Microsoft VC++自(zi)帶的編譯器(qi)
Code::Blocks,開源免費的C/C++ IDE
CodeLite,開源、跨平(ping)臺的C/C++集成開發(fa)環境
Dev-C++,可移(yi)植(zhi)的(de)C/C++IDE
C-Free
Light Table
Visual Studio系(xi)列
C語(yu)(yu)(yu)言是(shi)一(yi)種結構(gou)化語(yu)(yu)(yu)言,它有著清晰的(de)(de)(de)層次,可按照模(mo)塊的(de)(de)(de)方式對(dui)(dui)程(cheng)序進行(xing)編(bian)寫,十分有利(li)于程(cheng)序的(de)(de)(de)調試(shi),且c語(yu)(yu)(yu)言的(de)(de)(de)處理(li)和(he)表現能力都非(fei)常的(de)(de)(de)強大,依靠非(fei)常全面的(de)(de)(de)運(yun)算符(fu)和(he)多(duo)樣(yang)的(de)(de)(de)數據類型(xing),可以(yi)輕易完成各種數據結構(gou)的(de)(de)(de)構(gou)建,通過指針類型(xing)更可對(dui)(dui)內存直接尋址以(yi)及對(dui)(dui)硬件(jian)進行(xing)直接操作,因此既能夠用(yong)于開發系統程(cheng)序,也可用(yong)于開發應用(yong)軟件(jian)。通過對(dui)(dui)C語(yu)(yu)(yu)言進行(xing)研(yan)究分析,總(zong)結出其主要(yao)特點如下:
(1)簡潔的語(yu)言
C語(yu)言包(bao)含的各種(zhong)控制語(yu)句(ju)僅有9種(zhong),關(guan)鍵字(zi)也只(zhi)有32個,程序的編寫(xie)要(yao)求不嚴(yan)格且以小寫(xie)字(zi)母為主,對許多不必要(yao)的部分進(jin)行(xing)了(le)精簡。實際(ji)上,語(yu)句(ju)構(gou)成與硬(ying)件(jian)有關(guan)聯的較少,且C語(yu)言本(ben)身不提供與硬(ying)件(jian)相關(guan)的輸入輸出、文件(jian)管(guan)理等功能(neng),如需(xu)此(ci)類功能(neng),需(xu)要(yao)通過配合編譯系(xi)統所支(zhi)持的各類庫進(jin)行(xing)編程,故(gu)c語(yu)言擁有非(fei)常(chang)簡潔的編譯系(xi)統。
(2)具有結構化的控(kong)制語句
C語言(yan)是一種結構(gou)化(hua)(hua)的(de)語言(yan),提供的(de)控(kong)制語句具有結構(gou)化(hua)(hua)特征,如(ru)for語句、if...else語句和switch語句等。可以用于實現(xian)函數(shu)的(de)邏輯(ji)控(kong)制,方便(bian)面向過程(cheng)的(de)程(cheng)序設計(ji)。
(3)豐富的(de)數據類(lei)型
C語言(yan)包(bao)含的(de)數(shu)(shu)(shu)(shu)據類(lei)(lei)(lei)型廣泛,不僅包(bao)含有傳統(tong)的(de)字符型、整型、浮點型、數(shu)(shu)(shu)(shu)組類(lei)(lei)(lei)型等數(shu)(shu)(shu)(shu)據類(lei)(lei)(lei)型,還具有其他(ta)編程語言(yan)所(suo)不具備的(de)數(shu)(shu)(shu)(shu)據類(lei)(lei)(lei)型,其中以指針類(lei)(lei)(lei)型數(shu)(shu)(shu)(shu)據使用最為靈(ling)活,可以通過編程對各種(zhong)數(shu)(shu)(shu)(shu)據結構進行計算。
(4)豐富的運算符
C語言包含34個運算符,它將賦值、括號等(deng)均視作(zuo)運算符來(lai)操(cao)作(zuo),使C程序的表達(da)式類型(xing)和運算符類型(xing)均非常(chang)豐富。
(5)可(ke)對物理地址進(jin)行直接操作
C語(yu)言(yan)(yan)允(yun)許對(dui)硬件內存地址進行直接讀寫,以(yi)此(ci)可以(yi)實現匯編語(yu)言(yan)(yan)的主(zhu)要功能,并可直接操作硬件。C語(yu)言(yan)(yan)不但(dan)具備高級語(yu)言(yan)(yan)所具有的良好特性,又(you)包含了許多低級語(yu)言(yan)(yan)的優勢,故(gu)在系(xi)統軟件編程領(ling)域有著(zhu)廣(guang)泛的應用。
(6)代碼具有較好(hao)的可移植性
C語(yu)言是面向過程的(de)(de)編(bian)程語(yu)言,用(yong)戶只需要(yao)關注所被解(jie)決問題的(de)(de)本身,而不需要(yao)花費過多的(de)(de)精(jing)力去了解(jie)相關硬件,且(qie)針對不同(tong)的(de)(de)硬件環境,在(zai)用(yong)C語(yu)言實(shi)現相同(tong)功能時的(de)(de)代碼基(ji)本一(yi)致,不需或僅需進行(xing)少量改(gai)動便可完(wan)成(cheng)移植(zhi),這(zhe)就意(yi)味著,對于一(yi)臺計算機編(bian)寫的(de)(de)C程序可以在(zai)另(ling)一(yi)臺計算機上輕松地運行(xing),從而極大的(de)(de)減(jian)少了程序移植(zhi)的(de)(de)工(gong)作(zuo)強度。
(7)可生成高(gao)質量(liang)、目(mu)標代碼執行效率高(gao)的程序
與(yu)其他高級語言相(xiang)比,C語言可以生成高質量(liang)和高效(xiao)率的目標代碼,故(gu)通常應用于對代碼質量(liang)和執行效(xiao)率要求較高的嵌入式(shi)系統程序的編寫。
C語(yu)言是普(pu)適性最強的(de)一種計(ji)算機程(cheng)序(xu)編(bian)(bian)輯語(yu)言,它不僅可以發(fa)揮出高級(ji)編(bian)(bian)程(cheng)語(yu)言的(de)功用,還具有(you)匯(hui)編(bian)(bian)語(yu)言的(de)優點,因此相對于其(qi)它編(bian)(bian)程(cheng)語(yu)言,它具有(you)自己(ji)獨特(te)的(de)特(te)點。具體體現為以下三個方面:
其一(yi),廣(guang)泛性(xing)。C語言的運算(suan)范圍的大(da)小直接決定了(le)其優劣性(xing)。C語言中包含了(le)34種(zhong)運算(suan)符,因此運算(suan)范圍要超出(chu)許多其它語言,此外其運算(suan)結果(guo)的表(biao)達形(xing)式(shi)也十分豐富(fu)。此外,C語言包含了(le)字符型、指針型等多種(zhong)數據結構(gou)形(xing)式(shi),因此,更為龐大(da)的數據結構(gou)運算(suan)它也可以應付。
其(qi)二,簡(jian)潔性(xing)。9類控制語句和32個關鍵字是C語言(yan)所具(ju)有(you)的基(ji)礎(chu)特性(xing),使得(de)其(qi)在(zai)計算機應用(yong)(yong)程(cheng)序編(bian)寫中具(ju)有(you)廣泛的適用(yong)(yong)性(xing),不僅可以適用(yong)(yong)廣大編(bian)程(cheng)人(ren)員(yuan)的操作,提高(gao)其(qi)工(gong)作效率,同時還能(neng)夠支持高(gao)級編(bian)程(cheng),避(bi)免了語言(yan)切(qie)換的繁瑣。
其三,結(jie)構完善。C語(yu)言是一種結(jie)構化語(yu)言,它可以通過組建模塊單位(wei)的(de)形式實現模塊化的(de)應用(yong)程序,在(zai)系統描述(shu)方面(mian)具有顯著優(you)勢(shi),同時這(zhe)一特性(xing)也(ye)使得它能(neng)夠(gou)適應多(duo)種不同的(de)編(bian)程要求,且執行效率(lv)高。
1.C語(yu)言的缺點(dian)主要(yao)表現為數據的封裝(zhuang)性弱,這一(yi)點(dian)使得C在數據的安全性上有很大(da)缺陷,這也是C和C++的一(yi)大(da)區(qu)別(bie)。
2.C語言的(de)語法限(xian)制不太嚴(yan)格,對變量的(de)類型約束(shu)不嚴(yan)格,影響(xiang)程序的(de)安全性,對數組下標越(yue)界不作檢查(cha)等。從應用(yong)的(de)角(jiao)度(du),C語言比其他(ta)高(gao)級(ji)語言較難掌握。也(ye)就是說,對用(yong)C語言的(de)人(ren),要求對程序設計(ji)更熟練(lian)一些。