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