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