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