C程序設(shè)計(jì)(第二版)第1章課件_第1頁(yè)
C程序設(shè)計(jì)(第二版)第1章課件_第2頁(yè)
C程序設(shè)計(jì)(第二版)第1章課件_第3頁(yè)
C程序設(shè)計(jì)(第二版)第1章課件_第4頁(yè)
C程序設(shè)計(jì)(第二版)第1章課件_第5頁(yè)
已閱讀5頁(yè),還剩93頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

C程序設(shè)計(jì)

(第二版)新世紀(jì)計(jì)算機(jī)基礎(chǔ)教育叢書叢書主編譚浩強(qiáng)C程序設(shè)計(jì)

(第二版)新世紀(jì)計(jì)算機(jī)基礎(chǔ)教育叢書叢書1總目錄第1章C語(yǔ)言概述第2章程序的靈魂——算法第3章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式第4章最簡(jiǎn)單的C程序設(shè)計(jì)——順序程序設(shè)計(jì)第5章選擇結(jié)構(gòu)程序設(shè)計(jì)第6章循環(huán)控制第7章數(shù)組第8章函數(shù)總目錄第1章C語(yǔ)言概述2第9章預(yù)處理命令第10章指針第11章結(jié)構(gòu)體與共用體第12章位運(yùn)算第13章文件第14章C++對(duì)C的擴(kuò)充第15章C++的面向?qū)ο蠡A(chǔ)第16章常見錯(cuò)誤和程序調(diào)試第9章預(yù)處理命令3第1章

C語(yǔ)言概述1.1C語(yǔ)言出現(xiàn)的歷史背景1.2C語(yǔ)言的特點(diǎn)1.3

簡(jiǎn)單的C程序介紹1.4C程序的上機(jī)步驟1.5

習(xí)題第1章C語(yǔ)言概述1.1C語(yǔ)言出現(xiàn)的歷史背景41.1C語(yǔ)言出現(xiàn)的歷史背景C語(yǔ)言是國(guó)際上廣泛流行的計(jì)算機(jī)高級(jí)語(yǔ)言,既可用來寫系統(tǒng)軟件,也可用來寫應(yīng)用軟件。C語(yǔ)言是在B語(yǔ)言的基礎(chǔ)上發(fā)展起來的,它的根源可以追溯到ALGOL60。1960年出現(xiàn)的ALGOL60是一種面向問題的高級(jí)語(yǔ)言,它離硬件比較遠(yuǎn),不宜用來編寫系統(tǒng)程序。1963年英國(guó)的劍橋大學(xué)推出了CPL(combinedprogramminglanguage)語(yǔ)言。CPL語(yǔ)言在ALGOL60的基礎(chǔ)上接近硬件一些,但規(guī)模比較大,難以實(shí)現(xiàn)。1967年英國(guó)劍橋大學(xué)的MatinRichards對(duì)CPL語(yǔ)言做了簡(jiǎn)化,推出了BCPL(basiccombinedprogramminglanguage)語(yǔ)言。1970年美國(guó)貝爾實(shí)驗(yàn)室的1.1C語(yǔ)言出現(xiàn)的歷史背景C語(yǔ)言是國(guó)際上廣泛流行的計(jì)算機(jī)5

KenThompson以BCPL語(yǔ)言為基礎(chǔ),又做了進(jìn)一步簡(jiǎn)化,設(shè)計(jì)出了很簡(jiǎn)單的而且很接近硬件的B語(yǔ)言(取BCPL的第一個(gè)字母),并用B語(yǔ)言寫了第一個(gè)UNIX操作系統(tǒng),在PDP7上實(shí)現(xiàn)。1971年在PDP11/20上實(shí)現(xiàn)了B語(yǔ)言,并寫了UNIX操作系統(tǒng)。但B語(yǔ)言過于簡(jiǎn)單,功能有限。KenThompson以BCPL語(yǔ)言為基礎(chǔ),又做了進(jìn)61972年至1973年間,貝爾實(shí)驗(yàn)室的D.M.Ritchie在B語(yǔ)言的基礎(chǔ)上設(shè)計(jì)出了C語(yǔ)言(取BCPL的第二個(gè)字母)。C語(yǔ)言既保持了BCPL和B語(yǔ)言的優(yōu)點(diǎn)(精練,接近硬件),又克服了它們的缺點(diǎn)(過于簡(jiǎn)單,數(shù)據(jù)無類型等)。最初的C語(yǔ)言只是為描述和實(shí)現(xiàn)UNIX操作系統(tǒng)提供一種工作語(yǔ)言而設(shè)計(jì)的。1973年,K.Thompson和D.M.Ritchie兩人合作把UNIX的90%以上用C改寫,即UNIX第5版。原來的UNIX操作系統(tǒng)是1969年由美國(guó)的貝爾實(shí)驗(yàn)室的K.Thompson和D.M.Ritchie開發(fā)成功的,是用匯編語(yǔ)言寫的。1972年至1973年間,貝爾實(shí)驗(yàn)室的D.M.Ritchie71972年至1973年間,貝爾實(shí)驗(yàn)室的D.M.Ritchie在B語(yǔ)言的基礎(chǔ)上設(shè)計(jì)出了C語(yǔ)言(取BCPL的第二個(gè)字母)。C語(yǔ)言既保持了BCPL和B語(yǔ)言的優(yōu)點(diǎn)(精練,接近硬件),又克服了它們的缺點(diǎn)(過于簡(jiǎn)單,數(shù)據(jù)無類型等)。最初的C語(yǔ)言只是為描述和實(shí)現(xiàn)UNIX操作系統(tǒng)提供一種工作語(yǔ)言而設(shè)計(jì)的。1973年,K.Thompson和D.M.Ritchie兩人合作把UNIX的90%以上用C改寫,即UNIX第5版。原來的UNIX操作系統(tǒng)是1969年由美國(guó)的貝爾實(shí)驗(yàn)室的K.Thompson和D.M.Ritchie開發(fā)成功的,是用匯編語(yǔ)言寫的。1972年至1973年間,貝爾實(shí)驗(yàn)室的D.M.Ritchie8后來,C語(yǔ)言多次做了改進(jìn),但主要還是在貝爾實(shí)驗(yàn)室內(nèi)部使用。直到1975年UNIX第6版公布后,C語(yǔ)言的突出優(yōu)點(diǎn)才引起人們的普遍注意。1977年出現(xiàn)了不依賴于具體機(jī)器的C語(yǔ)言編譯文本《可移植C語(yǔ)言編譯程序》,使C移植到其他機(jī)器時(shí)所需做的工作大大簡(jiǎn)化了,這也推動(dòng)了UNIX操作系統(tǒng)迅速地在各種機(jī)器上實(shí)現(xiàn)。例如VAX、AT&T等計(jì)算機(jī)系統(tǒng)都相繼開發(fā)了UNIX。隨著UNIX的日益廣泛使用,C語(yǔ)言也迅速得到推廣。C語(yǔ)言和UNIX可以說是一對(duì)孿生兄弟,在發(fā)展過程中相輔相成。1978年以后,C語(yǔ)言已先后移植到大、中、小、微型機(jī)上,已獨(dú)立于UNIX和PDP了?,F(xiàn)在C語(yǔ)言已風(fēng)靡全世界,成為世界上后來,C語(yǔ)言多次做了改進(jìn),但主要還是在貝爾實(shí)驗(yàn)室內(nèi)部使用。直9應(yīng)用最廣泛的幾種計(jì)算機(jī)語(yǔ)言之一。以1978年發(fā)表的UNIX第7版中的C編譯程序?yàn)榛A(chǔ),BrianW.Kernighan和DennisM.Ritchie(合稱K&R)合著了影響深遠(yuǎn)的名著《TheCProgrammingLanguage》,這本書中介紹的C語(yǔ)言成為后來廣泛使用的C語(yǔ)言版本的基礎(chǔ),它被稱為標(biāo)準(zhǔn)C。1983年,美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI)根據(jù)C語(yǔ)言問世以來各種版本對(duì)C的發(fā)展和擴(kuò)充,制定了新的標(biāo)準(zhǔn),稱為ANSIC。ANSIC比原來的標(biāo)準(zhǔn)C有了很大的發(fā)展。K&R在1988年修改了他們的經(jīng)典著作《TheCProgrammingLanguage》,按照ANSIC標(biāo)準(zhǔn)重新寫了該書。1987年,ANSI又公布了新標(biāo)準(zhǔn)——87ANSIC。應(yīng)用最廣泛的幾種計(jì)算機(jī)語(yǔ)言之一。以1978年發(fā)表的UNIX101990年,國(guó)際標(biāo)準(zhǔn)化組織ISO(InternationalStandardOrganization)接受87ANSIC為ISOC的標(biāo)準(zhǔn)(ISO9899—1990)。目前流行的C編譯系統(tǒng)都是以它為基礎(chǔ)的。本書的敘述基本上以ANSIC為基礎(chǔ)。目前廣泛流行的各種版本C語(yǔ)言編譯系統(tǒng)雖然基本部分是相同的,但也有一些不同。在微型機(jī)上使用的有MicrosoftC、TurboC、QuickC、BORLANDC等,它們的不同版本又略有差異。因此,讀者應(yīng)了解所用的計(jì)算機(jī)系統(tǒng)所配置的C編譯系統(tǒng)的特點(diǎn)和規(guī)定(可以參閱有關(guān)手冊(cè))。1990年,國(guó)際標(biāo)準(zhǔn)化組織ISO(International111.2C語(yǔ)言的特點(diǎn)一種語(yǔ)言之所以能存在和發(fā)展,并具有生命力,總是有其不同于(或優(yōu)于)其他語(yǔ)言的特點(diǎn)。C語(yǔ)言的主要特點(diǎn)如下。

(1)語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。C語(yǔ)言一共只有32個(gè)關(guān)鍵字,9種控制語(yǔ)句,程序書寫形式自由,主要用小寫字母表示,壓縮了一切不必要的成分。下面將C與PASCAL語(yǔ)言做一比較。

(2)運(yùn)算符豐富。C的運(yùn)算符包含的范圍很廣泛,共有34種運(yùn)算符。C把括號(hào)、賦值、強(qiáng)制類型轉(zhuǎn)換等都作為運(yùn)算符處理,從而使C的運(yùn)算類型極其豐富,表達(dá)式類型多樣化。靈活使用各種運(yùn)算符可以實(shí)現(xiàn)在其他高級(jí)語(yǔ)言中難以實(shí)現(xiàn)的運(yùn)算。1.2C語(yǔ)言的特點(diǎn)一種語(yǔ)言之所以能存在和發(fā)展,并具有生命12(3)數(shù)據(jù)結(jié)構(gòu)豐富,具有現(xiàn)代化語(yǔ)言的各種數(shù)據(jù)結(jié)構(gòu)。C的數(shù)據(jù)類型有整型、實(shí)型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等。能用來實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如鏈表、樹、棧等)的運(yùn)算。尤其是指針類型數(shù)據(jù),使用起來比PASCAL更為靈活、多樣。(4)具有結(jié)構(gòu)化的控制語(yǔ)句(如if…else語(yǔ)句、while語(yǔ)句、do…while語(yǔ)句、switch語(yǔ)句、for語(yǔ)句)。用函數(shù)作為程序的模塊單位,便于實(shí)現(xiàn)程序的模塊化。C是良好的結(jié)構(gòu)化語(yǔ)言,符合現(xiàn)代編程風(fēng)格的要求。(3)數(shù)據(jù)結(jié)構(gòu)豐富,具有現(xiàn)代化語(yǔ)言的各種數(shù)據(jù)結(jié)構(gòu)。C的數(shù)據(jù)13(5)語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。例如對(duì)數(shù)組下標(biāo)越界不做檢查,由程序編寫者自己保證程序的正確。對(duì)變量的類型使用比較靈活,例如整型數(shù)據(jù)與字符型數(shù)據(jù)可以通用。一般的高級(jí)語(yǔ)言語(yǔ)法檢查比較嚴(yán),能檢查出幾乎所有的語(yǔ)法錯(cuò)誤。而C語(yǔ)言允許程序編寫者有較大的自由度,因此,放寬了語(yǔ)法檢查。程序員應(yīng)當(dāng)仔細(xì)檢查程序,保證其正確,而不要過分依賴C編譯程序去查錯(cuò)?!跋拗啤迸c“靈活”是一對(duì)矛盾。限制嚴(yán)格,就失去靈活性;而強(qiáng)調(diào)靈活,就必然放松限制。一個(gè)不熟練的編程人員,編一個(gè)正確的C程序可能會(huì)比編一個(gè)其他高級(jí)語(yǔ)言程序難一些。也就是說,對(duì)用C語(yǔ)言的人,要求對(duì)程序設(shè)計(jì)更熟練一些。(5)語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。例如對(duì)數(shù)組下標(biāo)越14(6)C語(yǔ)言能進(jìn)行位(bit)操作,能實(shí)現(xiàn)匯編語(yǔ)言的大部分功能,可以直接對(duì)硬件進(jìn)行操作。因此C既具有高級(jí)語(yǔ)言的功能,又具有低級(jí)語(yǔ)言的許多功能,可用來寫系統(tǒng)軟件。C語(yǔ)言的這種雙重性,使它既是成功的系統(tǒng)描述語(yǔ)言,又是通用的程序設(shè)計(jì)語(yǔ)言。有人把C稱為“高級(jí)語(yǔ)言中的低級(jí)語(yǔ)言”或“中級(jí)語(yǔ)言”,意為兼有高級(jí)和低級(jí)語(yǔ)言的特點(diǎn)。按此觀點(diǎn)可將各語(yǔ)言分類如下:(6)C語(yǔ)言能進(jìn)行位(bit)操作,能實(shí)現(xiàn)匯編語(yǔ)言的大部15高級(jí):BASIC,FORTRAN,COBOL,PASCAL,Ada,Modula-2;中級(jí):C,FORTH,宏匯編;低級(jí):匯編語(yǔ)言一般仍習(xí)慣將C語(yǔ)言稱為高級(jí)語(yǔ)言,因?yàn)镃程序也要通過編譯、連接才能得到可執(zhí)行的目標(biāo)程序,這是和其他高級(jí)語(yǔ)言相同的。C的以上特點(diǎn),讀者現(xiàn)在也許還不能深刻理解,待學(xué)完C以后再回顧一下,就會(huì)有比較深的體會(huì)。我們從應(yīng)用的角度出發(fā)對(duì)C語(yǔ)言和其他傳統(tǒng)的高級(jí)語(yǔ)言作一簡(jiǎn)單比較。高級(jí):BASIC,FORTRAN,COBOL,PASCAL16從掌握語(yǔ)言的難易程度來看,C語(yǔ)言比其他語(yǔ)言難一些。BASIC是初學(xué)者入門的較好的語(yǔ)言,F(xiàn)ORTRAN也比較好掌握。對(duì)科學(xué)計(jì)算多用FORTRAN或PL/Ⅰ;對(duì)商業(yè)和管理等數(shù)據(jù)處理領(lǐng)域,用COBOL為宜。C語(yǔ)言雖然也可用于科學(xué)計(jì)算和管理領(lǐng)域,但并不理想,C的特長(zhǎng)不在這里。對(duì)操作系統(tǒng)和系統(tǒng)實(shí)用程序以及需要對(duì)硬件進(jìn)行操作的場(chǎng)合,用C語(yǔ)言明顯地優(yōu)越于其他高級(jí)語(yǔ)言,有的大型應(yīng)用軟件也用C語(yǔ)言編寫。從教學(xué)角度,由于PASCAL是世界上第一個(gè)結(jié)構(gòu)化語(yǔ)言,而曾被認(rèn)為是計(jì)算機(jī)專業(yè)的比較理想的教學(xué)語(yǔ)言。目前在數(shù)據(jù)結(jié)構(gòu)等課程中一般用PASCAL語(yǔ)言舉例。但PASCAL語(yǔ)言難以推廣到各實(shí)際應(yīng)用領(lǐng)域,從掌握語(yǔ)言的難易程度來看,C語(yǔ)言比其他語(yǔ)言難一些。BASIC17到目前為止基本上只是教學(xué)語(yǔ)言。C語(yǔ)言也是理想的結(jié)構(gòu)化語(yǔ)言,且描述能力強(qiáng),同樣適于教學(xué)。操作系統(tǒng)課程多結(jié)合UNIX講解,而UNIX與C不可分,因此,C語(yǔ)言已經(jīng)成為被廣泛使用的教學(xué)語(yǔ)言。C除了能用于教學(xué)外,還有廣泛的應(yīng)用領(lǐng)域,因此更有生命力。PASCAL和其他高級(jí)語(yǔ)言的設(shè)計(jì)目標(biāo)是通過嚴(yán)格的語(yǔ)法定義和檢查來保證程序的正確性,而C則是強(qiáng)調(diào)靈活性,使程序設(shè)計(jì)人員能有較大的自由度,以適應(yīng)寬廣的應(yīng)用面??傊?,C語(yǔ)言對(duì)程序員要求較高。程序員使用C語(yǔ)言編寫程序會(huì)感到限制少,靈活性大,功能強(qiáng),可以編寫出任何類型的程序?,F(xiàn)在,C語(yǔ)言已不僅用來編寫系統(tǒng)軟件,也用來編寫應(yīng)用軟件。學(xué)習(xí)和使用C的人已越來越多。到目前為止基本上只是教學(xué)語(yǔ)言。C語(yǔ)言也是理想的結(jié)構(gòu)化語(yǔ)言,181.3簡(jiǎn)單的C程序介紹下面先介紹幾個(gè)簡(jiǎn)單的C程序,然后從中分析C程序的特性。例1.1main(){printf("ThisisaCprogram.\n");}本程序的作用是輸出以下一行信息:Thisisacprogram.其中main表示“主函數(shù)”。每一個(gè)C程序都必須有一個(gè)main函數(shù)。函數(shù)體由大括弧{}括起來。本例中主函數(shù)內(nèi)只有一個(gè)輸出語(yǔ)句,printf是C語(yǔ)言中的輸出函數(shù)(詳見第4章)。雙引號(hào)(雙括號(hào))內(nèi)的字符串原樣輸出?!癨n”是換行符,即在輸出“Thisisacprogram.”后回車換行。語(yǔ)句最后有一分號(hào)。1.3簡(jiǎn)單的C程序介紹下面先介紹幾個(gè)簡(jiǎn)單的C程序,然后從19例1.2main()/*求兩數(shù)之和*/{inta,b,sum;/*這是定義變量*/a=123;b=456;/*以下3行為C語(yǔ)句*/sum=a+b;printf("sumis%d/n",sum);}本程序的作用是求兩個(gè)整數(shù)a和b之和sum。/*……*/表示注釋部分,為便于理解,我們用漢字表示注釋,當(dāng)然也可以用英語(yǔ)或漢字拼音作注釋。注釋只是給人看的,對(duì)編譯和運(yùn)行不起作用。注釋可以加在程序中任何位置。第2行是聲明部分,定義變量a和b,指定a和b為整型(int)變量。第3行是兩個(gè)賦值語(yǔ)句,使a和b的值分別為123和例1.220

456。第4行使sum的值為a+b,第5行中“%d”是輸入輸出的“格式字符串”,用來指定輸入輸出時(shí)的數(shù)據(jù)類型和格式(詳見第4章),“%d”表示“以十進(jìn)制整數(shù)形式輸出”。在執(zhí)行輸出時(shí),此位置上代以一個(gè)十進(jìn)制整數(shù)值。printf函數(shù)中括弧內(nèi)最右端sum是要輸出的變量,現(xiàn)在它的值為579(即123+456之值)。因此輸出一行信息為sumis579例1.3main()/*主函數(shù)*/{inta,b,c;/*聲明部分,定義變量*/scanf("%d,%d",&a,&b);/*輸入變量a和b的值*/456。第4行使sum的值為a+b,第5行中“%d”是輸入21c=max(a,b);/*調(diào)用max函數(shù),將得到的值賦給c*/printf("max=%d",c);/*輸出c的值*/}intmax(intx,inty)/*定義max函數(shù),函數(shù)值為整型,形式參數(shù)x,y為整型*/{intz;/*max函數(shù)中的聲明部分,定義本函數(shù)中用到的變量z為整型*/if(x>y)z=x;elsez=y;return(z);/*將z的值返回,通過max帶回調(diào)用處*/}c=max(a,b);/*調(diào)用max函數(shù),將得到的值賦22本程序包括兩個(gè)函數(shù):主函數(shù)main和被調(diào)用的函數(shù)max。max函數(shù)的作用是將x和y中較大者的值賦給變量z。return語(yǔ)句將z的值返回給主調(diào)函數(shù)main。返回值是通過函數(shù)名max帶回到main函數(shù)的調(diào)用處。main函數(shù)中的scanf是“輸入函數(shù)”的名字(scanf和printf都是C系統(tǒng)提供的標(biāo)準(zhǔn)輸入輸出函數(shù))。程序中scanf函數(shù)的作用是輸入a和b的值。&a和&b中的“&”的含義是“取地址”,此scanf函數(shù)的作用是將兩個(gè)數(shù)值分別輸入到變量a和b的地址所標(biāo)志的單元中,也就是輸入給變量a和b。這種形式是與其他語(yǔ)言不同的。它相當(dāng)于BASIC語(yǔ)言中的INPUTa,b或PASCAL語(yǔ)言中的Read(a,b)。&a和&b前面的“%d,%d”的含義與前相同,本程序包括兩個(gè)函數(shù):主函數(shù)main和被調(diào)用的函數(shù)max。ma23只是現(xiàn)在用于“輸入”。它指定輸入的兩個(gè)數(shù)據(jù)按十進(jìn)制整數(shù)形式輸入。關(guān)于scanf函數(shù)詳見第4章。main函數(shù)中第4行為調(diào)用max函數(shù),在調(diào)用時(shí)將實(shí)際參數(shù)a和b的值分別傳送給max函數(shù)中的形式參數(shù)x和y。經(jīng)過執(zhí)行max函數(shù)得到一個(gè)返回值(即max函數(shù)中變量z的值),把這個(gè)值賦給變量c。然后輸出c的值。printf函數(shù)中雙引號(hào)內(nèi)的“max=%d”,在輸出時(shí),其中“%d”將由c的值取代之,“max=”原樣輸出。程序運(yùn)行情況如下:8,5(輸入8和5給a和b)max=8(輸出c的值)只是現(xiàn)在用于“輸入”。它指定輸入的兩個(gè)數(shù)據(jù)按十進(jìn)制整數(shù)形式24本例用到了函數(shù)調(diào)用、實(shí)際參數(shù)和形式參數(shù)等概念,我們只做了很簡(jiǎn)單的解釋。讀者如對(duì)此不大理解,可以先不予以深究,在學(xué)到以后有關(guān)章節(jié)時(shí),問題自然迎刃而解。在此介紹此例子,無非是使讀者對(duì)C程序的組成和形式有一個(gè)初步的了解。通過以上幾個(gè)例子,可以看到:(1)C程序是由函數(shù)構(gòu)成的。一個(gè)C源程序至少包含一個(gè)main函數(shù),也可以包含一個(gè)main函數(shù)和若干個(gè)其他函數(shù)。因此,函數(shù)是C程序的基本單位。被調(diào)用的函數(shù)可以是系統(tǒng)提供的庫(kù)函數(shù)(例如printf和scanf函數(shù)),也可以是用戶根據(jù)需要自本例用到了函數(shù)調(diào)用、實(shí)際參數(shù)和形式參數(shù)等概念,我們只做了很簡(jiǎn)25

己編制設(shè)計(jì)的函數(shù)(例如,例1.3中的max函數(shù))。C的函數(shù)相當(dāng)于其他語(yǔ)言中的子程序,用函數(shù)來實(shí)現(xiàn)特定的功能。程序中的全部工作都是由各個(gè)函數(shù)分別完成的。編寫C程序就是編寫一個(gè)個(gè)函數(shù)。C的函數(shù)庫(kù)十分豐富,ANSIC建議的標(biāo)準(zhǔn)庫(kù)函數(shù)中包括100多個(gè)函數(shù),TurboC和MSC4.0提供300多個(gè)庫(kù)函數(shù)。C的這種特點(diǎn)使得容易實(shí)現(xiàn)程序的模塊化。(2)一個(gè)函數(shù)由兩部分組成:①函數(shù)的首部,即函數(shù)的第一行。包括函數(shù)名、函數(shù)類型、函數(shù)屬性、函數(shù)參數(shù)(形參)名、參數(shù)類型。例如,例1.3中的max函數(shù)的首部為intmax(intx,

inty)↓↓↓↓↓↓函數(shù)類型函數(shù)名函數(shù)參數(shù)類型函數(shù)參數(shù)名函數(shù)參數(shù)類型函數(shù)參數(shù)名己編制設(shè)計(jì)的函數(shù)(例如,例1.3中的max函數(shù))。C的函26一個(gè)函數(shù)名后面必須跟一對(duì)圓括弧,函數(shù)參數(shù)可以沒有,如main()。②函數(shù)體,即函數(shù)首部下面的大括弧{……}內(nèi)的部分。如果一個(gè)函數(shù)內(nèi)有多個(gè)大括弧,則最外層的一對(duì){}為函數(shù)體的范圍。函數(shù)體一般包括:·聲明部分:在這部分中定義所用到的變量,如例1.3中main函數(shù)中的“inta,b,c;”。在第8章中還將會(huì)看到,在聲明部分中要對(duì)所調(diào)用的函數(shù)進(jìn)行聲明。執(zhí)行部分:由若干個(gè)語(yǔ)句組成。一個(gè)函數(shù)名后面必須跟一對(duì)圓括弧,函數(shù)參數(shù)可以沒有,如mai27當(dāng)然,在某些情況下也可以沒有聲明部分(例如,例1.1)。甚至可以既無聲明部分,也無執(zhí)行部分。如:dump(){}它是一個(gè)空函數(shù),什么也不干,但這是合法的。(3)一個(gè)C程序總是從main函數(shù)開始執(zhí)行的,而不論main函數(shù)在整個(gè)程序中的位置如何(main函數(shù)可以放在程序最前頭,也可以放在程序最后,或在一些函數(shù)之前,在另一些函數(shù)之后)。(4)C程序書寫格式自由,一行內(nèi)可以寫幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句可以分寫在多行上。C程序沒有行號(hào),當(dāng)然,在某些情況下也可以沒有聲明部分(例如,例1.1)。甚至28也不像FORTRAN或COBOL那樣嚴(yán)格規(guī)定書寫格式(語(yǔ)句必須從某一列開始書寫)。(5)每個(gè)語(yǔ)句和數(shù)據(jù)定義的最后必須有一個(gè)分號(hào)。分號(hào)是C語(yǔ)句的必要組成部分。例如:c=a+b;分號(hào)不可少。即使是程序中最后一個(gè)語(yǔ)句也應(yīng)包含分號(hào)(這是和PASCAL語(yǔ)言不同的)。(6)C語(yǔ)言本身沒有輸入輸出語(yǔ)句。輸入和輸出的操作是由庫(kù)函數(shù)scanf和printf等函數(shù)來完成的。C對(duì)輸入輸出實(shí)行“函數(shù)化”。由于輸入輸出操作牽涉到具體的計(jì)算機(jī)設(shè)備,把輸入輸出操作放在函數(shù)中處理,就可以使C語(yǔ)言本身的規(guī)模較小,也不像FORTRAN或COBOL那樣嚴(yán)格規(guī)定書寫格式(語(yǔ)句29編譯程序簡(jiǎn)單,很容易在各種機(jī)器上實(shí)現(xiàn),程序具有可移植性。當(dāng)然,不同的C語(yǔ)言系統(tǒng)需要對(duì)函數(shù)庫(kù)中的函數(shù)作不同的處理。不同的C系統(tǒng)除了提供函數(shù)庫(kù)中的標(biāo)準(zhǔn)函數(shù)外,還按照硬件的情況提供一些專門的函數(shù)。因此不同的系統(tǒng)所提供的函數(shù)個(gè)數(shù)和功能是有所不同的。(7)可以用/*……*/對(duì)C程序中的任何部分作注釋。一個(gè)好的、有使用價(jià)值的源程序都應(yīng)當(dāng)加上必要的注釋,以增加程序的可讀性。編譯程序簡(jiǎn)單,很容易在各種機(jī)器上實(shí)現(xiàn),程序具有可移植性。當(dāng)301.4C程序的上機(jī)步驟我們已經(jīng)看到了一些用C語(yǔ)言編寫的程序。為了使計(jì)算機(jī)能按照人們的意志進(jìn)行工作,必須根據(jù)問題的要求,編寫出相應(yīng)的程序。所謂程序,就是一組計(jì)算機(jī)能識(shí)別和執(zhí)行的指令。每一條指令使計(jì)算機(jī)執(zhí)行特定的操作。程序可以用高級(jí)語(yǔ)言(例如QBASIC,F(xiàn)ORTRAN,PASCAL,C等)編寫。用高級(jí)語(yǔ)言編寫的程序稱為“源程序”(sourceprogram)。從根本上說,計(jì)算機(jī)只能識(shí)別和執(zhí)行由0和1組成的二進(jìn)制的指令,而不能識(shí)別和執(zhí)行用高級(jí)語(yǔ)言寫的指令。為了使計(jì)算機(jī)能執(zhí)行高級(jí)語(yǔ)言源程序,必須先用一種稱為“編譯程序”的軟件,把源程序翻譯成二進(jìn)制形式的“目標(biāo)程序”,然后將該目標(biāo)程序與系統(tǒng)的函數(shù)庫(kù)和其他目標(biāo)程序連接起來,形成可執(zhí)行的目標(biāo)程序。1.4C程序的上機(jī)步驟我們已經(jīng)看到了一些用C語(yǔ)言編寫的程31圖1.1圖1.132在編好一個(gè)C源程序后,如何上機(jī)運(yùn)行呢?在紙上寫好一個(gè)程序后,要經(jīng)過以下幾個(gè)步驟:上機(jī)輸入與編輯源程序?qū)υ闯绦蜻M(jìn)行編譯與庫(kù)函數(shù)連接運(yùn)行目標(biāo)程序這樣幾個(gè)步驟。以上過程如圖1.1所示。其中實(shí)線表示操作流程,虛線表示文件的輸入輸出。例如,編輯后得到一個(gè)源程序文件f.c,然后在進(jìn)行編譯時(shí)再將源程序文件f.c輸入,經(jīng)過編譯得到目標(biāo)程序文件f.obj,再將目標(biāo)程序文件f.obj輸入內(nèi)存,與系統(tǒng)提供的庫(kù)函數(shù)等連接,得到可執(zhí)行的目標(biāo)程序文件f.exe,最后把f.exe調(diào)入內(nèi)存并使之運(yùn)行。在了解了C語(yǔ)言的初步知識(shí)后,讀者最好上機(jī)運(yùn)行一個(gè)C程序,以建立對(duì)C程序的初步認(rèn)識(shí)。在編好一個(gè)C源程序后,如何上機(jī)運(yùn)行呢?在紙上寫好一個(gè)程序后33下面分別就三種不同的環(huán)境下運(yùn)行C程序作一簡(jiǎn)單介紹。1.用TurboC運(yùn)行C程序的步驟TurboC是在微機(jī)上廣泛使用的編譯程序。它具有方便、直觀、易用的界面和豐富的庫(kù)函數(shù)。它向用戶提供一個(gè)集成環(huán)境,把程序的編輯、編譯、連接和運(yùn)行等操作全部集中在一個(gè)界面上進(jìn)行,使用十分方便。為了能使用TurboC,必須先將TurboC編譯程序裝入磁盤的某一目錄下,例如放在C盤根目錄下一級(jí)TC子目錄下。下面分別就三種不同的環(huán)境下運(yùn)行C程序作一簡(jiǎn)單介紹。34圖1.2(1)調(diào)用TurboC程序。如果用戶的當(dāng)前目錄是TurboC編譯程序所在的子目錄(例如TC子目錄),只需從鍵盤鍵入“tc”命令即可:圖1.2(1)調(diào)用TurboC程序。如果用戶的當(dāng)前目錄35C:\TC>tc屏幕上出現(xiàn)TurboC集成環(huán)境,見圖1.2所示。從圖1.2可以看到在集成環(huán)境的上部,有一行“主菜單”,其中包括下面8個(gè)菜單項(xiàng):FileEditRunCompileProjectOptionDebugbreak/watch用戶可以通過以上菜單項(xiàng)來選擇使用TurboC集成環(huán)境所提供的TurboC的各項(xiàng)主要功能。以上8個(gè)菜單項(xiàng)分別代表:文件操作、編輯、運(yùn)行、編譯、項(xiàng)目文件、選項(xiàng)、調(diào)試、中斷/觀察等功能。用鍵盤上的“←”和“→”鍵可以選擇菜單條中所需要的菜單項(xiàng),被選中的項(xiàng)以“反相”圖1.3形式顯示C:\TC>tc36

(例如主菜單中的各項(xiàng)原來以白底黑字顯示,被選中時(shí)改為以黑底白字顯示)。此時(shí)若按回車鍵,就會(huì)出現(xiàn)一個(gè)下拉菜單。例如在選中“File”菜單并按回車鍵后,屏幕上“File”下面出現(xiàn)下拉菜單,見圖1.3所示。它是一個(gè)子菜單,提供多項(xiàng)選擇??梢杂谩啊辨I選擇所需要的項(xiàng)。例如選擇“New”處,并按回車鍵,表示要建立一個(gè)新的C源程序。

圖1.3(例如主菜單中的各項(xiàng)原來以白底黑字顯示,被選中時(shí)改為以黑底37如果選擇“Load”,并按回車鍵,表示要調(diào)入一個(gè)已有的源文件,此時(shí)屏幕上出現(xiàn)一個(gè)對(duì)話框(見圖1.4)。要求你輸入該文件的名字。用戶可輸入該文件名,例如:tc1.c,如果已存在此文件,則系統(tǒng)會(huì)將此文件調(diào)入內(nèi)存并顯示在屏幕上。此時(shí)自動(dòng)轉(zhuǎn)為編輯(Edit)狀態(tài)。如果原來不存在此文件名,則系統(tǒng)會(huì)建立一個(gè)以指定的名字命名的新文件。圖1.4如果選擇“Load”,并按回車鍵,表示要調(diào)入一個(gè)已有的38(2)編輯源文件。在編輯(Edit)狀態(tài)下可以根據(jù)需要輸入或修改源程序。(3)編譯源程序。選擇“Compile”菜單并在其下拉菜單中選擇“CompiletoOBJ”,則進(jìn)行編譯,得到一個(gè)后綴為.obj的目標(biāo)程序(為方便起見,在一般書刊中,以上菜單的選擇以“Compile/CompiletoOBJ”表示)。然后再選菜單“Compile/LinkEXEfile”,進(jìn)行連接操作,可得到一個(gè)后綴為.exe的可執(zhí)行文件。也可以將編譯和連接合為一個(gè)步驟進(jìn)行。選菜單“Compile/MakeEXEfile”或按“F9”鍵,即可一次完成編譯和連接。在屏幕上會(huì)顯示編譯或連接時(shí)有無錯(cuò)誤和有幾個(gè)錯(cuò)誤,見圖1.5所示。此時(shí)按任何一個(gè)鍵,圖1.5所顯示的“編譯信息框”會(huì)(2)編輯源文件。在編輯(Edit)狀態(tài)下可以根據(jù)需要輸39圖1.5

消失,屏幕上會(huì)恢復(fù)顯示源程序,光標(biāo)停留在出錯(cuò)之處。在屏幕的下半部分顯示出有錯(cuò)誤的行和錯(cuò)誤的原因。根據(jù)此信息修改源程序。修改完畢認(rèn)為無錯(cuò)后,再按“F9”,再次進(jìn)行編譯和連接,如此反復(fù)進(jìn)行到不顯示出錯(cuò)為止。圖1.5消失,屏幕上會(huì)恢復(fù)顯示源程序,光標(biāo)停留在出錯(cuò)之40(4)執(zhí)行程序。按“F10”鍵,在窗口上部的主菜單中某一項(xiàng)處出現(xiàn)“反相”顯示(黑色亮塊)。FileEditRunCompileProjectOptionDebugBreak/watch用“→”鍵將亮塊移到“Run”,按回車鍵,在其下拉菜單中選擇“Run”項(xiàng),或直接按Ctrl+F9鍵,系統(tǒng)就會(huì)執(zhí)行已編譯好的目標(biāo)文件。此時(shí),TC集成環(huán)境窗口消失,屏幕上顯示出程序運(yùn)行時(shí)輸出的結(jié)果。如果程序需要輸入數(shù)據(jù)(如例1.3),則應(yīng)在此時(shí),從鍵盤輸入所需數(shù)據(jù),然后程序會(huì)接著執(zhí)行,輸出結(jié)果。如果發(fā)現(xiàn)運(yùn)行結(jié)果不對(duì),要重新修改源程序,可以再按“F10”鍵,并用“←”使亮塊移到“Edit”處,(4)執(zhí)行程序。按“F10”鍵,在窗口上部的主菜單中某41

按回車鍵,即進(jìn)入編輯狀態(tài),可以根據(jù)需要修改源程序,并重復(fù)上述(2),(3),(4)步,直到得到正確結(jié)果為止。(5)可以用“Alt”和“X”鍵(同時(shí)按此兩鍵),脫離TurboC,回到DOS命令狀態(tài)。此時(shí),可以用DOS命令顯示源程序和運(yùn)行程序:C>TYPEtc1.c(列出源程序清單)C>tc1(執(zhí)行目標(biāo)程序tc1.exe)如果想再修改源程序,可以重新執(zhí)行步驟(1),并輸入源程序文件名即可。按回車鍵,即進(jìn)入編輯狀態(tài),可以根據(jù)需要修改源程序,并重422.在UNIX操作系統(tǒng)下運(yùn)行C程序的步驟(1)用編輯程序(如UNIX系統(tǒng)的文本行編輯程序ed,或屏幕編輯程序vi)將源程序輸入計(jì)算機(jī),經(jīng)修改認(rèn)為無誤后,存入文件系統(tǒng)。設(shè)用戶將源文件定名為f.c(C源程序的后綴一般定為“.c”)。(2)編譯。調(diào)用C編譯程序cc對(duì)源文件進(jìn)行編譯??纱蛉朊?ccf.c如果在編譯過程中發(fā)現(xiàn)源程序有語(yǔ)法錯(cuò)誤,則系統(tǒng)會(huì)輸出“出錯(cuò)信息”,告訴用戶第幾行有什么樣的錯(cuò)誤。用戶應(yīng)重新調(diào)用編輯程序,修改后再進(jìn)行編譯。如此直到編譯通過為止。編譯時(shí)先2.在UNIX操作系統(tǒng)下運(yùn)行C程序的步驟43生成一個(gè)匯編語(yǔ)言程序(即將C源程序翻譯成為一個(gè)匯編語(yǔ)言程序),然后由編譯程序再將匯編語(yǔ)言程序翻譯成機(jī)器指令程序,即目標(biāo)程序。目標(biāo)程序的文件名與相應(yīng)的源程序同名,但后綴為“.o”(表示它是目標(biāo)文件),上述源文件f.c經(jīng)編譯后得到目標(biāo)程序f.o。(3)連接。將目標(biāo)程序和庫(kù)函數(shù)或其他目標(biāo)程序連接成可執(zhí)行的目標(biāo)程序。在UNIX系統(tǒng)下,連接是由cc自動(dòng)完成的。最后得到可執(zhí)行文件,文件名由系統(tǒng)自動(dòng)確定為a.out。如果不想用系統(tǒng)定的文件名a.out,也可以在編譯時(shí)自己指定可執(zhí)行文件名。例如想指定為f.out,生成一個(gè)匯編語(yǔ)言程序(即將C源程序翻譯成為一個(gè)匯編語(yǔ)言程序44可以在編譯時(shí)打入以下命令:cc-of.outf.c它的作用是將源程序f.c編譯成可執(zhí)行程序,文件名為f.out。(4)執(zhí)行程序。只需輸入可執(zhí)行文件名即可。例如:a.out(系統(tǒng)指定的文件名)或f.out(用戶指定的文件名)3.在DOS下用MicrosoftC6.0編譯程序運(yùn)行C程序的步驟MicrosoftC是微軟公司為IBM系列微機(jī)開發(fā)的C編譯系統(tǒng)。MSC6.0版本提供了多個(gè)庫(kù)函數(shù)。老版本的MSC采用基于DOS平臺(tái)的命令行方式。MSC6.0增加了基于鼠標(biāo)和窗口的“程序員工作臺(tái)”可以在編譯時(shí)打入以下命令:45(programmer'sworkbench,縮寫為PWB),它也是一個(gè)集成環(huán)境。MSC也是人們常用的C編譯系統(tǒng)之一。目前,大多數(shù)使用MSC的人習(xí)慣用命令行方式。因此我們?cè)谶@里只簡(jiǎn)單地介紹命令行方式的用法。(1)編輯C源程序??梢杂萌魏稳聊痪庉嬒到y(tǒng)輸入和編輯源程序。假設(shè)已輸入和編輯好的源文件名為a1.c。(2)編譯和連接。MSC提供了一個(gè)功能很強(qiáng)的CL命令,可一次完成程序的編譯和連接。CL是Compile和Link的第一個(gè)字母。用法如下:

CLa1.c(對(duì)源程序a1.c進(jìn)行編譯和連接)(programmer'sworkbench,縮寫為46如果在編譯和連接時(shí)出現(xiàn)“出錯(cuò)信息”,則需要重新編輯(修改)源程序。編譯和連接完成后,產(chǎn)生一個(gè)可執(zhí)行文件a1.exe。(3)執(zhí)行程序。只需輸入可執(zhí)行文件名:a1即可得到運(yùn)行結(jié)果。以上步驟只需上機(jī)試一下,即可明白。如果在編譯和連接時(shí)出現(xiàn)“出錯(cuò)信息”,則需要重新編輯(修改)47習(xí)題

1.1請(qǐng)根據(jù)自己的認(rèn)識(shí),寫出C語(yǔ)言的主要特點(diǎn)。1.2C語(yǔ)言的主要用途是什么?它和其他高級(jí)語(yǔ)言有什么異同?1.3寫出一個(gè)C程序的構(gòu)成。1.4C語(yǔ)言以函數(shù)為程序的基本單位,有什么好處?1.5請(qǐng)參照本章例題,編寫一個(gè)C程序,輸出以下信息:習(xí)題

48******************************Verygood!******************************1.6編寫一個(gè)C程序,輸入a、b、c3個(gè)值,輸出其中最大者。1.7上機(jī)運(yùn)行本章3個(gè)例題,熟悉所用系統(tǒng)的上機(jī)方法與步驟。1.8上機(jī)運(yùn)行本章習(xí)題1.5和1.6。******************************49C程序設(shè)計(jì)

(第二版)新世紀(jì)計(jì)算機(jī)基礎(chǔ)教育叢書叢書主編譚浩強(qiáng)C程序設(shè)計(jì)

(第二版)新世紀(jì)計(jì)算機(jī)基礎(chǔ)教育叢書叢書50總目錄第1章C語(yǔ)言概述第2章程序的靈魂——算法第3章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式第4章最簡(jiǎn)單的C程序設(shè)計(jì)——順序程序設(shè)計(jì)第5章選擇結(jié)構(gòu)程序設(shè)計(jì)第6章循環(huán)控制第7章數(shù)組第8章函數(shù)總目錄第1章C語(yǔ)言概述51第9章預(yù)處理命令第10章指針第11章結(jié)構(gòu)體與共用體第12章位運(yùn)算第13章文件第14章C++對(duì)C的擴(kuò)充第15章C++的面向?qū)ο蠡A(chǔ)第16章常見錯(cuò)誤和程序調(diào)試第9章預(yù)處理命令52第1章

C語(yǔ)言概述1.1C語(yǔ)言出現(xiàn)的歷史背景1.2C語(yǔ)言的特點(diǎn)1.3

簡(jiǎn)單的C程序介紹1.4C程序的上機(jī)步驟1.5

習(xí)題第1章C語(yǔ)言概述1.1C語(yǔ)言出現(xiàn)的歷史背景531.1C語(yǔ)言出現(xiàn)的歷史背景C語(yǔ)言是國(guó)際上廣泛流行的計(jì)算機(jī)高級(jí)語(yǔ)言,既可用來寫系統(tǒng)軟件,也可用來寫應(yīng)用軟件。C語(yǔ)言是在B語(yǔ)言的基礎(chǔ)上發(fā)展起來的,它的根源可以追溯到ALGOL60。1960年出現(xiàn)的ALGOL60是一種面向問題的高級(jí)語(yǔ)言,它離硬件比較遠(yuǎn),不宜用來編寫系統(tǒng)程序。1963年英國(guó)的劍橋大學(xué)推出了CPL(combinedprogramminglanguage)語(yǔ)言。CPL語(yǔ)言在ALGOL60的基礎(chǔ)上接近硬件一些,但規(guī)模比較大,難以實(shí)現(xiàn)。1967年英國(guó)劍橋大學(xué)的MatinRichards對(duì)CPL語(yǔ)言做了簡(jiǎn)化,推出了BCPL(basiccombinedprogramminglanguage)語(yǔ)言。1970年美國(guó)貝爾實(shí)驗(yàn)室的1.1C語(yǔ)言出現(xiàn)的歷史背景C語(yǔ)言是國(guó)際上廣泛流行的計(jì)算機(jī)54

KenThompson以BCPL語(yǔ)言為基礎(chǔ),又做了進(jìn)一步簡(jiǎn)化,設(shè)計(jì)出了很簡(jiǎn)單的而且很接近硬件的B語(yǔ)言(取BCPL的第一個(gè)字母),并用B語(yǔ)言寫了第一個(gè)UNIX操作系統(tǒng),在PDP7上實(shí)現(xiàn)。1971年在PDP11/20上實(shí)現(xiàn)了B語(yǔ)言,并寫了UNIX操作系統(tǒng)。但B語(yǔ)言過于簡(jiǎn)單,功能有限。KenThompson以BCPL語(yǔ)言為基礎(chǔ),又做了進(jìn)551972年至1973年間,貝爾實(shí)驗(yàn)室的D.M.Ritchie在B語(yǔ)言的基礎(chǔ)上設(shè)計(jì)出了C語(yǔ)言(取BCPL的第二個(gè)字母)。C語(yǔ)言既保持了BCPL和B語(yǔ)言的優(yōu)點(diǎn)(精練,接近硬件),又克服了它們的缺點(diǎn)(過于簡(jiǎn)單,數(shù)據(jù)無類型等)。最初的C語(yǔ)言只是為描述和實(shí)現(xiàn)UNIX操作系統(tǒng)提供一種工作語(yǔ)言而設(shè)計(jì)的。1973年,K.Thompson和D.M.Ritchie兩人合作把UNIX的90%以上用C改寫,即UNIX第5版。原來的UNIX操作系統(tǒng)是1969年由美國(guó)的貝爾實(shí)驗(yàn)室的K.Thompson和D.M.Ritchie開發(fā)成功的,是用匯編語(yǔ)言寫的。1972年至1973年間,貝爾實(shí)驗(yàn)室的D.M.Ritchie561972年至1973年間,貝爾實(shí)驗(yàn)室的D.M.Ritchie在B語(yǔ)言的基礎(chǔ)上設(shè)計(jì)出了C語(yǔ)言(取BCPL的第二個(gè)字母)。C語(yǔ)言既保持了BCPL和B語(yǔ)言的優(yōu)點(diǎn)(精練,接近硬件),又克服了它們的缺點(diǎn)(過于簡(jiǎn)單,數(shù)據(jù)無類型等)。最初的C語(yǔ)言只是為描述和實(shí)現(xiàn)UNIX操作系統(tǒng)提供一種工作語(yǔ)言而設(shè)計(jì)的。1973年,K.Thompson和D.M.Ritchie兩人合作把UNIX的90%以上用C改寫,即UNIX第5版。原來的UNIX操作系統(tǒng)是1969年由美國(guó)的貝爾實(shí)驗(yàn)室的K.Thompson和D.M.Ritchie開發(fā)成功的,是用匯編語(yǔ)言寫的。1972年至1973年間,貝爾實(shí)驗(yàn)室的D.M.Ritchie57后來,C語(yǔ)言多次做了改進(jìn),但主要還是在貝爾實(shí)驗(yàn)室內(nèi)部使用。直到1975年UNIX第6版公布后,C語(yǔ)言的突出優(yōu)點(diǎn)才引起人們的普遍注意。1977年出現(xiàn)了不依賴于具體機(jī)器的C語(yǔ)言編譯文本《可移植C語(yǔ)言編譯程序》,使C移植到其他機(jī)器時(shí)所需做的工作大大簡(jiǎn)化了,這也推動(dòng)了UNIX操作系統(tǒng)迅速地在各種機(jī)器上實(shí)現(xiàn)。例如VAX、AT&T等計(jì)算機(jī)系統(tǒng)都相繼開發(fā)了UNIX。隨著UNIX的日益廣泛使用,C語(yǔ)言也迅速得到推廣。C語(yǔ)言和UNIX可以說是一對(duì)孿生兄弟,在發(fā)展過程中相輔相成。1978年以后,C語(yǔ)言已先后移植到大、中、小、微型機(jī)上,已獨(dú)立于UNIX和PDP了?,F(xiàn)在C語(yǔ)言已風(fēng)靡全世界,成為世界上后來,C語(yǔ)言多次做了改進(jìn),但主要還是在貝爾實(shí)驗(yàn)室內(nèi)部使用。直58應(yīng)用最廣泛的幾種計(jì)算機(jī)語(yǔ)言之一。以1978年發(fā)表的UNIX第7版中的C編譯程序?yàn)榛A(chǔ),BrianW.Kernighan和DennisM.Ritchie(合稱K&R)合著了影響深遠(yuǎn)的名著《TheCProgrammingLanguage》,這本書中介紹的C語(yǔ)言成為后來廣泛使用的C語(yǔ)言版本的基礎(chǔ),它被稱為標(biāo)準(zhǔn)C。1983年,美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI)根據(jù)C語(yǔ)言問世以來各種版本對(duì)C的發(fā)展和擴(kuò)充,制定了新的標(biāo)準(zhǔn),稱為ANSIC。ANSIC比原來的標(biāo)準(zhǔn)C有了很大的發(fā)展。K&R在1988年修改了他們的經(jīng)典著作《TheCProgrammingLanguage》,按照ANSIC標(biāo)準(zhǔn)重新寫了該書。1987年,ANSI又公布了新標(biāo)準(zhǔn)——87ANSIC。應(yīng)用最廣泛的幾種計(jì)算機(jī)語(yǔ)言之一。以1978年發(fā)表的UNIX591990年,國(guó)際標(biāo)準(zhǔn)化組織ISO(InternationalStandardOrganization)接受87ANSIC為ISOC的標(biāo)準(zhǔn)(ISO9899—1990)。目前流行的C編譯系統(tǒng)都是以它為基礎(chǔ)的。本書的敘述基本上以ANSIC為基礎(chǔ)。目前廣泛流行的各種版本C語(yǔ)言編譯系統(tǒng)雖然基本部分是相同的,但也有一些不同。在微型機(jī)上使用的有MicrosoftC、TurboC、QuickC、BORLANDC等,它們的不同版本又略有差異。因此,讀者應(yīng)了解所用的計(jì)算機(jī)系統(tǒng)所配置的C編譯系統(tǒng)的特點(diǎn)和規(guī)定(可以參閱有關(guān)手冊(cè))。1990年,國(guó)際標(biāo)準(zhǔn)化組織ISO(International601.2C語(yǔ)言的特點(diǎn)一種語(yǔ)言之所以能存在和發(fā)展,并具有生命力,總是有其不同于(或優(yōu)于)其他語(yǔ)言的特點(diǎn)。C語(yǔ)言的主要特點(diǎn)如下。

(1)語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。C語(yǔ)言一共只有32個(gè)關(guān)鍵字,9種控制語(yǔ)句,程序書寫形式自由,主要用小寫字母表示,壓縮了一切不必要的成分。下面將C與PASCAL語(yǔ)言做一比較。

(2)運(yùn)算符豐富。C的運(yùn)算符包含的范圍很廣泛,共有34種運(yùn)算符。C把括號(hào)、賦值、強(qiáng)制類型轉(zhuǎn)換等都作為運(yùn)算符處理,從而使C的運(yùn)算類型極其豐富,表達(dá)式類型多樣化。靈活使用各種運(yùn)算符可以實(shí)現(xiàn)在其他高級(jí)語(yǔ)言中難以實(shí)現(xiàn)的運(yùn)算。1.2C語(yǔ)言的特點(diǎn)一種語(yǔ)言之所以能存在和發(fā)展,并具有生命61(3)數(shù)據(jù)結(jié)構(gòu)豐富,具有現(xiàn)代化語(yǔ)言的各種數(shù)據(jù)結(jié)構(gòu)。C的數(shù)據(jù)類型有整型、實(shí)型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等。能用來實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如鏈表、樹、棧等)的運(yùn)算。尤其是指針類型數(shù)據(jù),使用起來比PASCAL更為靈活、多樣。(4)具有結(jié)構(gòu)化的控制語(yǔ)句(如if…else語(yǔ)句、while語(yǔ)句、do…while語(yǔ)句、switch語(yǔ)句、for語(yǔ)句)。用函數(shù)作為程序的模塊單位,便于實(shí)現(xiàn)程序的模塊化。C是良好的結(jié)構(gòu)化語(yǔ)言,符合現(xiàn)代編程風(fēng)格的要求。(3)數(shù)據(jù)結(jié)構(gòu)豐富,具有現(xiàn)代化語(yǔ)言的各種數(shù)據(jù)結(jié)構(gòu)。C的數(shù)據(jù)62(5)語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。例如對(duì)數(shù)組下標(biāo)越界不做檢查,由程序編寫者自己保證程序的正確。對(duì)變量的類型使用比較靈活,例如整型數(shù)據(jù)與字符型數(shù)據(jù)可以通用。一般的高級(jí)語(yǔ)言語(yǔ)法檢查比較嚴(yán),能檢查出幾乎所有的語(yǔ)法錯(cuò)誤。而C語(yǔ)言允許程序編寫者有較大的自由度,因此,放寬了語(yǔ)法檢查。程序員應(yīng)當(dāng)仔細(xì)檢查程序,保證其正確,而不要過分依賴C編譯程序去查錯(cuò)?!跋拗啤迸c“靈活”是一對(duì)矛盾。限制嚴(yán)格,就失去靈活性;而強(qiáng)調(diào)靈活,就必然放松限制。一個(gè)不熟練的編程人員,編一個(gè)正確的C程序可能會(huì)比編一個(gè)其他高級(jí)語(yǔ)言程序難一些。也就是說,對(duì)用C語(yǔ)言的人,要求對(duì)程序設(shè)計(jì)更熟練一些。(5)語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。例如對(duì)數(shù)組下標(biāo)越63(6)C語(yǔ)言能進(jìn)行位(bit)操作,能實(shí)現(xiàn)匯編語(yǔ)言的大部分功能,可以直接對(duì)硬件進(jìn)行操作。因此C既具有高級(jí)語(yǔ)言的功能,又具有低級(jí)語(yǔ)言的許多功能,可用來寫系統(tǒng)軟件。C語(yǔ)言的這種雙重性,使它既是成功的系統(tǒng)描述語(yǔ)言,又是通用的程序設(shè)計(jì)語(yǔ)言。有人把C稱為“高級(jí)語(yǔ)言中的低級(jí)語(yǔ)言”或“中級(jí)語(yǔ)言”,意為兼有高級(jí)和低級(jí)語(yǔ)言的特點(diǎn)。按此觀點(diǎn)可將各語(yǔ)言分類如下:(6)C語(yǔ)言能進(jìn)行位(bit)操作,能實(shí)現(xiàn)匯編語(yǔ)言的大部64高級(jí):BASIC,FORTRAN,COBOL,PASCAL,Ada,Modula-2;中級(jí):C,FORTH,宏匯編;低級(jí):匯編語(yǔ)言一般仍習(xí)慣將C語(yǔ)言稱為高級(jí)語(yǔ)言,因?yàn)镃程序也要通過編譯、連接才能得到可執(zhí)行的目標(biāo)程序,這是和其他高級(jí)語(yǔ)言相同的。C的以上特點(diǎn),讀者現(xiàn)在也許還不能深刻理解,待學(xué)完C以后再回顧一下,就會(huì)有比較深的體會(huì)。我們從應(yīng)用的角度出發(fā)對(duì)C語(yǔ)言和其他傳統(tǒng)的高級(jí)語(yǔ)言作一簡(jiǎn)單比較。高級(jí):BASIC,FORTRAN,COBOL,PASCAL65從掌握語(yǔ)言的難易程度來看,C語(yǔ)言比其他語(yǔ)言難一些。BASIC是初學(xué)者入門的較好的語(yǔ)言,F(xiàn)ORTRAN也比較好掌握。對(duì)科學(xué)計(jì)算多用FORTRAN或PL/Ⅰ;對(duì)商業(yè)和管理等數(shù)據(jù)處理領(lǐng)域,用COBOL為宜。C語(yǔ)言雖然也可用于科學(xué)計(jì)算和管理領(lǐng)域,但并不理想,C的特長(zhǎng)不在這里。對(duì)操作系統(tǒng)和系統(tǒng)實(shí)用程序以及需要對(duì)硬件進(jìn)行操作的場(chǎng)合,用C語(yǔ)言明顯地優(yōu)越于其他高級(jí)語(yǔ)言,有的大型應(yīng)用軟件也用C語(yǔ)言編寫。從教學(xué)角度,由于PASCAL是世界上第一個(gè)結(jié)構(gòu)化語(yǔ)言,而曾被認(rèn)為是計(jì)算機(jī)專業(yè)的比較理想的教學(xué)語(yǔ)言。目前在數(shù)據(jù)結(jié)構(gòu)等課程中一般用PASCAL語(yǔ)言舉例。但PASCAL語(yǔ)言難以推廣到各實(shí)際應(yīng)用領(lǐng)域,從掌握語(yǔ)言的難易程度來看,C語(yǔ)言比其他語(yǔ)言難一些。BASIC66到目前為止基本上只是教學(xué)語(yǔ)言。C語(yǔ)言也是理想的結(jié)構(gòu)化語(yǔ)言,且描述能力強(qiáng),同樣適于教學(xué)。操作系統(tǒng)課程多結(jié)合UNIX講解,而UNIX與C不可分,因此,C語(yǔ)言已經(jīng)成為被廣泛使用的教學(xué)語(yǔ)言。C除了能用于教學(xué)外,還有廣泛的應(yīng)用領(lǐng)域,因此更有生命力。PASCAL和其他高級(jí)語(yǔ)言的設(shè)計(jì)目標(biāo)是通過嚴(yán)格的語(yǔ)法定義和檢查來保證程序的正確性,而C則是強(qiáng)調(diào)靈活性,使程序設(shè)計(jì)人員能有較大的自由度,以適應(yīng)寬廣的應(yīng)用面??傊?,C語(yǔ)言對(duì)程序員要求較高。程序員使用C語(yǔ)言編寫程序會(huì)感到限制少,靈活性大,功能強(qiáng),可以編寫出任何類型的程序?,F(xiàn)在,C語(yǔ)言已不僅用來編寫系統(tǒng)軟件,也用來編寫應(yīng)用軟件。學(xué)習(xí)和使用C的人已越來越多。到目前為止基本上只是教學(xué)語(yǔ)言。C語(yǔ)言也是理想的結(jié)構(gòu)化語(yǔ)言,671.3簡(jiǎn)單的C程序介紹下面先介紹幾個(gè)簡(jiǎn)單的C程序,然后從中分析C程序的特性。例1.1main(){printf("ThisisaCprogram.\n");}本程序的作用是輸出以下一行信息:Thisisacprogram.其中main表示“主函數(shù)”。每一個(gè)C程序都必須有一個(gè)main函數(shù)。函數(shù)體由大括弧{}括起來。本例中主函數(shù)內(nèi)只有一個(gè)輸出語(yǔ)句,printf是C語(yǔ)言中的輸出函數(shù)(詳見第4章)。雙引號(hào)(雙括號(hào))內(nèi)的字符串原樣輸出。“\n”是換行符,即在輸出“Thisisacprogram.”后回車換行。語(yǔ)句最后有一分號(hào)。1.3簡(jiǎn)單的C程序介紹下面先介紹幾個(gè)簡(jiǎn)單的C程序,然后從68例1.2main()/*求兩數(shù)之和*/{inta,b,sum;/*這是定義變量*/a=123;b=456;/*以下3行為C語(yǔ)句*/sum=a+b;printf("sumis%d/n",sum);}本程序的作用是求兩個(gè)整數(shù)a和b之和sum。/*……*/表示注釋部分,為便于理解,我們用漢字表示注釋,當(dāng)然也可以用英語(yǔ)或漢字拼音作注釋。注釋只是給人看的,對(duì)編譯和運(yùn)行不起作用。注釋可以加在程序中任何位置。第2行是聲明部分,定義變量a和b,指定a和b為整型(int)變量。第3行是兩個(gè)賦值語(yǔ)句,使a和b的值分別為123和例1.269

456。第4行使sum的值為a+b,第5行中“%d”是輸入輸出的“格式字符串”,用來指定輸入輸出時(shí)的數(shù)據(jù)類型和格式(詳見第4章),“%d”表示“以十進(jìn)制整數(shù)形式輸出”。在執(zhí)行輸出時(shí),此位置上代以一個(gè)十進(jìn)制整數(shù)值。printf函數(shù)中括弧內(nèi)最右端sum是要輸出的變量,現(xiàn)在它的值為579(即123+456之值)。因此輸出一行信息為sumis579例1.3main()/*主函數(shù)*/{inta,b,c;/*聲明部分,定義變量*/scanf("%d,%d",&a,&b);/*輸入變量a和b的值*/456。第4行使sum的值為a+b,第5行中“%d”是輸入70c=max(a,b);/*調(diào)用max函數(shù),將得到的值賦給c*/printf("max=%d",c);/*輸出c的值*/}intmax(intx,inty)/*定義max函數(shù),函數(shù)值為整型,形式參數(shù)x,y為整型*/{intz;/*max函數(shù)中的聲明部分,定義本函數(shù)中用到的變量z為整型*/if(x>y)z=x;elsez=y;return(z);/*將z的值返回,通過max帶回調(diào)用處*/}c=max(a,b);/*調(diào)用max函數(shù),將得到的值賦71本程序包括兩個(gè)函數(shù):主函數(shù)main和被調(diào)用的函數(shù)max。max函數(shù)的作用是將x和y中較大者的值賦給變量z。return語(yǔ)句將z的值返回給主調(diào)函數(shù)main。返回值是通過函數(shù)名max帶回到main函數(shù)的調(diào)用處。main函數(shù)中的scanf是“輸入函數(shù)”的名字(scanf和printf都是C系統(tǒng)提供的標(biāo)準(zhǔn)輸入輸出函數(shù))。程序中scanf函數(shù)的作用是輸入a和b的值。&a和&b中的“&”的含義是“取地址”,此scanf函數(shù)的作用是將兩個(gè)數(shù)值分別輸入到變量a和b的地址所標(biāo)志的單元中,也就是輸入給變量a和b。這種形式是與其他語(yǔ)言不同的。它相當(dāng)于BASIC語(yǔ)言中的INPUTa,b或PASCAL語(yǔ)言中的Read(a,b)。&a和&b前面的“%d,%d”的含義與前相同,本程序包括兩個(gè)函數(shù):主函數(shù)main和被調(diào)用的函數(shù)max。ma72只是現(xiàn)在用于“輸入”。它指定輸入的兩個(gè)數(shù)據(jù)按十進(jìn)制整數(shù)形式輸入。關(guān)于scanf函數(shù)詳見第4章。main函數(shù)中第4行為調(diào)用max函數(shù),在調(diào)用時(shí)將實(shí)際參數(shù)a和b的值分別傳送給max函數(shù)中的形式參數(shù)x和y。經(jīng)過執(zhí)行max函數(shù)得到一個(gè)返回值(即max函數(shù)中變量z的值),把這個(gè)值賦給變量c。然后輸出c的值。printf函數(shù)中雙引號(hào)內(nèi)的“max=%d”,在輸出時(shí),其中“%d”將由c的值取代之,“max=”原樣輸出。程序運(yùn)行情況如下:8,5(輸入8和5給a和b)max=8(輸出c的值)只是現(xiàn)在用于“輸入”。它指定輸入的兩個(gè)數(shù)據(jù)按十進(jìn)制整數(shù)形式73本例用到了函數(shù)調(diào)用、實(shí)際參數(shù)和形式參數(shù)等概念,我們只做了很簡(jiǎn)單的解釋。讀者如對(duì)此不大理解,可以先不予以深究,在學(xué)到以后有關(guān)章節(jié)時(shí),問題自然迎刃而解。在此介紹此例子,無非是使讀者對(duì)C程序的組成和形式有一個(gè)初步的了解。通過以上幾個(gè)例子,可以看到:(1)C程序是由函數(shù)構(gòu)成的。一個(gè)C源程序至少包含一個(gè)main函數(shù),也可以包含一個(gè)main函數(shù)和若干個(gè)其他函數(shù)。因此,函數(shù)是C程序的基本單位。被調(diào)用的函數(shù)可以是系統(tǒng)提供的庫(kù)函數(shù)(例如printf和scanf函數(shù)),也可以是用戶根據(jù)需要自本例用到了函數(shù)調(diào)用、實(shí)際參數(shù)和形式參數(shù)等概念,我們只做了很簡(jiǎn)74

己編制設(shè)計(jì)的函數(shù)(例如,例1.3中的max函數(shù))。C的函數(shù)相當(dāng)于其他語(yǔ)言中的子程序,用函數(shù)來實(shí)現(xiàn)特定的功能。程序中的全部工作都是由各個(gè)函數(shù)分別完成的。編寫C程序就是編寫一個(gè)個(gè)函數(shù)。C的函數(shù)庫(kù)十分豐富,ANSIC建議的標(biāo)準(zhǔn)庫(kù)函數(shù)中包括100多個(gè)函數(shù),TurboC和MSC4.0提供300多個(gè)庫(kù)函數(shù)。C的這種特點(diǎn)使得容易實(shí)現(xiàn)程序的模塊化。(2)一個(gè)函數(shù)由兩部分組成:①函數(shù)的首部,即函數(shù)的第一行。包括函數(shù)名、函數(shù)類型、函數(shù)屬性、函數(shù)參數(shù)(形參)名、參數(shù)類型。例如,例1.3中的max函數(shù)的首部為intmax(intx,

inty)↓↓↓↓↓↓函數(shù)類型函數(shù)名函數(shù)參數(shù)類型函數(shù)參數(shù)名函數(shù)參數(shù)類型函數(shù)參數(shù)名己編制設(shè)計(jì)的函數(shù)(例如,例1.3中的max函數(shù))。C的函75一個(gè)函數(shù)名后面必須跟一對(duì)圓括弧,函數(shù)參數(shù)可以沒有,如main()。②函數(shù)體,即函數(shù)首部下面的大括弧{……}內(nèi)的部分。如果一個(gè)函數(shù)內(nèi)有多個(gè)大括弧,則最外層的一對(duì){}為函數(shù)體的范圍。函數(shù)體一般包括:·聲明部分:在這部分中定義所用到的變量,如例1.3中main函數(shù)中的“inta,b,c;”。在第8章中還將會(huì)看到,在聲明部分中要對(duì)所調(diào)用的函數(shù)進(jìn)行聲明。執(zhí)行部分:由若干個(gè)語(yǔ)句組成。一個(gè)函數(shù)名后面必須跟一對(duì)圓括弧,函數(shù)參數(shù)可以沒有,如mai76當(dāng)然,在某些情況下也可以沒有聲明部分(例如,例1.1)。甚至可以既無聲明部分,也無執(zhí)行部分。如:dump(){}它是一個(gè)空函數(shù),什么也不干,但這是合法的。(3)一個(gè)C程序總是從main函數(shù)開始執(zhí)行的,而不論main函數(shù)在整個(gè)程序中的位置如何(main函數(shù)可以放在程序最前頭,也可以放在程序最后,或在一些函數(shù)之前,在另一些函數(shù)之后)。(4)C程序書寫格式自由,一行內(nèi)可以寫幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句可以分寫在多行上。C程序沒有行號(hào),當(dāng)然,在某些情況下也可以沒有聲明部分(例如,例1.1)。甚至77也不像FORTRAN或COBOL那樣嚴(yán)格規(guī)定書寫格式(語(yǔ)句必須從某一列開始書寫)。(5)每個(gè)語(yǔ)句和數(shù)據(jù)定義的最后必須有一個(gè)分號(hào)。分號(hào)是C語(yǔ)句的必要組成部分。例如:c=a+b;分號(hào)不可少。即使是程序中最后一個(gè)語(yǔ)句也應(yīng)包含分號(hào)(這是和PASCAL語(yǔ)言不同的)。(6)C語(yǔ)言本身沒有輸入輸出語(yǔ)句。輸入和輸出的操作是由庫(kù)函數(shù)scanf和printf等函數(shù)來完成的。C對(duì)輸入輸出實(shí)行“函數(shù)化”。由于輸入輸出操作牽涉到具體的計(jì)算機(jī)設(shè)備,把輸入輸出操作放在函數(shù)中處理,就可以使C語(yǔ)言本身的規(guī)模較小,也不像FORTRAN或COBOL那樣嚴(yán)格規(guī)定書寫格式(語(yǔ)句78編譯程序簡(jiǎn)單,很容易在各種機(jī)器上實(shí)現(xiàn),程序具有可移植性。當(dāng)然,不同的C語(yǔ)言系統(tǒng)需要對(duì)函數(shù)庫(kù)中的函數(shù)作不同的處理。不同的C系統(tǒng)除了提供函數(shù)庫(kù)中的標(biāo)準(zhǔn)函數(shù)外,還按照硬件的情況提供一些專門的函數(shù)。因此不同的系統(tǒng)所提供的函數(shù)個(gè)數(shù)和功能是有所不同的。(7)可以用/*……*/對(duì)C程序中的任何部分作注釋。一個(gè)好的、有使用價(jià)值的源程序都應(yīng)當(dāng)加上必要的注釋,以增加程序的可讀性。編譯程序簡(jiǎn)單,很容易在各種機(jī)器上實(shí)現(xiàn),程序具有可移植性。當(dāng)791.4C程序的上機(jī)步驟我們已經(jīng)看到了一些用C語(yǔ)言編寫的程序。為了使計(jì)算機(jī)能按照人們的意志進(jìn)行工作,必須根據(jù)問題的要求,編寫出相應(yīng)的程序。所謂程序,就是一組計(jì)算機(jī)能識(shí)別和執(zhí)行的指令。每一條指令使計(jì)算機(jī)執(zhí)行特定的操作。程序可以用高級(jí)語(yǔ)言(例如QBASIC,F(xiàn)ORTRAN,PASCAL,C等)編寫。用高級(jí)語(yǔ)言編寫的程序稱為“源程序”(sourceprogram)。從根本上說,計(jì)算機(jī)只能識(shí)別和執(zhí)行由0和1組成的二進(jìn)制的指令,而不能識(shí)別和執(zhí)行用高級(jí)語(yǔ)言寫的指令。為了使計(jì)算機(jī)能執(zhí)行高級(jí)語(yǔ)言源程序,必須先用一種稱為“編譯程序”的軟件,把源程序翻譯成二進(jìn)制形式的“目標(biāo)程序”,然后將該目標(biāo)程序與系統(tǒng)的函數(shù)庫(kù)和其他目標(biāo)程序連接起來,形成可執(zhí)行的目標(biāo)程序。1.4C程序的上機(jī)步驟我們已經(jīng)看到了一些用C語(yǔ)言編寫的程80圖1.1圖1.181在編好一個(gè)C源程序后,如何上機(jī)運(yùn)行呢?在紙上寫好一個(gè)程序后,要經(jīng)過以下幾個(gè)步驟:上機(jī)輸入與編輯源程序?qū)υ闯绦蜻M(jìn)行編譯與庫(kù)函數(shù)連接運(yùn)行目標(biāo)程序這樣幾個(gè)步驟。以上過程如圖1.1所示。其中實(shí)線表示操作流程,虛線表示文件的輸入輸出。例如,編輯后得到一個(gè)源程序文件f.c,然后在進(jìn)行編譯時(shí)再將源程序文件f.c輸入,經(jīng)過編譯得到目標(biāo)程序文件f.obj,再將目標(biāo)程序文件f.obj輸入內(nèi)存,與系統(tǒng)提供的庫(kù)函數(shù)等連接,得到可執(zhí)行的目標(biāo)程序文件f.exe,最后把f.exe調(diào)入內(nèi)存并使之運(yùn)行。在了解了C語(yǔ)言的初步知識(shí)后,讀者最好上機(jī)運(yùn)行一個(gè)C程序,以建立對(duì)C程序的初步認(rèn)識(shí)。在編好一個(gè)C源程序后,如何上機(jī)運(yùn)行呢?在紙上寫好一個(gè)程序后82下面分別就三種不同的環(huán)境下運(yùn)行C程序作一簡(jiǎn)單介紹。1.用TurboC運(yùn)行C程序的步驟TurboC是在微機(jī)上廣泛使用的編譯程序。它具有方便、直觀、易用的界面和豐富的庫(kù)函數(shù)。它向用戶提供一個(gè)集成環(huán)境,把程序的編輯、編譯、連接和運(yùn)行等操作全部集中在一個(gè)界面上進(jìn)行,使用十分方便。為了能使用TurboC,必須先將TurboC編譯程序裝入磁盤的某一目錄下,例如放在C盤根目錄下一級(jí)TC子目錄下。下面分別就三種不同的環(huán)境下運(yùn)行C程序作一簡(jiǎn)單介紹。83圖1.2(1)調(diào)用TurboC程序。如果用戶的當(dāng)前目錄是TurboC編譯程序所在的子目錄(例如TC子目錄),只需從鍵盤鍵入“tc”命令即可:圖1.2(1)調(diào)用TurboC程序。如果用戶的當(dāng)前目錄84C:\TC>tc屏幕上出現(xiàn)TurboC集成環(huán)境,見圖1.2所示。從圖1.2可以看到在集成環(huán)境的上部,有一行“主菜單”,其中包括下面8個(gè)菜單項(xiàng):FileEditRunCompileProjectOptionDebugbreak/watch用戶可以通過以上菜單項(xiàng)來選擇使用TurboC集成環(huán)境所提供的TurboC的各項(xiàng)主要功能。以上8個(gè)菜單項(xiàng)分別代表:文件操作、編輯、運(yùn)行、編譯、項(xiàng)目文件、選項(xiàng)、調(diào)試、中斷/觀察等功能。用鍵盤上的“←”和“→”鍵可以選擇菜單條中所需要的菜單項(xiàng),被選中的項(xiàng)以“反相”圖1.3形式顯示C:\TC>tc85

(例如主菜單中的各項(xiàng)原來以白底黑字顯示,被選中時(shí)改為以黑底白字顯示)。此時(shí)若按回車鍵,就會(huì)出現(xiàn)一個(gè)下拉菜單。例如在選中“File”菜單并按回車鍵后,屏幕上“File”下面出現(xiàn)下拉菜單,見圖1.3所示。它是一個(gè)子菜單,提供多項(xiàng)選擇。可以用“↓”鍵選擇所需要的項(xiàng)。例如選擇“New”處,并按回車鍵,表示要建立一個(gè)新的C源程序。

圖1.3(例如主菜單中的各項(xiàng)原來以白底黑字顯示,被選中時(shí)改為以黑底86如果選擇“Load”,并按回車鍵,表示要調(diào)入一個(gè)已有的源文件,此時(shí)屏幕上出現(xiàn)一個(gè)對(duì)話框(見圖1.4)。要求你輸入該文件的名字。用戶可輸入該文件名,例如:tc1.c,如果已存在此文件,則系統(tǒng)會(huì)將此文件調(diào)入內(nèi)存并顯示在屏幕上。此時(shí)自動(dòng)轉(zhuǎn)為編輯(Edit)狀態(tài)。如果原來不存在此文件名,則系統(tǒng)會(huì)建立一個(gè)以指定的名字命名的新文件。圖1.4如果選擇“Load”,并按回車鍵,表示要調(diào)入一個(gè)已有的87(2)編輯源文件。在編輯(Edit)狀態(tài)下可以根據(jù)需要輸入或修改源程序。(3)編譯源程序。選擇“Compile”菜單并在其下拉菜單中選擇“CompiletoOBJ”,則進(jìn)行編譯,得到一個(gè)后綴為.obj的目標(biāo)程序(為方便起見,在一般書刊中,以上菜單的選擇以“Compile/CompiletoOBJ”表示)。然后再選菜單“Compile/LinkEXEfile”,進(jìn)行連接操作,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論