




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C語言第一章 c語言概述C語言基礎(chǔ)教程 1.1. c語言的由來與發(fā)展1.1.1. c語言的由來 c語言誕生干19?2年,由美國電話電報公司(AT&T)貝爾實(shí)驗室的D. M. Ritchie設(shè)計, 并首先在一臺使用UNIX操作系統(tǒng)的DEC PDP-11計算機(jī)上實(shí)現(xiàn)。 C語言是在一種稱為B語言的基礎(chǔ)上,克服了B語言依賴于機(jī)器又無數(shù)據(jù)類型等局限性開發(fā)的語言。在1970年,美國貝爾實(shí)驗室的IC. Thompson以BCPL語言為基礎(chǔ),設(shè)計出一種既簡單又接近于硬件的B語言,并用它寫成了第一個UNIX操作系統(tǒng),在PDP-7計算機(jī)上實(shí)現(xiàn)的。B語言是取了BCPL語言的第一個字母。而BCPL語言(Basic C
2、ombined ProgrammingLanguage)是3.967年英國劍橋大學(xué)的M. Richard,基于一種CPL語言(combined Program-wing Language)提出的一種改進(jìn)的語言。而CPL語言又是于1963年英國劍橋大學(xué)根據(jù)AL-GOL 8。推出的一種接近硬件的語言。由此可見,G語言的根源可以追溯到ALGOL 60,它的演變過程如下所示: ALGOL6o(1960年)與CPL(1963年)一BCPL(1967年)iBC(1972年1. 1. 2 C語言的發(fā)展 C語言是在人們設(shè)想尋找一種既具有一般高級語言的特征,又具有低級語言特點(diǎn)的語言 的情況下應(yīng)運(yùn)而生的,它具有人
3、們的這種期望,集中了高級語言和低級語言的優(yōu)點(diǎn)。最初的C語言就是為了描述和實(shí)現(xiàn)UNIX操作系統(tǒng)而產(chǎn)生的一種工具語言。1973年,貝爾實(shí)驗室的KThampson和D. M. Richie兩人合作使用C語言修改了UNIX操作系統(tǒng),即uNZx第5版本。原來的UNIX操作系統(tǒng)是用2 / 28匯編語言寫的,改寫后UNIX操作系統(tǒng)中90%以上使用了C語言。從此,C語言的命運(yùn)與UNIX操作系統(tǒng)便有著密切的聯(lián)系,隨著UNIX操作系統(tǒng)的發(fā)展和推廣,C語言也在被廣泛的使用和發(fā)展。 C語言出世以后。在應(yīng)用中不斷的改進(jìn)。在1975年UN1X第6版本公布以后,C語言開始引起人們的注意,它的優(yōu)點(diǎn)逐步被人們所認(rèn)識。1977年
4、出現(xiàn)了與具體機(jī)器無關(guān)的C語言編譯文本,推動了UNIX操作系統(tǒng)在各種機(jī)器上的迅速地實(shí)現(xiàn)。隨著UNIX的日益廣泛的使用,C語言也得到了迅速的推廣。1978年以后,C語言先后被移植到大、中、小和微型機(jī)上,它很快成為世界上應(yīng)用最廣泛的計算機(jī)語言之一。 1978年又推出UNIX第8版本,以該版本中的C編譯程序為基礎(chǔ),B. W. Ketnigha。和D. M. Ritchie合作(被稱為K&R)出版The C Programming Language(C程序設(shè)計語言)一書,被稱為標(biāo)準(zhǔn)C 1983年,ANSI(美國國家標(biāo)準(zhǔn)化協(xié)會)對G語言的各種版本進(jìn)行了擴(kuò)充,推出了新的標(biāo)準(zhǔn),被稱為ANSI . 它比原來的標(biāo)
5、準(zhǔn)C有了改進(jìn)和擴(kuò)充。1987年,ANSI又公布了87ANSZC新版本。目前流行的各種c語言編譯系統(tǒng)的版本大多數(shù)都以此為基礎(chǔ),但各有其不同。當(dāng)前微機(jī)上使用的C語言編譯系統(tǒng)多為Microsoft C, Turbo C, Borland C和QuickC等,它們略有差異,按標(biāo)準(zhǔn)C書寫的程序,基本上都可運(yùn)行。讀者要了解不同版本的編譯系統(tǒng)的特點(diǎn)和區(qū)別可參閱有關(guān)的操作說明書。1.2.1 C語言的特點(diǎn) c語言是一種開發(fā)比較晚的高級語言,它吸取了早期高級語言的優(yōu)點(diǎn),克服了某些不足, 形成了它獨(dú)有的特性。c語言的特點(diǎn)概括起來有如下幾點(diǎn):1.C語言是一種結(jié)構(gòu)化的程序設(shè)計語言 結(jié)構(gòu)化程序設(shè)計的優(yōu)點(diǎn)是便于分工合作,便
6、于調(diào)試、維護(hù)和擴(kuò)充。這種程序設(shè)計方法是將一個大程序分成若千個模塊,每個模塊完成一個功能,由一個總控模塊來控制和協(xié)調(diào)各個模塊來實(shí)現(xiàn)總的功能;因此,這種程序設(shè)計方法又稱為模塊化程序設(shè)計方法。在C語言中,函數(shù)是構(gòu)成C諳言程序的最小模塊。實(shí)際上,C語言的程序是由一個或者多個文件組成的,每個文件叉是由一個或多個函數(shù)組成的。因此,一個程序是由一個或多個函數(shù)組成的,其中,須有且僅有一個主函數(shù),生函數(shù)的名字規(guī)定為rnain() o這樣,組成一個程序的者干個文件中,僅有一個是主文件,只有主艾件中才含有main ( )函數(shù)。另外,函數(shù)是由若干條語句組成的,語句是由若干個單詞組成的單詞是由若干個字符組成的。字符是構(gòu)
7、成程序的最小單元。e語言程序的構(gòu)成如下所示: 程序文件函數(shù)語句單詞、字符。 C語言是結(jié)構(gòu)化程序設(shè)計語言,它具有構(gòu)成三種基本結(jié)構(gòu)模式的語句,這種結(jié)構(gòu)化程序設(shè)計應(yīng)具有的三種基本結(jié)構(gòu)模式如下: 順序結(jié)構(gòu)棋式 它將由若干條順序執(zhí)行的語句構(gòu)成,這是程序設(shè)計的最基本形式。 分支結(jié)構(gòu)模式 C語言中具有條件語句和開關(guān)語句,它將會構(gòu)成各種需要的分支結(jié)構(gòu)模式。 .循環(huán)結(jié)構(gòu)模式 C語言中提供了三種循環(huán)語句(for循環(huán),whil。循環(huán)和do-while循環(huán)),用它們可以構(gòu)成 各種循環(huán)結(jié)構(gòu)模式。 在講述C語言是一種結(jié)構(gòu)化程序設(shè)計語言的同時,還必須指出它與其他結(jié)構(gòu)化程序設(shè)計語言(如PASCAL語言)相比較,還有一些不完全
8、之處,因此,C語言是一種不完全的結(jié)構(gòu)化程序設(shè)計語言。其表現(xiàn)如下: 第一,完全的結(jié)構(gòu)化程序設(shè)計語言不允許使用goto語句,因為goto語句會破壞結(jié)構(gòu)化。 但是。got。語句在某些時候會使得程序簡練,因此,在C語言中原則上允許使用goto語句,為了減少它對結(jié)構(gòu)化的影響,采取了限制使用的辦法,即規(guī)定got。語句的轉(zhuǎn)向范圍只能在一個函數(shù)體內(nèi)。不得使用gates語句從一個函數(shù)體內(nèi)轉(zhuǎn)向到另一個函數(shù)體中,這種限制性地使用goto語句會給編程帶來一些方便,又不會影響棋塊之間的結(jié)構(gòu)化。但是,建議在G語言的程序中盡量少使用goto語句。 第二,完全的結(jié)構(gòu)化程序設(shè)計語言要求一個模塊只有一個入口和一個出口,這樣便于結(jié)
9、構(gòu)化的管理。但是,C語言程序中允許函數(shù)使用多個返回語句(return語句),即允許函數(shù)有多個出口,返回到調(diào)用函數(shù)。這樣做也是為了編程中的方便。在C語言程序中,可以使用條件語句來返回不同的函數(shù)值。 由此可見,C語言雖然是一個不夠嚴(yán)格的結(jié)構(gòu)化程序設(shè)計語言,但它是一個使用起來十分靈活的高級語言。2.C語言十分簡練 C語言是一種非常簡練的語言。用C語言編寫的程序十分簡潔。C語言的簡潔性表現(xiàn)如下: (1) C語言中類型說明符采用縮寫形式,例如,整型可用int,而不用integer;字符型用 char而不用character;長整型可用long等等。 (2) C語言中關(guān)鍵字較少,只有32個。有些關(guān)鍵字用簡
10、單的符號代替,例如,條件語句中的ef體的定界符采用花括號(),如果是一條語句規(guī)定不用定界符。又例如,循環(huán)語句中循環(huán)體也是如此。 (3)運(yùn)算符豐富。不僅數(shù)量多,而且功能強(qiáng),例如,三目運(yùn)算符(?:)具有條件語句的功能。 三目運(yùn)算符使用方法如下: dl? d2:d3 其中,dl,d2,d3是不同的表達(dá)式。其功能是先計算表達(dá)式dl的值,如果dl的值是非零, 則上述三目運(yùn)算符組成的條件表達(dá)式的值為d2表達(dá)式的值;否則(即dl表達(dá)式的值為零)條 件表達(dá)式的值為d3的值。因此,它將相當(dāng)如下表示的if語句; If (dl) C=d2 else C=d3 其中,c用來存放上述條件表達(dá)式的值。 使用功能強(qiáng)的運(yùn)算符
11、可以使得程序簡潔。 (4)預(yù)處理功能將簡化程序書寫內(nèi)容。C語言中提供r一種預(yù)處理功能,它包含宏定義和 文件包含等,其中宏定義有一種簡化書寫的功能,它可將一個復(fù)雜的格式用一個簡單格式來定義,例如 #define PI 3.14159265 表示定義PI為3. 14159265,在程序中只需用PI表示,在編譯前系統(tǒng)將用3. 14159265來替代PI。這里,簡化是一個特點(diǎn),還有其他好處后面會介紹。還有文件包含也將起到簡化書寫的目的,它將許多文件都將使用的一些語句放在某個指定的文件(一般用頭文件,即。h文件)中,那么在某個文件中需要這些語句時,不必重寫,只要將原來寫好的指定文件包含進(jìn)來就可以了,其方
12、法十分簡單,例如 # include myfile.h 其中,myfile.h是事先寫好的需要包含其內(nèi)容的文件。3.C語言功能很強(qiáng) C語言的功能性強(qiáng)表現(xiàn)在它既具有高級語言的功能又具有低級語言的功能。數(shù)值運(yùn)算和 非數(shù)值運(yùn)算的功能C語言都具有,并且在處理非數(shù)值數(shù)據(jù)時更加方便和靈活。此外,C語言還具備一些低級語言的功能,例如,寄存器運(yùn)算功能,二進(jìn)制位運(yùn)算功能和內(nèi)存地址運(yùn)算功能等。這些低級語言的功能是一般高級語言所沒有的。由于c語言具有上述這些功能,因此,它的應(yīng)用十分廣泛,它不僅像其他高級語言一樣編寫一些應(yīng)用程序,而且還可以像匯編語言一樣編寫一些系統(tǒng)程序。而在實(shí)際上,許多系統(tǒng)軟件,例如關(guān)系數(shù)據(jù)庫管理系
13、統(tǒng),繪圖軟件系統(tǒng)等,都是用c語言編寫的。另外,使用c語言編寫一些接口程序也十分方便。 c語言還提供了豐富的數(shù)據(jù)類型,除了基本的數(shù)據(jù)類型之外,還提供了構(gòu)造的數(shù)據(jù)類型, 例如,數(shù)組、結(jié)構(gòu)、聯(lián)合和枚舉。使用這些數(shù)據(jù)類型可以很方便地實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(例 如,鏈表、棧、樹等)的操作。 4. C語言的可移植性好 高級語言的可移植性都比匯編語言好,在諸多的高級語言中,c語言的移植性更為突出。 這是因為該清育編譯系統(tǒng)較小,。另外頂處理功能對移植也帶來一些方便,因此,c語言本身只需稍加修改便可用于各種型號的機(jī)器上和各類操作系統(tǒng)中,用c語言編寫的程序也很方便地用于不同系統(tǒng)中,這也是c語言得川廣泛應(yīng)用的原因之
14、一 在了解和掌握c語言上述的特點(diǎn)的同時,還應(yīng)該知道c語言所存在的不足,這些不足往 往是由于突出某個特點(diǎn)而帶來的。在學(xué)習(xí)c語言中,了解這些不足是很重要的,它可以避免出現(xiàn)一些莫明其妙的錯誤。下面列舉四個方面的不足。 (1)運(yùn)算符多,難用難記。c語言中有o多個運(yùn)算符,又分S種優(yōu)先級和兩類結(jié)合性,這無疑對數(shù)據(jù)的運(yùn)算和處理帶來了方便。但是,諸多的運(yùn)算符和不同的優(yōu)先級勢必會帶來難記憶,難使用的不足。例如,有些功能不同的運(yùn)算符,卻使用相同的符號,如“,”,它作為單目運(yùn)算符表示取內(nèi)容,它作為雙目運(yùn)算符表示兩個操作數(shù)相乘,它與斜線符“/片連在一起(/,或,/) 表示注釋符,另外,它用在說明語句中,用來表示它右邊
15、變量為指針等等。還有運(yùn)算符的15種優(yōu)先級不要記混了,否則會造成計算值的錯誤。 (2) C語言中類型轉(zhuǎn)換比較靈活,例如,int型與char型可以自動轉(zhuǎn)換。這些自動轉(zhuǎn)換的規(guī)定帶來一定的計算方便,在C語言中允許一個字符與一個整數(shù)進(jìn)行加減運(yùn)算,例如 a+2 是合法的,該表達(dá)式的值用字符型表示為c,用整型數(shù)表示為99。為了轉(zhuǎn)換上的方便,在許多情況下將不作類型檢查,例如,在只作簡單說明時的函數(shù)調(diào)用中,要求形參和實(shí)參類型一致,如果類型不一致也不判錯仍可通過,有時會造成運(yùn)算結(jié)果的錯誤,為了避免這類錯誤的發(fā)生,可以對函數(shù)進(jìn)行原型說明,這時編譯時將會對形參和實(shí)參的類型進(jìn)行檢查,增加其安全性。另外,也可使用強(qiáng)制類型
16、運(yùn)算符來限制其不必要的自動轉(zhuǎn)換。 (3) C.語言中數(shù)組在動態(tài)賦值時不作越界檢查。因此,在數(shù)組元素的個數(shù)少于實(shí)際斌值的項數(shù)時,編譯系統(tǒng)不報越界錯,而繼續(xù)按數(shù)組元素所表示的地址進(jìn)行贖值,這樣容易造成數(shù)據(jù)的混亂。為了避免這種情況的發(fā)生,應(yīng)盡量避免動態(tài)的越界賦值。對數(shù)組的靜態(tài)賦值(即賦初值)不會發(fā)生越界賦值的現(xiàn)象,靜態(tài)時出現(xiàn)越界賦值將報錯。 (4) C語言為了優(yōu)化等原因允許不同的編譯系統(tǒng)在表達(dá)式或參數(shù)表內(nèi)重新安排求值順序。這樣對于一般的表達(dá)式值和參數(shù)表內(nèi)各項參數(shù)值是沒有影響的,例如,改變表達(dá)式中各操作數(shù)的計算順序不會改變表達(dá)式的值。但是,對一些具有副作用的運(yùn)算符=y, m,n,4B等。 讀者要學(xué)會寫
17、出合法的標(biāo)識符,也要能識別出非法的標(biāo)識符。 在給變量、函數(shù)等起名字時最好能做到“見名知意”,即從標(biāo)識符的字符集中可知道該變量或函數(shù)的含意。例如,year , month , day , nartxe , age , sex等,不難從英文單詞中了解變量的含意。2.關(guān)健字 關(guān)鍵字是一種具有特定含意的標(biāo)識符。關(guān)鍵字又稱保留字。因為這些標(biāo)識符是系統(tǒng)己經(jīng) 定義過的,不能再定義了,需要加以保留。使用者不能用關(guān)鍵字作為所定義的標(biāo)識符,因此,讀者要知道系統(tǒng)已經(jīng)使用了哪些保留字。下面將它們分類說明如下(關(guān)于這些關(guān)鍵字的含意及用法本書后面章節(jié)會有詳細(xì)講解)。 (1)標(biāo)識類型的關(guān)鍵字 int,char,long,f
18、loat,double,short,unsigned, struct,union,enum,auto,extern, static,register,typedef , void。 (2)標(biāo)識控制流的關(guān)鍵字 gato,return,break,continue,if,else,default,do,while,sW1tC11,case。 (3)標(biāo)識預(yù)處理功能的關(guān)鍵字 define,include,undef , ifdef,ifndef,endif, lin。等。 (4)其他關(guān)鍵字 sizeof , asm, fortran .ada,pascal等, 上述的標(biāo)識符都是系統(tǒng)已有定義的保留字,讀
19、者不得再重新定義。3.運(yùn)算符 運(yùn)算符是用來表示某種運(yùn)算操作的一種符號,有的運(yùn)算符用一個字符組成,也有的運(yùn)算符由多個字符組成。有的運(yùn)算符只要求有一個操作數(shù),這種運(yùn)算符叫單目運(yùn)算符;有的運(yùn)算符要求有兩個操作數(shù),稱為雙目運(yùn)算符;還有要求有三個操作數(shù)的運(yùn)算符,稱為三目運(yùn)算符。C語言中運(yùn)算符種類繁多,優(yōu)先級復(fù)雜,還有結(jié)合性等問題,本書第三章中專門講述運(yùn)算符問題。4.分隔符 分隔符是用來分隔多個變量、數(shù)據(jù)項、表達(dá)式等的符號。C語言中常用的分隔符有逗號,空白符,分號和膏號。下面介紹這些分隔符的使用方法。 (I)逗號作為分隔符用來分隔多個變量和函數(shù)參數(shù)。例如,在說明語句中,同種類型的多個變量可用逗號將其變量分
20、隔開: int a, b, c, d; 這表示變量a, b,c和d都被定義為int型變量。又例如,在函數(shù)定義或調(diào)用時,用逗號將函數(shù)的多個形參或?qū)崊⑦M(jìn)行分隔,在下列函數(shù)的定義中, Add(a,b, c) int a , b,c, 這表示函數(shù)add有三個形參a,b和c,用逗號進(jìn)行分隔。 (2)空白符一般常用來作為多個單詞間的分隔符,也可以作為輸入數(shù)據(jù)時自然輸人項的 缺省分隔符。G語言中,語句是由單詞組成的,單詞之間不能連寫在一起,中間要用空白符(常用空格符)作分隔符,例如, int a, b,c, 這里,在int與a之間便是用空格符分開的,因為int是一個單詞,又是一個單詞,這兩個單詞不能寫在一起
21、,一定要用空白符分隔開。又例如,使用標(biāo)準(zhǔn)格式輸入函數(shù)輸入數(shù)據(jù)時,并且控制串中又沒有指定匹配符,則從鍵盤上輸入的數(shù)據(jù)項之間需用空白符作為分隔符。關(guān)于標(biāo)準(zhǔn)格式輸入函數(shù),canf(),下面將會詳細(xì)介紹。 (3)分號有時也可作為分隔符使用,它主要用在for循環(huán)語句中for后面,圓括號內(nèi)的三個表達(dá)式之間用分號分隔,這一點(diǎn)將在語句一章中詳細(xì)講解。 (4)冒號有時也可作為分隔符使用,它主要用于語句標(biāo)號與語句之間,用曹號分開;也可用在switch語句中,case關(guān)鍵字與其后的語句之間用冒號分開。這些使用在后面的內(nèi)容中都會講到。5.常量 常量是一種在程序中其值保持不變的量。C語言中常量分為數(shù)字常量和字符常量兩類
22、。 數(shù)字常量又分為整型常量和浮點(diǎn)型常量。 字符常量和字符串常量是兩種不同的常量。 C語言中,常量通常用符號常量來表示,符號常量也是一種標(biāo)識符。 有關(guān)常量的類型、常量的使用方法以及符號常量的定義等詳細(xì)情況后面章節(jié)會專門描述。6.字符串 字符串是一種由雙引號(“)括起來的一串字符組成的常量。字符串實(shí)際上被存放在一個字符數(shù)組中,下面是合法的字符串: x,y,z”This is a string,“1257,Wang ping,“”,ab”等。 其中,”表示一個空串,即沒有字符的串。ab”“表示由ab”組成的字符串。當(dāng)雙引號本身作為字符處理時,前面要加一個反斜線,以便與定界符的雙引號加以區(qū)別。 在C語
23、言中,要注意字符常量與字符串常量的區(qū)別。它們在表示上、用法上和存放上都是不同。字符常量是用單引號()括起來的單個字符,例如,a是一個字符常量,字符串常量是用雙引號(“”)括起來的一個或多個字符組成;字符常量在一定條件下可與整數(shù)進(jìn)行加法或減法運(yùn)算,字符串常量有與字符常量不同的運(yùn)算;字符常量存放在內(nèi)存中占一個字節(jié)的空間,字符串常量存放在內(nèi)存中占有的字節(jié)個數(shù)是字符個數(shù)加1,因為每個字符串存放在內(nèi)存中都有一個結(jié)束符0例如,字符a占1個字節(jié),而“a”卻占用2個字節(jié),其中a占一個,結(jié)束符0占一個。7,注釋符 注釋符是用來標(biāo)識注釋或提示信息的。程序中的注釋信息不被編譯也不被執(zhí)行,其作用是增加程序的可讀性。C
24、語言的注釋符是以/開頭并以/結(jié)束,在/和,/之間的信息為注釋信息,一般起到說明或備忘的作用。 注釋符可以出現(xiàn)在程序中任意行的位置,既可在程序頭,也可在程序尾,還可以在程序中間的任意行。注釋符可出現(xiàn)在一條語句的前面,也可出現(xiàn)在一條語句的后邊,甚至還可出現(xiàn)在一條語句的中間。注釋信息可占一行,也可以占多行。注釋符在有些編譯系統(tǒng)中允許嵌套,即在注釋信息中還可以包含注釋符。例如, /,Compute/Squares.Circle,/ 這是注釋符嵌套的形式,這種形式有的編譯系統(tǒng)是不允許的,有的編譯系統(tǒng)經(jīng)過設(shè)置后是允許的。 另外,采用注釋符的形式在調(diào)試程序中常常有用,可以將一些暫時不參與編譯和運(yùn)行的語句用注
25、釋符加以注釋一旦去掉注釋符后,仍可參與編譯或運(yùn)行。1.4.1常用的輸人函數(shù) 常用的輸人函數(shù)是指從鍵盤上接收數(shù)據(jù)的函數(shù),它們是getchar(), gets()和scan# C)三個函數(shù)。 1。獲得一個字符的函數(shù)getchar() 該函數(shù)的功能是從鍵盤上獲取一個字符,它是帶緩沖區(qū)和回顯的,所謂帶緩沖區(qū)是指該函數(shù)不是當(dāng)一個字符鍵人后立即被勢收,而是將鍵入的字符先放在內(nèi)存緩沖區(qū)中,當(dāng)若干個字符鍵入完后,再從緩沖區(qū)中按先后順序獲得字符。所謂帶回顯是指鍵入一個字符后在顯示器屏幕上顯示出所鍵人的字符。該函數(shù)的格式如下所示: int getchar () 該函數(shù)沒有參數(shù),它的返回值是一個int型數(shù),即所接收
26、的字符的ASCII碼值。 2。獲得一個字符串的兩數(shù)gets ( ) 該函數(shù)的功能是從鍵盤上獲取所鍵入的字符串。該函數(shù)的正常返回值是一個字符型指針,即讀取到的字符串的首地址,出錯時返回ruLL(rruLL被定義為。)。該函數(shù)的格式如下所示 char * gets(s) Char*s; 其中,*作為說明符表示指針,而char*表示char型指針。具體指針的詳細(xì)講解在本書 “指針”一章中。輸入的字符串以n(換行符)為結(jié)束。 3。標(biāo)準(zhǔn)格式拾入函數(shù)scanf() 標(biāo)準(zhǔn)格式輸入函數(shù)是指從標(biāo)準(zhǔn)輸入設(shè)備健盤上讀取數(shù)據(jù)獷并且按所指定的格式將讀取的數(shù)據(jù)賦給相應(yīng)的變量。該函數(shù)的格式如下: int scanf (控制
27、串”,(參數(shù)表) 該函數(shù)的參數(shù)由兩部分組成,其中一部分是由雙引號括起來被稱為控制串,另一部分是參數(shù)表,(控制串)中包含格式符和一般字符。格式符是用來說明對應(yīng)的輸入項的格式的。格式符的標(biāo)識符是百分號(寫),它后面跟的字母表示格式的格式說明符。scanf()函數(shù)的格式說明符如下所示: d一十進(jìn)制整數(shù) x-十六進(jìn)制整數(shù) o-八進(jìn)制整數(shù) u-無符號十進(jìn)制數(shù) f-小數(shù)表示的浮點(diǎn)數(shù) e-指數(shù)表示的浮點(diǎn)數(shù) c-單個字符 s-一字符串 控制串中的一般字符表示匹配符,另外在%和格式說明符之間還可加修飾符,這些內(nèi)容將在“文件和讀寫函數(shù)”一章中講解。 (參數(shù)表)是由一個或多個參數(shù)構(gòu)成,多個參數(shù)使用時用逗號分隔。每個
28、參數(shù)用地址值表示。要求參數(shù)的個數(shù)和類型與控制串中格式符的個數(shù)和類型相一致,即要求其個數(shù)相等,類型相同。 該函數(shù)具有一個整型數(shù)的返回值,該返回值表示該函數(shù)參數(shù)表中成功獲得數(shù)據(jù)的參數(shù)的個數(shù)。 三種輸人函數(shù)的例子,將會在后面的程序中看到。1.4.2常用的轉(zhuǎn)出函數(shù) 常用的輸出函數(shù)是指將輸出結(jié)果顯示在屏幕上的函數(shù),它們是putchar(),puts()和printf ()三個函數(shù)。 1.輸出一個字并的函數(shù)putchar() 該函數(shù)的功能是將所指定的一個字符輸出到屏幕上,即將該字符顯示在屏幕上。該函數(shù)的格式如下: int putchar(c) int c; 其中,C是該函數(shù)的參數(shù)。該函數(shù)將c所表示的字符顯
29、示在屏幕上。c可以是一個字符常量,也可以是一個字符型變量,還可以是一個表達(dá)式。正常情況下。該函數(shù)返回輸出字符的代碼值。出錯時,返 EOF. 2.輸出一個字符串的函數(shù)puts() 該函數(shù)的功能是將所指定的字符串顯示在屏幕上。其格式如下: int puts(s) Char*s; 其中,s是該函數(shù)的參數(shù),該參數(shù)指出要輸出顯示的字符串,它可以是一個字符串常量,也可以是一個字符型數(shù)組,或是一個指向字符串的指針。該函數(shù)正常時返回零。 3.標(biāo)準(zhǔn)格式輸出函數(shù)printE ( ) 該函數(shù)是將指定的表達(dá)式的值按指定的格式輸出到屏幕上,即顯示在屏幕上。該函數(shù)的格式如下: int printf (控制串),(參數(shù)表)
30、 該函數(shù)的參數(shù)可分兩個部分:一部分是,中間用逗號分隔。(控制串)中包含有格式符和一般字符。格式符是百分號作為標(biāo)識符,其后用一個字母表示輸出格式,該字母稱為格式說明符。該函數(shù)的格式說明符如下所示: d-十進(jìn)制整數(shù) o-一八進(jìn)制整數(shù) x-十六進(jìn)制整數(shù) u-無符號整數(shù) c-單個字符 s-字符串 f一-浮點(diǎn)數(shù)小數(shù)型) e-浮點(diǎn)數(shù)(指數(shù)型) g-e和f中較短的一種 在格式標(biāo)識符(%)與格式說明符之間可以使用修飾符,用來限制輸出數(shù)據(jù)的寬度和對齊方式。常用的修飾符如下: 數(shù)字。數(shù)字-小數(shù)點(diǎn)前面的數(shù)字用來表示輸出數(shù)據(jù)的最小域?qū)?。所謂最小域?qū)捠侵府?dāng)輸出數(shù)據(jù)的實(shí)際寬度小于最小域?qū)挾葧r,按最小域?qū)捿敵鰯?shù)據(jù),一般用空
31、格符補(bǔ)到最小域?qū)挘划?dāng)輸出數(shù)據(jù)的實(shí)際寬度大于最小域?qū)挄r,則按實(shí)際寬度輸出數(shù)據(jù)??梢娮钚∮?qū)捠怯脕碇赋鲚敵鰯?shù)據(jù)的最小寬度;小數(shù)點(diǎn)后面的數(shù)字用來表示輸出數(shù)據(jù)的精度,對浮點(diǎn)數(shù)來講表示小數(shù)點(diǎn)后的位數(shù);對字符串來講表示輸出字符串的最大個數(shù),并將超過的部分截掉;對整數(shù)來講表示輸出的最大位數(shù),超過的部分被截去很少使用)。 1-用于格式說明符d,o,x前邊表示長整數(shù),用于e, f, g前面表示雙精度浮點(diǎn)數(shù)。 一-負(fù)號用來表示數(shù)據(jù)在域?qū)捴凶髮R。如果不用負(fù)號,則表示右對齊。 還有一些其他修飾符將在“文件和讀寫函數(shù)”一章中講述。 控制串中的一般字符照樣輸出,即將一般字符顯示在屏幕上。對于一般的不可打印字符用轉(zhuǎn)義序列
32、表示,而可打印字符直接用字符符號表示。所謂轉(zhuǎn)義序列是用來表示字符的一種方法,即用該字符的ASCII碼值來表示,具體格式如下: dd 在反斜線后面跟三位八進(jìn)制數(shù)字來表示字符的ASCII碼值,也可用十六進(jìn)制數(shù)字表示字符的ASCII碼值,其格式為xhh。例如,表示字符(ESC)可用033或xlb表示。為了表示方便,C語言中將一些常用的控制代碼的轉(zhuǎn)義序列用(字母)形式表示,如表1-1所示。 (參數(shù)表)是由。個或多個參數(shù)組成,多個參數(shù)用逗號分隔。0個參數(shù)表示沒有參數(shù)表,即參數(shù)表前的逗號可省略,這里只有控制串部分,常用這種格式在屏幕上輸出提示信息。參數(shù)表中每個參數(shù)是一個表達(dá)式。要求參數(shù)表中參數(shù)的個數(shù)和類型
33、與控制串中的格式符的個數(shù)和類型相一致,即要求其個數(shù)相等,類型相同。這里提醒注意的是當(dāng)其個數(shù)不等類型不同時,一般情況下,不報錯誤信息,而會造成輸出結(jié)果上的不一致。在使用該函數(shù)時應(yīng)特別注意這一點(diǎn)。該函數(shù)的返回值是一個整數(shù),它通常表示輸出顯示的數(shù)據(jù)的總寬度。 關(guān)于上述三個輸出函數(shù)的例子,將會在后面的程序中看到。1.5.1 C語言程序?qū)嵗?在講解c語言語法之前,先例舉幾個C語言程序的實(shí)例,讀者可以從中了解到C語言程序的書寫格式 例1. i This is a progrem 程序內(nèi)容如下 Main() Printf(This is a program. n”); 這是一個很簡單的程序。該程序只有一個文
34、件,并只有一個函數(shù)main(),它是一個主函 數(shù),并沒有參數(shù)。該函數(shù)的函數(shù)體是用一對花括號()括起來的。函數(shù)體內(nèi)只有一個語句。注意,一條語句的最后要有一個分號(;),這是C語言程序的一個特點(diǎn)。該語句是前面介紹過的標(biāo)準(zhǔn)格式輸出函數(shù)printf ( ),在該函數(shù)中只有用雙引號括起來的控制串部分,沒有任何參數(shù),因此,該函數(shù)將雙引號內(nèi)的字符串輸出顯示在屏幕上,在字符串中除了最后有一個n字符外,都是一般可打印字符,而是用轉(zhuǎn)義序列表示的換行符。 執(zhí)行該程序后,則在屏幕上顯示如下信息: This is a program. 光標(biāo)在字符串的下一行開始處。 例1.幻編寫一個程序,求出給定的兩個數(shù)的和。 程序內(nèi)容
35、如下: Main() int a.b,sum; printf (Input a e.nd b:”); scanf (%d%d0 ,$,s), sum=add(a,b), printf (sum= %d+%d= %dn ,a,b, sam), add(x,y) int x,y; return (x+y); 該程序是由兩個函數(shù)組成的,這兩個函數(shù)分別是主函數(shù)main()和被調(diào)用函數(shù)add ()o函數(shù)add ( )的功能是將兩個參數(shù)之和返回給調(diào)用函數(shù),即將其返回值(x -y的值)賦給變量sum e在main()中,首先說明了三個int型變量:a, b和sum。接著,使用printf ( )函數(shù)在屏幕七
36、顯示出如下的提示信息。 Input a and b: 表示提醒讀者要從鍵盤上輸入兩個int型數(shù)分別給變量a和be然后,通過執(zhí)行。canf()函數(shù),將鍵盤上輸入的兩個數(shù)分別賦給了變量a和b,即使a和b從鍵盤上獲得了數(shù)值。這里使用了標(biāo)準(zhǔn)格式輸入函數(shù)scanf(),該函數(shù)的控制串中僅有兩個格式符,而參數(shù)表中對應(yīng)有兩個參數(shù),阮和&b分別表示了變量a和變量b的地址值,這里的&是一個取變量地址的運(yùn)算符后面再講),可以看到scant()函數(shù)中,格式符與參數(shù)的個數(shù)是相等的,類型也是相同的。 接著,程序中使用了調(diào)用函數(shù)語句,將被調(diào)用函數(shù)的返回值賦給變量sum ,調(diào)用函數(shù)時使用了兩個參數(shù)a和b,即add (a ,
37、 b) ,調(diào)用時將實(shí)參a和b的值分別傳送給add函數(shù)的兩個形參x和y。可見,實(shí)參和形參是個數(shù)相等,對應(yīng)的類型相同的。被調(diào)用函數(shù)的兩個形參x和y獲得。由實(shí)參。和b傳送的值以后,通過一個返回語句return,將表達(dá)式x+y的值返回給調(diào)用函數(shù),并將控制權(quán)也返回給主函數(shù),于是主函數(shù)中的變量sum便獲得了返回來的值,即x - Y的值。再接著,執(zhí)行printf ()函數(shù),按其規(guī)定的格式在屏幕上顯示出結(jié)果。printf(7函數(shù)中的控制串有三個格式符,對應(yīng)著參數(shù)表中的三個表達(dá)式,它們對應(yīng)的類型是相同。 執(zhí)行該程序時,屏幕上顯示出如下提示信息: Input a and b; 這里,如果從鍵盤上鍵入如下信息: 1
38、8u 52 則在屏幕上將顯示出如下結(jié)果: sum=18十52=70 通過上述的兩個例子,可以對C語言程序有個初步了解。分析上述程序可以看到: (1) C語言程序是由函數(shù)構(gòu)成的。例1. 1是一個只有一個函數(shù)構(gòu)成的簡單程序,該函數(shù)一定要是主函數(shù)main ( )。例1. 2是一個由兩個函數(shù)構(gòu)成的程序,其中一個是主函數(shù)main ( ),另一個是被調(diào)用函數(shù)add ( )??梢奀語言程序可由若干個函數(shù)構(gòu)成,其中必須有一個且只能有一個是main ( ),其余的都是被調(diào)用的函數(shù),這便是C語言程序的一大特點(diǎn)。(2)函數(shù)是C語言程序的基本單位。函數(shù)是由兩部分組成的:一部分稱為函數(shù)頭,它是函數(shù)的說明部分,包含函數(shù)類
39、型、函數(shù)名、一對圓括號、函數(shù)參數(shù)(形參)名和參數(shù)的說明;另一部分稱為函數(shù)體,函數(shù)體是由一對花括號起來的由若干條語句組成的,這對花括號標(biāo)識了函數(shù)體的范圍。有關(guān)函數(shù)定義的詳情在后面的“函數(shù)和存儲類”一章還有介紹。 (3)程序執(zhí)行時總是從main ( )數(shù)開始的,main ( )可放在程序的任何位置,程序中所有函數(shù)都是并行的,函數(shù)之間不存在包含(即嵌套)關(guān)系,只存在調(diào)用關(guān)系。1.5.2 C語言程序書寫格式C語言具有語句簡潔的特點(diǎn),C語言程序的可讀性比較差。因此,為了增強(qiáng)C語言的可讀性,正確的書寫格式就顯得十分重要。同樣一個程序采用不同的書寫方法。盡管都可以得到相同的結(jié)果,有的書寫方法可讀性強(qiáng),有的書
40、寫方法可讀性差。讀者不妨分析下列程序的輸出結(jié)果, 例1.習(xí)分析下列程序的輸出結(jié)果: 程序內(nèi)容如下:Multiply(x, y) int x,y;return(x,Y); main () int a, b;a=5 B=6;printf( ”%dn”, multiply (a,b) ); ) 讀者一定會發(fā)現(xiàn)這個程序不容易讀懂。主要是書寫上沒有按照習(xí)慣的格式。語言書寫要求比較自由,一般只要一個單詞不得分開寫,單詞之間用空白符分隔,而空白符包含空格符、水平制表符和換行符等。因此,例1. 3中的程序書寫上并沒有詞法錯誤。執(zhí)行該程序后,會在屏幕上顯示出如下結(jié)果:30 如果將該程序重新書寫一遍,如下所示。
41、例1. 4將例1. 3程序重新書寫如下:rnultiply(x,y) Int,x,y; return(x * y); main() Int a,b; printf (%dn , multiply La, b); 這種書寫格式比較好,使得程序比較好讀。該程序由兩個函數(shù)組成:main ( )函數(shù)是主函數(shù),multiply( )函數(shù)是被調(diào)用函數(shù)。執(zhí)行該程序后,先執(zhí)行main ( )函數(shù),主函數(shù)中定義了a和b是int型變量,并給a和b分別賦了值。在printf ()函數(shù)中,有一個參數(shù),該參數(shù)是調(diào)用multiply()函數(shù),通過將實(shí)參a和b的值傳送給對應(yīng)的形參x和y,在被調(diào)用函數(shù)中通過返回語句將表達(dá)式x
42、y的值返回給調(diào)用函數(shù),即將返回值按%d的格式顯示在屏幕上,其結(jié)果為30 可見,書寫格式與可讀性有很大關(guān)系。下面將給出書寫C語言程序的常用格式以及應(yīng)注意的事項。 (1) C語言程序一般是一行寫一個語句,也可以一行寫幾個語句,還可以一個語句寫幾行。一般情況下,一個語句寫在多行上不用續(xù)行符。但是,有的編譯系統(tǒng)有時需要用續(xù)行符進(jìn)行續(xù)行,即在續(xù)行的前一行末尾加上反斜線()這個續(xù)行符。語句不需加行號,只有在goto語句轉(zhuǎn)向到的語句前需加語句標(biāo)號。 (2)每個語句(包括說明語句和執(zhí)行語句)的末尾必須有一個分號(;)。分號是語句的組成部分,不可缺少,即使程序中最后一個語句也要加分號。要注意:一個語句沒有結(jié)束,
43、在換行前不要加分號。 (3)花括號的對齊方式常用的有三種格式(K&.R, Allman, whitesmiths),本書采用了AIlman格式,該格式規(guī)定每個花括號都單獨(dú)成行,并且左花括號和閉花括號都與使用它們的語句對齊,而花括號中的內(nèi)容向右縮進(jìn)兩個字符。 在說明語句中,使用花括號作為初始值表時和在枚舉類型定義中用花括號作為枚舉符表的定界時,花括號不必獨(dú)占一行。例如:int a=1,2,3.4; Enurm color black,blue,red,yellow ; (4)在書寫程序中可使用/*/對任何部分注釋,以增加程序的可讀性。1.5.3 C語言程序?qū)崿F(xiàn) 學(xué)習(xí)C語言離不開編寫和運(yùn)行e語言程
44、序。在了解一些c語言的初步知識以后,就應(yīng)該上機(jī)練習(xí)編寫和運(yùn)行c語言的程序,通過上機(jī)實(shí)踐來加深對c語言的認(rèn)識和理解。如何實(shí)現(xiàn)c語言程序呢?在不同的環(huán)境下實(shí)現(xiàn)的方法稍有差異。c語言程序?qū)崿F(xiàn)可歸納如下三步: 1.編輯 編輯是用c語言寫出源程序。其方法有兩種:一種是使用編輯程序編寫好c語言源程序,并以。c為后綴存人文件系統(tǒng);另一種是使用c語言編譯系統(tǒng)提供的編輯器來編寫源程序,并且存入文件系統(tǒng)。 2.編譯連接 編譯連接是兩個過程,有些編譯系統(tǒng)常將它們連在一起,實(shí)際上是將源程序先進(jìn)行編譯,通過編譯可發(fā)現(xiàn)源程序中的語法錯誤。如有錯誤,則系統(tǒng)將其“錯誤信息”顯示在屏幕上,用戶根據(jù)指出的錯誤信息,對源程序進(jìn)行編輯修改,修改后再重新編譯,直到編譯無錯為止。編譯后生成機(jī)器指令程序。被稱為目標(biāo)程序。此目標(biāo)程序名與相應(yīng)的源程序同名,其后綴為。obj。編譯過程完成后,便開始連接過程。所謂連接是將目標(biāo)程序與庫函數(shù)或其他程序連接成為可執(zhí)行的目標(biāo)程序,簡稱可執(zhí)行程序。一般可執(zhí)行程序名同源文件名,后級為,exe, 3.運(yùn)行 當(dāng)程序編譯連接后,生成了可執(zhí)行程序便可運(yùn)行了。這里,還需補(bǔ)充一點(diǎn),在連接過程中可能出現(xiàn)錯誤,這時必須根據(jù)“出錯信息”所指示的錯誤進(jìn)行修改后,再進(jìn)行連接直到不出錯為止,這樣才會生成可執(zhí)行文件。運(yùn)行可執(zhí)行文件,一般屏幕上顯示出輸出結(jié)果。運(yùn)行C語言程序的環(huán)境很多,編譯系統(tǒng)也很多,不同
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同解除條件合同范本
- 反擔(dān)保合同范例app
- 小學(xué)課題申報書 寫字
- 高校省級課題申報書
- 員工合同范本表
- 師德建設(shè)課題申報書
- 企業(yè)員工租房合同范本
- 吉安農(nóng)村生意轉(zhuǎn)讓合同范例
- 申報課題沒申報書
- 醫(yī)療務(wù)工合同范本武威市
- 2025年國航機(jī)務(wù)系統(tǒng)AMECO工程師崗位校園招聘筆試參考題庫附帶答案詳解
- 《物聯(lián)網(wǎng)中間件》課件
- 2025年中國建材集團(tuán)所屬中建材聯(lián)合投資有限公司招聘筆試參考題庫附帶答案詳解
- 水幕噴淋系統(tǒng)的工作原理與應(yīng)用
- 門樓施工方案
- 全國職業(yè)院校技能大賽高職組(康復(fù)治療技術(shù)賽項)考試及答案
- 2024年08月河北唐山銀行第二批社會招考筆試歷年參考題庫附帶答案詳解
- 小學(xué)生拗九節(jié)課件
- 《智能制造技術(shù)基礎(chǔ)》課件-第2章 智能系統(tǒng)方案與設(shè)計
- 人教版PEP小學(xué)五年級英語下冊全冊教案(含計劃)
- 2025年幼兒園膳食工作計劃
評論
0/150
提交評論