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