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