C語言知識點串講_第1頁
C語言知識點串講_第2頁
C語言知識點串講_第3頁
C語言知識點串講_第4頁
C語言知識點串講_第5頁
已閱讀5頁,還剩130頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言知識點串講1.1程序設(shè)計和程序設(shè)計語言1.程序從最一般的意義來說,程序是對解決某個計算問題的方法(算法)步驟的一種描述;而從計算機來說,計算機程序是用某種計算機能理解并執(zhí)行的計算機語言作為描述語言,對解決問題的方法步驟的描述。計算機執(zhí)行按程序所描述的方法步驟,能完成指定的功能。所以,程序就是供計算機執(zhí)行后能完成特定功能的指令序列。一個計算機程序主要描述兩部分內(nèi)容:描述問題的每個對象和對象之間的關(guān)系,以及描述對這些對象作處理的處理規(guī)則。其中關(guān)于對象及對象之間的關(guān)系是數(shù)據(jù)結(jié)構(gòu)的內(nèi)容,而處理規(guī)則是求解的算法。針對問題所涉及的對象和要完成的處理,設(shè)計合理的數(shù)據(jù)結(jié)構(gòu)??捎行У睾喕惴ǎ瑪?shù)據(jù)結(jié)構(gòu)和算法是程序最主要的兩個方面。2.程序設(shè)計的任條和主要步驟程序設(shè)計的任務(wù)就是分析解決問題的方法步驟(算法),并將解決問題算法的方法步驟用計算機語言記錄下來。程序設(shè)計的主要步驟包括:認(rèn)識問題、設(shè)計解決問題的算法、按算法編寫程序、調(diào)試和測試程序。在程序開發(fā)過程中,上述步驟可能有反復(fù),如發(fā)現(xiàn)程序有錯,嚴(yán)重情況可能會要求重新認(rèn)識問題和重新設(shè)計算法等。3.機器語言和匯編語言計算機能直接識別和執(zhí)行的二進(jìn)制代碼稱為計算機的機器語言。用有助于記憶的符號來代表二進(jìn)制代碼,稱為匯編語言。匯編語言與機器語言幾乎有一對一的關(guān)系。用匯編語言編寫的程序稱為“匯編源程序”,匯編源程序不能在計算機上直接執(zhí)行,需要用匯編程序?qū)R編源程序翻譯成機器語言程序,然后執(zhí)行由匯編程序翻譯出來的機器語言程序。機器語言和匯編語言是與具體計算機緊密相關(guān)的,稱它們是面向機器的語言。4.高級語言與機器語言和匯編語言相比較,高級語言與具體計算機無關(guān),是一種能方便描述算法過程的計算機程序設(shè)計語言。高級語言種類千差萬別,但一般包含有以下四種成分:數(shù)據(jù)成分用來描述程序所涉及的數(shù)據(jù);運算成分用來描述運算;控制成分用來表達(dá)程序的控制構(gòu)造;傳輸成分用來表達(dá)數(shù)據(jù)的傳輸。由于高級語言程序主要是描述計算機的解題過程,即描述復(fù)雜的加工處理過程,所以也稱這種高級語言為面向過程語言。用高級語言編寫的程序稱為“源程序”。計算機不能直接技源程序的語句運行,通常有解釋方式和編譯方式兩種方法在計算機上執(zhí)行源程序。解釋方式,即讓計算機運行解釋程序,解釋程序逐句取出源程序中的語句,對它作解釋執(zhí)行,輸入數(shù)據(jù),產(chǎn)生結(jié)果。編譯方式,即先運行編譯程序,從源程序一次翻譯產(chǎn)生計算機可直接執(zhí)行的二進(jìn)制程序(稱為目標(biāo)程序);然后讓計算機執(zhí)行目標(biāo)程序,輸入數(shù)據(jù),產(chǎn)生結(jié)果。解釋方式的主要優(yōu)點是計算機與人的交互性好,調(diào)試程序時,能一邊執(zhí)行一邊直接改錯,能較快得到一個正確的程序。缺點是逐句解釋執(zhí)行,運行速度慢。1編譯方式的主要優(yōu)點是計算機運行目標(biāo)程序快,缺點是修改源程序后必須重新編譯以產(chǎn)生新的目標(biāo)程序?,F(xiàn)在也有將上述兩種方式結(jié)合起來的,即先編譯源程序,產(chǎn)生計算機還是不能直接執(zhí)行的中間代碼,然后讓解釋程序解釋執(zhí)行中間代碼。這樣做的好處首先是比直接解釋執(zhí)行快;更大的好處是中間代碼獨立于計算機,只要有相應(yīng)的解釋程序,就可在任何計算機上運行。5.面向問題語言面向問題語言是為了易于描述和求解某類特定領(lǐng)域的問題而專門設(shè)計的一種非過程語言。用面向問題語言解題時,不僅擺脫計算機的內(nèi)部邏輯,也不必關(guān)心問題的求解算法和求解的過程,只需指出問題是做什么,數(shù)據(jù)的輸入和輸出形式,就能由相應(yīng)的計算機系統(tǒng)得到所需結(jié)果。如報表語言、SOL(StructuredQueryLanguage)語言等。SQL語言是數(shù)據(jù)庫查詢和操縱語言,能直接使用數(shù)據(jù)庫管理系統(tǒng)。由于使用面向問題語言來解題只要告訴計算機做什么,不必告訴計算機如何做,能方便用戶的使用和提高程序的開發(fā)速度。但實現(xiàn)面向問題語言的系統(tǒng)從最一般的意義下實現(xiàn)問題如何求解,通常實現(xiàn)的效率較低。另外,面向問題語言要求問題已有通用的求解方法,目前其應(yīng)用范圍還比較狹窄。1.2C語言基礎(chǔ).C語言的發(fā)展史目的是為編寫系統(tǒng)程序研制一種高級程序語言。1963年,參照ALGOL60語言,增添了能描述計算機硬件特性的能力,稱為CPL語言。1967年,作進(jìn)一步的簡化,改稱BCPL語言。1970年,再進(jìn)一步簡化,并突出了硬件處理能力,稱為B語言,并用于編寫UNIX操作系統(tǒng)。1972年,進(jìn)一步擴充數(shù)據(jù)類型和恢復(fù)通用性,稱為C語言,并用C語言重寫了UNIX操作系統(tǒng)。以后C語言開始流行,為統(tǒng)一版本,ANSI于1987年制定了C語言的標(biāo)準(zhǔn),稱為ANSIC.2.C語言的特點C語言主要有以下特點:(1)與其它高級語言比較,更接近硬件,與機器語言比較,又更接近算法。C程序易編寫、易讀、易查錯和易修改。(2)數(shù)據(jù)類型與運算符豐富,描述算法更簡單方便。(3)C程序的結(jié)構(gòu)簡單,語言包含的語句類別少。(4)是一種結(jié)構(gòu)化語言,提供完善的結(jié)構(gòu)化程序控制結(jié)構(gòu),適宜采用結(jié)構(gòu)化程序設(shè)計方法開發(fā)程序。(5)也是一種模塊化程序設(shè)計語言,適宜大型程序的研制和開發(fā)。(6)通常C系統(tǒng)都提供大量的庫函數(shù)供程序開發(fā)人員選用,能簡化程序開發(fā)。3.C程序的基本結(jié)構(gòu)通常一個C程序包括一個或多個函數(shù),其中必有一個main函數(shù),稱為主函數(shù)。C函數(shù)的定義主要2分兩部分:函數(shù)說明部分和函數(shù)體。其中函數(shù)體由C語言的語句序列組成,實現(xiàn)函數(shù)的功能。C程序總是從主函數(shù)開始執(zhí)行。4.C語言的基本語句C語言的語句主要分以下幾種:(l)數(shù)據(jù)定義語句——用來定義程序中使用的各種數(shù)據(jù),及能存放數(shù)據(jù)的對象的名稱和特性。(2)表達(dá)式語句——任何在有意義的表達(dá)式之后接上分號(;)構(gòu)成的語句。最常見的有賦值表達(dá)式和函數(shù)調(diào)用表達(dá)式后加分號構(gòu)成的表達(dá)式語句,分別稱為賦值語句和函數(shù)調(diào)用語句。(3)流程控制語句——用來控制程序執(zhí)行過程的語句。它們有選擇控制語句、循環(huán)控制語句、break語句。continue語句、return語句和goto語句等。(4)復(fù)合語句——用花括號括住一個語句序列,即構(gòu)成復(fù)合語句。復(fù)合語句用來表示其中的語句序列是一個整體,在邏輯上是單個語句,并且強調(diào)其中的語句按順序逐一執(zhí)行。(5)空語句——只有單個分號(;)構(gòu)成的語句。空語句表示沒有任何操作,用于選擇控制或循環(huán)控制沒有特別被控制的成分語句,或在復(fù)合語句的末尾放置語句標(biāo)號等。(6)其它語句——如類型定義語句等。5.注釋為了便于閱讀和理解程序,可以在程序的任何地方插入注釋,以說明程序、函數(shù)、程序段。語句的功能或采用的算法。C語言的注釋是用/*“和”*/“括住的任意字符列。程序編譯時,注釋不參與編譯,也不會出現(xiàn)在目標(biāo)程序中。6.C語言的字符集C語言的基本字符集有:(l)數(shù)字10個(0~9)。(2)英文字母大、小寫各26個(A~Z,a~z)。(3)鍵盤符號33個,用于構(gòu)成特殊符號,其中下線字符“起一個英文字母的作用,以構(gòu)成標(biāo)識符等語法成分。(4)轉(zhuǎn)義字符,轉(zhuǎn)義字符是由字符(\)開始后跟單個字符或若干字符組成,通常用于表示控制代碼或特殊符號。7.C程序的基本詞匯C語言的基本詞匯有:(1)字面形式常量。如100、15.0、?A?、“ABC”。3(2)特殊符號。主要是運算符。(3)保留字。在程序或語句中是用來表示特定語法含義的英文單詞。(4)標(biāo)識符。用于命名程序?qū)ο螅缱兞?、常量、函?shù)、標(biāo)號等。在C語言中,一個合理的標(biāo)識符由英文字母或下線符開頭,后跟或不跟由字母、下線符、數(shù)字符組成的字符列?!阋韵戮€符開頭的標(biāo)識符作為系統(tǒng)內(nèi)部使用。利用基本詞匯,按照給定的C語言的句法規(guī)則就可命名程序?qū)ο螅枋霰磉_(dá)式計算、構(gòu)造語句、函數(shù),直至整個程序2.1C語言的數(shù)據(jù)類型數(shù)據(jù)類型包含兩方面的內(nèi)容:數(shù)據(jù)的表示和對數(shù)據(jù)加工的操作。數(shù)據(jù)的全部可能表示構(gòu)成數(shù)據(jù)類型的值的集合。數(shù)據(jù)全部合理的操作構(gòu)成數(shù)據(jù)類型的操作集合。在C語言中,把整型、實型和字符型稱為基本數(shù)據(jù)類型,又稱整型和實型為數(shù)值型。為了描述更復(fù)雜的數(shù)據(jù)結(jié)構(gòu),C語言還有構(gòu)造類型、指針類型、放舉類型和空類型。構(gòu)造類型是指由若干個相關(guān)的數(shù)據(jù)組合在一起形成的一種復(fù)雜數(shù)據(jù)類型。1.整型整型數(shù)據(jù)按其存儲在內(nèi)存中的二進(jìn)位信息的最高位是當(dāng)作數(shù)值信息位還是當(dāng)作數(shù)據(jù)的符號位,將整型數(shù)據(jù)分成帶符號整型和無符號整型兩種。每種整型又按所需的字節(jié)個數(shù)的多少分成三種。所以整型共有6種:帶符號整型(int)、帶符號短整型(shortint)、帶符號長整型(longint,或long)、無符號整型(unsignedint)、無符號短整型(unsignedshortint)以無符號長整型(unsignedlong)。2.實型實型數(shù)據(jù)有表示范圍和精度兩個不同的特征,為了適應(yīng)數(shù)的范圍和精度的不同要求,實型數(shù)據(jù)分三種類型:單精度型(也稱浮點型float)、雙精度型(double)、長雙精度型(longdouble)3.構(gòu)造類型構(gòu)造類型是指由若干個相關(guān)的數(shù)據(jù)組合在一起形成的一種復(fù)雜數(shù)據(jù)類型,構(gòu)造數(shù)據(jù)類型的成分?jǐn)?shù)據(jù)可以是基本數(shù)據(jù)類型的,也可以是別的構(gòu)造類型的。按構(gòu)造方式和構(gòu)造要求區(qū)分,構(gòu)造類型主要有數(shù)組類型、結(jié)構(gòu)類型和共用類型。數(shù)組類型是由相同類型的數(shù)據(jù)組成;結(jié)構(gòu)類型可以由不同類型的數(shù)據(jù)組成;當(dāng)不同數(shù)據(jù)類型不會同時使用時,以節(jié)約內(nèi)存,讓不同數(shù)據(jù)占用同一區(qū)域,這就是共用類型。4.指針類型指針類型是取程序?qū)ο螅ㄈ缱兞浚┰趦?nèi)存中占居的地址為值的一種特殊的數(shù)據(jù)類型。5.枚舉類型當(dāng)變量只取很少幾種可能的值,并分別用標(biāo)識符對值命名時,這種變量的數(shù)據(jù)類型可用枚舉類4型來表示。如變量表示一個星期中的某一天,就可用校舉類型描述該變量的類型,并以星期見的英文名對日期命名,對應(yīng)的變量取某日的星期名稱為其值。6.void類型用保留字VOid表示的數(shù)據(jù)類型有兩種完全相反的意思,或表示沒有數(shù)據(jù)(沒有結(jié)果、沒有形式參數(shù)),或表示某種任意類型的數(shù)據(jù)(如又與指針結(jié)合,用void.標(biāo)記)。void表示空類型,void.表示任意數(shù)據(jù)的指針類型,程序如要使用void.類型的數(shù)據(jù),應(yīng)該將它強制地轉(zhuǎn)換成某種具體的指針類型。2.2常量常量是指程序運行過程中其值不可改變的數(shù)據(jù)。常量按其值的表現(xiàn)形式可分為如下類型:整型常量、實型常量、字符型常量、字符串常量和指針常量。1.整型常量C語言整型常量的書寫形式有三種:(1)十進(jìn)制整數(shù)。通常整數(shù)的寫法,如0,123,-45,+25.(2)八進(jìn)制整數(shù)。以數(shù)字符0開頭并由數(shù)字符0-7組成的數(shù)字符序列,為八進(jìn)制整數(shù)。如0123表示八進(jìn)制整數(shù),其值等于十進(jìn)制整數(shù)l*8*8+2*8+3=83.(3)十六進(jìn)制整數(shù)。十六進(jìn)制整數(shù)以O(shè)X(或OX)開頭的整數(shù)。表示十六進(jìn)制數(shù)的數(shù)字將有16個,它們分別是0-9和A、B、C、D、E、F,其中六個英文字母也可以小寫。例如,0x123表示十六進(jìn)制整數(shù),其值等于十進(jìn)制整數(shù)1*16*16+2*16+3=291;oxabc,其值等于10*16*16+11+16+12=2748.整型常量也可在整數(shù)之后接上字母L(或l),特別指明它是long型的。整型常量也可在整數(shù)之后接上字母U(或u),特別指明是不帶符號的,即是unsigned型的。為指明不帶符號的long型整型常量,則需在整數(shù)之后同時加上字母U和L,表明該整型常量是unsignedlong型的。整型數(shù)據(jù)以二進(jìn)制形式存放,要求短整型數(shù)據(jù)的字節(jié)數(shù)不能大于整型數(shù)據(jù)的字節(jié)數(shù);整型數(shù)據(jù)的字節(jié)數(shù)不能大于長整型數(shù)據(jù)的字節(jié)數(shù)。對于帶符號的整數(shù),用二進(jìn)制代碼的最左二進(jìn)位作為數(shù)的符號,1表示負(fù)數(shù),0表示正數(shù)。2.實型常量C語言實型常量的一般書寫格式是:正負(fù)號整數(shù)部分。小數(shù)部分指數(shù)部分其中,正負(fù)號可有可無,無正負(fù)號即為正實數(shù);整數(shù)部分和小數(shù)部分都是十進(jìn)數(shù)字符序列;指數(shù)部分是e(或E)后接上正負(fù)號(正號可有可無)和十進(jìn)數(shù)字符序列。按上述格式書寫實型常量,另有兩條限制:5(l)整數(shù)部分和小數(shù)部分可以任選,但不可同時都沒有。(2)小數(shù)點和指數(shù)部分不可以同時都沒有。ANSIC引入兩個后綴字符,用f標(biāo)識float型實型常量,用1(或L)標(biāo)識fongdouble型實型常量,而無后綴符的實型常量被認(rèn)為是double型的實型常量。要注意實型常量的有效位數(shù),不要以為寫上的數(shù)字都能被計算機所接受。在大多數(shù)C系統(tǒng)中,一個float型實型數(shù)據(jù)在內(nèi)存中占用4個字節(jié)(32個二進(jìn)位),約7個十進(jìn)位有效數(shù)字,能表示絕對值最接近0的實數(shù)約為10的-38次方,最大的實數(shù)約為10的38次方。例如,對于代碼floatx=123456.123f,在大多數(shù)系統(tǒng)中,實型常量123456.123f的最后兩位數(shù)字是無效的。double型實型數(shù)據(jù)占用8個字節(jié)(64個二進(jìn)位),約15個十進(jìn)位有效數(shù)字,能表示絕對值最接近0的實數(shù)約為10的一308次方,最大的實數(shù)約為10的308次方。3.字符常量字符型數(shù)據(jù)用于表示一個字符值,但字符型數(shù)據(jù)的內(nèi)部表示是字符的ASCll代碼(8位二進(jìn)位的二進(jìn)制形式)。字符型數(shù)據(jù)的類型符用char來標(biāo)記。字符型常量的書寫方法:(l)普通字符——用單引號括起一個字符。如?a?、?b?、?B?、?$?。(2)特殊字符——用?\字符或字符列采標(biāo)記。這種標(biāo)記方法有三種:?\特定字符?,標(biāo)記特定控制符,如換行符用?\n?來標(biāo)記。??\1至3個人進(jìn)制數(shù)字?,以人進(jìn)數(shù)表示字符的ASCll代碼。?\X1至2個十六進(jìn)制數(shù)字符?,以十六進(jìn)制數(shù)表示字符的ASCll代碼。由于字符以代碼存放,所以也可把字符值當(dāng)作一個小整數(shù)。反之,一個小整數(shù)也可把它理解為是某個字符的代碼,把它當(dāng)作一個字符。4.字符串常量字符串常量用來表示一個字符序列,它的書寫方法用雙引號括住字符序列。例如:“ABC”、“”等。字符串常量“”是一個空字符串,即不含任何有效字符的字符串。字符串?dāng)?shù)據(jù)順序存儲字符串字符的ASCll代碼,并在最后字符后面存儲一個H進(jìn)制代碼全為0的特殊字符,用來標(biāo)記字符串的結(jié)束。所以字符串常量“1234”在內(nèi)存占5個字節(jié),而空字符串只占一個字節(jié)。字符串中的字符也可以是轉(zhuǎn)義字符。5.符號常量為了提高程序的可讀性,常量可以用以下形式命名:#define標(biāo)識符常量其中的標(biāo)識符也稱作符號常量,這里的常量是前面所述的某種常量、或是程序中前面定義的符號常量。例如:6#defineMAXN1002.3變量變量是程序執(zhí)行時,其值允許改變的數(shù)據(jù)對象,用來存儲輸入數(shù)據(jù)、計算的中間結(jié)果和程序的最終結(jié)果等。1.變量定義變量用標(biāo)識符命名,通過變量定義引入的變量名習(xí)慣用英文字母開頭,C系統(tǒng)可能也會預(yù)定義一些標(biāo)記系統(tǒng)特性的變量,系統(tǒng)定義的變量習(xí)慣用下線字符開頭。變量的數(shù)據(jù)特性由變量定義時指定的類型確定。若定義指定數(shù)據(jù)類型的變量(即不在指定數(shù)據(jù)類型基礎(chǔ)上定義新數(shù)據(jù)類型的變量,如指定類型的指針、數(shù)組等),這種變量定義的句法為:數(shù)據(jù)類型符變量名1,變量名2,……;編繹系統(tǒng)根據(jù)變量的數(shù)據(jù)類型確定存放它的值所需要的內(nèi)存字節(jié)數(shù),變量值的內(nèi)部表示形多也由其類型確定。2.內(nèi)部變量和外部變量變量按其定義出現(xiàn)在程序中的位置不同分成兩類:在函數(shù)內(nèi)定義的變量稱為內(nèi)部變量,而在函數(shù)之外(函數(shù)之間)定義的變量稱為外部變量。3.變量的存儲類型系統(tǒng)按程序?qū)τ嬎銠C存儲空間使用的不同要求,將內(nèi)存分成不同用途的塊,與計算機的寄存器一起將存儲空間分成不同類別。而C程序通過指定變量的存儲類表明變量的不同的使用要求,讓系統(tǒng)將變量分配于不同的內(nèi)存塊或寄存器。如在上述變量定義形式中,還要指定變量的存儲類型,變量定義的形式為:存儲類型符數(shù)據(jù)類型符變量名1,變量名2,…;其中存儲類型有四種:auto(自動的)、static(靜態(tài)的)、register寄存器的)和extem外部的)。外部變量只允許被指定為靜態(tài)的,或不指定其存儲類型。內(nèi)部變量可以被指定為自動的或靜態(tài)的、或寄存器的、或不指定存儲類型,若不指定存儲類型,它就是自動的。自動變量是內(nèi)部變量,在函數(shù)內(nèi)或復(fù)合語句內(nèi)定義,它們被分配在堆棧區(qū)。靜態(tài)變量可以是內(nèi)部變量,也可以是外部變量。靜態(tài)變量表示永久性和專用性,即在程序執(zhí)行過程中一直存在,局限于定義它的函數(shù)(內(nèi)部靜態(tài)變量)或局限于定義它的程序文件中那些函數(shù)(外部靜態(tài)變量)。靜態(tài)變量被分配在與程序相聯(lián)的內(nèi)存數(shù)據(jù)區(qū)。寄存器變量是函數(shù)的內(nèi)部變量或參數(shù),也是一種臨時性的變量。如因函數(shù)使用非常頻繁程序希望將它分配在寄存器,程序就可將變量指定為寄存器的,但編譯系統(tǒng)也可能把它當(dāng)作動變量處理。指定存儲類型是外部的,實際b是告訴編譯器,這個變量是一個外部變量,在這里要使它,而它7的定義或在別的程序文件或在后面的程序段等別的地方。4.變量的作用域和生存期變量的使用要注意變量的作用域(可使用范圍)和生存期(存在的時間)。C語言規(guī)定,內(nèi)部變量的作用域只局限于定義它的函數(shù)或復(fù)合語句。自動的內(nèi)部變量是一種臨時性變量,函數(shù)被調(diào)用時分配,函數(shù)執(zhí)行結(jié)束時釋放。而靜態(tài)變量在程序執(zhí)行前分配,直至程序結(jié)束才釋放。由于靜態(tài)的內(nèi)部變量在函數(shù)結(jié)束時,依舊保持存儲,函數(shù)上一次調(diào)用時留在內(nèi)部靜態(tài)變量中的結(jié)果能被下一次調(diào)用時繼續(xù)使用。外部變量也在程序啟動前分配,直至程序執(zhí)行結(jié)束釋放。普通的外部變量能提供別的源程序文件中的函數(shù)使用(要對它作外部說明);靜態(tài)的外部變量只能供定義它的源程序中的全部函數(shù)專用。由于外部變量能供整個程序使用,所以外部量不能重名。5.變量定義初始化變量定義是對變量的存儲空間提出一種要求,存儲空間分配后,變量的初值通常是不拔的。但程序可以要求系統(tǒng)在為變量分配存儲空間同時為變量設(shè)定初值,這就是變量定義初始化。在變量的定義形式中,在變量名之后接上“=初值表達(dá)式”,該初值表達(dá)式的值就作為該變量的初值。C語言另有約定,對于靜態(tài)變量和外部變量,若定義它們時未指定初值,系統(tǒng)給它們設(shè)置成全部二進(jìn)位都是0的值。以下是各種變量定義的例子:(l)定義整型,并對其初始化。ShortminInt=100;inti=l,j=2,k=3;longp=-1L,q=1234567890L;unsignedusi=254u;unsignedlongup=4294967295UL;(2)定義字符型變量,并對其初始化。charch=?A?;(3)定義實型(浮點型、雙精度型)變量,并對其初始化。floatf=1.23456f;doubled=1.2345678op87654;2.4運算符每個運算符都代表對運算對象的某種運算,都有自已特定的運算規(guī)則,規(guī)定運算對象的個數(shù)、運算對象數(shù)據(jù)類型,以及運算結(jié)果的數(shù)據(jù)類型。C語言還規(guī)定運算符有不同的優(yōu)先級和結(jié)合性。運算符的優(yōu)先級指表達(dá)式求值時,按運算符的優(yōu)先級由高到低的次序計算。如“先乘除后加減”。運算符的結(jié)合性是指運算符要求它的運算對象對它的結(jié)合方向。結(jié)合性確定了在相同優(yōu)先級運算符連續(xù)出現(xiàn)的情況下運算對象與運算符結(jié)合的順序,通常也是計算順序。如算術(shù)運算符的結(jié)合性是從左至右8的,則連續(xù)的加減或連續(xù)的乘除是從左向右計算。而賦值運算符的結(jié)合性是從右至左的,則連續(xù)的賦值運算是從右向左逐個計算賦值。在C語言中,要特別注意某些運算符因運算對象數(shù)據(jù)類型不同,可能有不同的意義。1.算術(shù)運算符算術(shù)運算符的運算對象是基本數(shù)據(jù)類型的數(shù)據(jù),實現(xiàn)通常的取整、取負(fù)、四則運算、求兩整數(shù)相除后的余數(shù)的運算和增1減1運算。特別要留心的是整除運算、求余運算、增1運算和減1運算。對兩個整型數(shù)據(jù)執(zhí)行除運算(/),稱為整除運算,要特別注意的是兩個整型數(shù)據(jù)的整除運算的結(jié)果是整型的,如表達(dá)式3/2的結(jié)果為1,表達(dá)式2/3的結(jié)果為0.求余運算符(%)要求參與運算的兩個運算對象均為整型數(shù)據(jù),如5%3的值為2.一般來說,求余運算所得結(jié)果的符號與被除數(shù)的符號相同。如-5%3的值為-2,5%-3的值為2.增1(++)和減1(——)運算符都是單目運算符,以整型、字符型和指針型變量為運算對象,并改變運算對象的值。按它們出現(xiàn)在變量之前和之后兩種不同情況,其作用有微妙的差別。前綴++前綴++的一般形式是++變量例如,若X是整型或某種指針類型的變量,則++X使變量X的值增大1個單位,并以X的新值作為表達(dá)式“++X”的運算結(jié)果。如以下語句執(zhí)行前,變量X的值為1,語句j=++x;使變量X的值變成3,變量j的值也為3.這里所說的一個“單位”是指:如果X是整型的,則++x就是普通的解釋:“x的值比原值增加1”;x是指針,它指向數(shù)組的某個元素,則++x使它指向數(shù)組的后一個元素。后綴++后綴++的一般形式是變量++表達(dá)式“變量++”運算結(jié)果是該變量的原來值,在確定了表達(dá)式結(jié)果之后,用與前綴++相同的方式增大該變量的值1個單位。前綴++和后綴++都能使變量的值增加1個單位,但是它們所代表的表達(dá)式的值卻不相同,前者是變量增加后的值,后者是變量還未增加的原先值。例如i,j為整型變量,且i的值為4,以下分別用?和?表記的代碼將使j獲得不同的值:?j=++i;?j=i++9都使變量i的值變?yōu)?,但?使j的值為5;?使j的值為4.前綴——前綴——的一般形式是——變量前綴——使變量的情減少(或后退)l個單位,并以變量的新值為表達(dá)式“——變量”的運算結(jié)果。后綴——后綴——的一般形式是變量——后綴——作用于變量時,以該變量的值作為表達(dá)式“變量——”的運算結(jié)果,即先取其值為結(jié)果,然后用與前綴——相同的方式減少該變量1個單位。后綴——與前綴——的區(qū)別類似于后綴++與前綴++的區(qū)別。類似前面的例子,依舊假定i的值為4,兩代碼?j=——i?j=i——都使變量i的值變?yōu)?,但?使j的值為3;?使j的值為4.使用++和——運算符時,其運算對象僅適用于變量,不能是常量等數(shù)據(jù)值表達(dá)式。如4++或(i+j)++都是不合法的。++和——是帶有副作用的運算符。建議讀者不要在一個表達(dá)式中對同一變量多次使用這樣的運算符,可能會發(fā)生意想不到的結(jié)果。如i的值為4,對表達(dá)式(i++)+(i++)可能認(rèn)為它的值為9(+5)。然而在TURBOC和MSC系統(tǒng)中,它的值為8.而表達(dá)式(++i)+(++i)的值為12.這是因為這些系統(tǒng)在處理i++時,先使用i的原值計算整個表達(dá)式,然后再讓i連續(xù)兩次自增;處理++i時,在計算表達(dá)式值之前,先對i執(zhí)行兩次自增,然后才計算表達(dá)式。放前一個表達(dá)式的值為8,后一個表達(dá)式的值為12.因+與++(-與——類似)是兩個不同運算符,對于類似表達(dá)式i+++j會有不同的理解:(i++)+j或i+(++j)。C編譯的處理方法是自左至右讓盡可能多的字符組成一個合法的句法單位(如標(biāo)識符、數(shù)字、運算符等)。因此,i+++j被解釋成(i++)+j,而不是i+(++j)。10增1(++)和減1(——)運算符的結(jié)合方向是自右至左的。2.關(guān)系運算符用于關(guān)系運算的關(guān)系運算符有六個:<(小于)、>(大于)、<=(小于等于)、>=(大于等于)、==(等于)和!=(不等)。關(guān)系運算是雙目運算,它的運算對象可以是基本數(shù)據(jù)類型的數(shù)據(jù),用于比較大??;或是指向同一個數(shù)組兩元素的指針,用于比較前后關(guān)系。在高級語言中,習(xí)慣稱條件滿足為“真”,不滿足為“假”。特別在C語言中約定:比較后,條件滿足(真)的值為1;比較后,條件不滿足(假)的值為兒用關(guān)系運算符將兩個子表達(dá)式連接起來,構(gòu)成關(guān)系比較表達(dá)式,求得結(jié)果為1(真)或0(假)。六個關(guān)系運算符中,運算符(<、<=、>、>=)的優(yōu)先級高于運算符(==,!=)。如表達(dá)式X>y==C<d等價于表達(dá)式(X>y)==(C<d)。另外,為便于描述兩個復(fù)雜算式的比較,關(guān)系運算符的優(yōu)先級低于算術(shù)運算符的優(yōu)先級。設(shè)有i=1,j=2,k=3,則表達(dá)式i>j的值為“假”,即表達(dá)式的值為0;表達(dá)式i==k>j的值為“真”,即表達(dá)式的值為1(先計算k>j,其值為1,等于i);i+j<k的值為“假”,即表達(dá)式的值為0.關(guān)系運算符的結(jié)合方向是自左至右。仍設(shè)i=1,j=2,k=3,則表達(dá)式k>j>i的值為0(先計算k>j,其值為1,再計算1>1,結(jié)果為0)。3.邏輯運算符用于邏輯運算的邏輯運算符有三個:&&(邏輯與)、||(邏輯或)、?。ㄟ壿嫹牵┢渲羞\算符“&&”和“||”是雙目運算符,要求有兩個整型或字符型的運算對象,用于連接多個判定條件,構(gòu)成更復(fù)雜的條件判定;運算符“!”是單目運算符,用于描述對給定條件的否定判定。邏輯運算產(chǎn)生的結(jié)果也只能是1或0.1表示邏輯運算結(jié)果為“真”;用0表示運算結(jié)果為“假”。在判定一個運算對象的值為“真”或“假”時,以運算對象的值不等于零為“真”,運算對象的值等于0為“假”。邏輯運算符中,按優(yōu)先級排列為:邏輯非運算符!的優(yōu)先級高于邏輯與運算符&&,邏輯與運算符&&的優(yōu)先級高于邏輯或運算符||.另外,&&和||的優(yōu)先級低于關(guān)系運算符的優(yōu)先級;!的優(yōu)先級高于算術(shù)運算符的優(yōu)先級。邏輯運算符||和&&的結(jié)合方向是自左至右,而邏輯運算符!的結(jié)合方向是自有至左。需要特別指出的是,“邏輯與”和“邏輯或”運算符分別有以下性質(zhì):a&&b,僅當(dāng)a為0時,不管b為何值(實際上不再計算b),結(jié)果為0.a||b,僅當(dāng)a為1時,不管b為何值(實際上不再計算b),結(jié)果為1.上述性質(zhì)就是說,對于表達(dá)式a&&b,僅當(dāng)子表達(dá)式a為非零時,才計算子表達(dá)式b;對于表達(dá)式a||b,僅當(dāng)子表達(dá)式a為0時,才計算子表達(dá)式b.在具體編寫程序時,也應(yīng)利用以上性質(zhì)。對于兩11個條件的邏輯與,如當(dāng)條件1不成立情況下,條件2的值沒有意義或不可計算時,邏輯表達(dá)式應(yīng)寫成:條件l&&條件2避免在條件1不成立情況下,計算條件2.如有條件:y/x>2且x?。?,應(yīng)寫成:x?。?&&y/x>2當(dāng)X為0時,不會計算y/X.而寫成:y/X>2&&X?。?是不正確的,因為當(dāng)X為0時,不能計算y/X.對于邏輯或也有類似情況。由于上述性質(zhì),在計算連續(xù)的邏輯與和邏輯或運算時,實際上不分優(yōu)先級,而是順序從左至右計算。在計算邏輯與運算時,若有左運算對象的值為0,則不再繼續(xù)計算邏輯與運算,并立即以0為邏輯與運算的結(jié)果;在計算邏輯或運算時,若有左運算對象的值為1,則不再繼續(xù)計算邏輯或運算,并立即以1為邏輯或運算的結(jié)果。在順序計算邏輯表達(dá)式的過程中,一旦確定了表達(dá)式的最終結(jié)果,就不再繼續(xù)計算。4.賦值運算符賦值運算的最簡單形式是變量=表達(dá)式其中“=”是賦值運算符。賦值運算的執(zhí)行過程是:(l)先計算賦值運算符右端的表達(dá)式;(2)如表達(dá)式的類型與賦值運算符左邊的變量類型不同(僅限于基本類型),將表達(dá)式值的類型自動轉(zhuǎn)換成變量的類型;(3)將求得的值賦給變量,即存儲到由變量所占的內(nèi)存中。簡單地說,計算表達(dá)式的值,將該值賦給變量。賦值運算也有結(jié)果,經(jīng)賦值運算后,賦值表達(dá)式具有賦值后賦位運算符左邊變量同樣的類型和值。因賦位運算有值,所以可以進(jìn)一步參與運算,特別是可以再賦植給其它變量。賦值運算符的結(jié)合性是?邊有至左“的,當(dāng)連續(xù)有多個賦值運算時,則從右至左逐個賦值。如有變量定義:intk;doublex;則賦值表達(dá)式:x=k=3.5是先將實數(shù)3.5自動轉(zhuǎn)換成整數(shù)3賦給整型變量k,然后又將整數(shù)3自動轉(zhuǎn)換成實數(shù)3.0賦給實型變量X.所以,k的值是3,X的值是3.0.12在程序中,經(jīng)常遇到在變量當(dāng)前值的基礎(chǔ)上作某種修正的運算。如x=x+5.0這類運算的特點是:變量既是運算對象,又是賦值對象。為避免對同一存儲對象的地址重復(fù)計算,C語言弓隊復(fù)合賦值運算符。它們是+=、-=、*=、%=、〈〈=、〉〉=、&=、^=、|=通常,記日為某個雙目運算符,復(fù)合賦值運算xθ=e其等效的表達(dá)式為x=xθ(e)注意,當(dāng)e是一個復(fù)雜表達(dá)式時,等效表達(dá)式的括號是必需的。如y*=a+b的等效表達(dá)式是y=y(tǒng)*(a+b)賦值運算符和所有復(fù)合賦值運算符的優(yōu)先級全相同,并且都是“自右至左”結(jié)合,它們的優(yōu)先級高于遠(yuǎn)號運算符的優(yōu)先級,低于其它所有運算符的優(yōu)先級。逗號運算符“,”用于將若干表達(dá)式連接起來順序地逐個計算。連續(xù)返號運算的一般形式為:表達(dá)式1,表達(dá)式2,…,表達(dá)式n它的計算順序是從左到右逐一計算各表達(dá)式,并以表達(dá)式n的值為連續(xù)逗號運算的結(jié)果。例如,表達(dá)式x=(i=3,i*2)使i等于3,X等于6.其實,逗號運算只是把多個表達(dá)式串聯(lián)起來,在許多情況下,使用逗號運算的目的只是想分別計算各個表達(dá)式的值,而并非想使用逗號運算中最后那個表達(dá)式的值。逗號運算最常用于for結(jié)構(gòu)中,用于給多個變量登初值,或用于對多個變量的值逐一修改等。逗號運算符的優(yōu)先級最低,其結(jié)合性是“自左向右”的。條件運算是一個三目運算,有三個運算對象。條件運算的一般形式為表達(dá)式1?表達(dá)式2:表達(dá)式3條件運算的計算規(guī)則是:13(1)計算表達(dá)式1的值;(2)如果表達(dá)式1的值非0(真),則計算表達(dá)式2,并以表達(dá)式2的值為條件運算的結(jié)果(不再計算表達(dá)式3);(3)如果表達(dá)式1的值為0(假),則計算表達(dá)式3,并以表達(dá)式3的值為條件運算的結(jié)果(不再計算表達(dá)式2)。例如,表達(dá)式X>y?X:y如果x>y條件為真,則條件運算取x值,否則取y值。條件運算符(?:)的優(yōu)先級高于賦值運算符,低于邏輯運算符,也低于關(guān)系運算符和算術(shù)運算符。例如,表達(dá)式max=X>y?X:y+l等效于表達(dá)式max=((x>y)?x:(y+l))條件運算符的結(jié)合性為“自右至左”。例如,表達(dá)式X>y?X:u>V?u:V等效于表達(dá)式X>y?X:(u>V?u:V)長度運算以字節(jié)為單位給出其運算對象所需(或所占)的字節(jié)數(shù),運算對象可以是任何類型的數(shù)據(jù)對象或數(shù)據(jù)類型。它是根據(jù)對象的類型來確定對象(所需)的字節(jié)數(shù)的。長度運算有兩種書寫形式:sizeof變量名或sizeof(類型名)如果有某種類型為江的變量V,其中t可以是系統(tǒng)提供的類型或用戶自己定義的類型,可以是簡單的,也可以是數(shù)組、結(jié)構(gòu)等。則sizeofV就是變量V所占的字節(jié)數(shù)。如有intj;doublex;表達(dá)式sizeofj和sizeOfx分別是變量j和x所占的字節(jié)數(shù)。sizeof(t)是系統(tǒng)為分配一個類型為t的數(shù)據(jù)對象所需的字節(jié)數(shù)。如sizeOf(int)和sizeof14(dou-ble)分別是系統(tǒng)為分配一個類型為int和double變量所需的字節(jié)數(shù)。位運算的運算對象只能是整型或字符型數(shù)據(jù),位運算把運算對象看作是由二進(jìn)位組成的位率信息,按位完成指定的運算,得到位串信息的結(jié)果。位運算符又可分成兩類:一類是位邏輯運算符,另一類是位移位運算符。位邏輯運算符有:&(按位與)、|(按位或)、^(按位異或)、~(按位取反)位移位運算有:<<(位左移)和>>(位右移)其中按位取反運算符是單目運算符。其余均為雙位運算符。位邏輯運算符的優(yōu)先級從高到低,依次為~、&、^、|、,其中的結(jié)合方向自右至左,且優(yōu)先級高于算術(shù)運算符,其余運算符的結(jié)合方向都是自左至右,且優(yōu)先級低于關(guān)系運算符。位移位運算符的優(yōu)先級低于算術(shù)運算符,高于關(guān)系運算符,它們的結(jié)合方向是自左至右。按位與運算符(&)按位與運算將將兩個運算對象的對應(yīng)位按位遵照以下規(guī)則進(jìn)行計算:0&0=0,0&l=0,1&0=0,1&l=1即同為一的位,結(jié)果為1,否則結(jié)果為0.例如,設(shè)3的內(nèi)部表示為00000011,5的內(nèi)部表示為00000101,則3&5的結(jié)果為00000001按位與運算有兩種典型用法。一是取一個位率信息的某幾位,如以下代碼截取。的最低7位、&0177t二是讓某變量保留某幾位,其余位設(shè)置成0,如以下代碼讓X只保留最低6位:x=X&077、以上用法都先要設(shè)計好一個常數(shù),該常數(shù)只有需要的位是互,不需要的位是0.用它與指定的位串信息按位與。按位或運算符(|)按位或運算將兩個運算對象的對應(yīng)位按位遵照以下規(guī)則進(jìn)行計算:0|0=0,0|l=1,1|0=l,1|1=1即只要有五個是1的位,結(jié)果為1,否則為0.例如,023|035結(jié)果為037.按位或運算的典型用法是將一個位串信息的某幾位設(shè)置成1.如將要獲得最右4位為1,其它位與變量j的其它位相同,可用邏輯或運算017|j.若要把這結(jié)果賦給變量j,可寫成:j=017|j按位異或運算符(^)按位異或運算將兩個運算對象的對應(yīng)位按位遵照以下規(guī)則進(jìn)行計算:0^0=0,0^1=l,l^0=l,1^l=0即相應(yīng)位的值相同的,結(jié)果為0,不相同的結(jié)果為l.15例如,013^035的結(jié)果為026.異或運算的意思是求兩個運算對象相應(yīng)位值是否相異,相異的為1,相同的為0.按位異或運算的典型用法是求一個位串信息的某幾位信息的反。如欲求整型變量j的最右4位信息的反,用邏輯異或運算017^j,就能求得j最右4位的信息的反,即原來為1的位,結(jié)果是0;原來為0的位,結(jié)果是1.按位取反運算符(~)按位取反運算是單目運算,用來求一個位串信息按位的反,即那些為0的位,結(jié)果是1;而那些為1的位,結(jié)果是幾例如,~7的結(jié)果為0xfff8.取反運算常用來生成與系統(tǒng)實現(xiàn)無關(guān)的常數(shù)。如要將變量X最低6位置成0,其余位不變,可用代碼X=X&~077實現(xiàn)。以上代碼與整數(shù)X用2個字節(jié)還是用4個字節(jié)來實現(xiàn)無關(guān)。當(dāng)兩個長度不同的數(shù)據(jù)進(jìn)行位運算時(例如long型數(shù)據(jù)與int型數(shù)據(jù)),將兩個運算對象的右端對齊進(jìn)行位運算。如果短的數(shù)為正數(shù),高位用0補滿;如果短的數(shù)為負(fù)數(shù),高位用1補滿。如果短的為無符號整數(shù),則高位總是用0補滿。位運算用來對位串信息進(jìn)行運算,得到位串信息結(jié)果。如以下代碼能取整型變量k的位串信息的最右邊為亞的信息位:((k-l)^k)&k.位左移運算符(<<)位左移運算符用來將左運算對象(整型或字符型數(shù)據(jù))作為二進(jìn)位信息串作整體向左移動,移動的位數(shù)由右運算對象指定,右端空出的位用0補充,得到新的位申信息。例如014<<2,結(jié)果為060,即48.位右移運算符(>>)位右移運算將一個位串信息向右移指定的位,右端移出的位的信息被丟棄。例如12>>2,結(jié)果為3.與左移相反,對于小整數(shù),每右移1位,相當(dāng)于除以人在右移時,需要注意符號位問題。對無符號數(shù)據(jù),右移時,左端空出的位用0補充。對于帶符號的數(shù)據(jù),如果移位前符號位為剛正數(shù)),則左端也是用0補充;如果移位前符號位為1(負(fù)數(shù)),則左端用0或用1補充,這取決于計算機系統(tǒng)。對于負(fù)數(shù)右移,稱用0補充的系統(tǒng)為“邏輯右移”,用1補充的系統(tǒng)為“算術(shù)右移”。以下代碼能說明讀者上機的系統(tǒng)所采用的右移方法:printf(“%d\n\n\n”,-2>>4);者輸出結(jié)果為一l,是采用算術(shù)右移;輸出結(jié)果為一個大整數(shù),則為邏輯右移。2.5表達(dá)式表達(dá)式就是將運算符與運算對象連接起來描述計算的式予。按表達(dá)式的構(gòu)成規(guī)則分,表達(dá)式可分以下幾類:初等量表達(dá)式是常量、變量、字符串、函數(shù)調(diào)用、數(shù)組元素、結(jié)構(gòu)成分和帶圓括號的表達(dá)式等。單目運算表達(dá)式是由單目運算符和一個運算對象構(gòu)成的表達(dá)式。單目運算符的優(yōu)先級低于初等量的運算符,它們的結(jié)合性都是“自有向左”結(jié)合。16雙目運算表達(dá)式的一般形式為表達(dá)式雙目運算符表達(dá)式雙目運算符自左向右結(jié)合。按雙目運算符分類,又可分算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式、賦值表達(dá)式和遠(yuǎn)號表達(dá)式。由于C語言沒有特別的真、假值,判定時,以非0值為真,以0值為假。所以,前述的C語言的各種表達(dá)式的計算結(jié)果都可作為邏輯值。條件運算表達(dá)式的一般形式為表達(dá)式?表達(dá)式:表達(dá)式條件運算符自右向左結(jié)合。2.6數(shù)據(jù)類型轉(zhuǎn)換C語言允許基本數(shù)據(jù)類型中的不同類型數(shù)據(jù)進(jìn)行混合運算。因不同類型的數(shù)據(jù)所占內(nèi)存字節(jié)數(shù)和其內(nèi)部表示形式的不同,在算術(shù)運算中(其它運算例外)一個運算符所涉及到的各運算對象,能根據(jù)運算對象的情況,要求運算對象的值從一種類型轉(zhuǎn)換成另一種類型。這種類型轉(zhuǎn)換是自動進(jìn)行的,稱作隱式類型轉(zhuǎn)換。隱式類型轉(zhuǎn)換嚴(yán)格遵守以下規(guī)則,按所列優(yōu)先順序?qū)嵭蓄愋娃D(zhuǎn)換。(1)如有運算對象是longdouble型的,則其余運算對象也轉(zhuǎn)換成longdoube型。(2)如有運算對象是double型的,則其余運算對象也轉(zhuǎn)換成double型。(3)如有運算對象是float型的,則其余運算對象也轉(zhuǎn)換成float型。(4)如有運算對象是unsignedlongint型的,則其余運算對象也轉(zhuǎn)換成unsignedlongint型。(5)如有運算對象是longint型的,則其余運算對象也轉(zhuǎn)換成longint型。(6)如有運算對象是unsignedint型的,則其余運算對象都轉(zhuǎn)換成unsignedint型。(7)最后,運算對象和結(jié)果都是int型的。根據(jù)最后一條規(guī)則,兩個char型和short型運算對象都自動轉(zhuǎn)換成int型參與運算,并且結(jié)果是int型的。算術(shù)運算中,基本數(shù)據(jù)類型的混合運算會發(fā)生隱式類型轉(zhuǎn)換,當(dāng)要求與隱式類型轉(zhuǎn)換規(guī)則不一17致時,可在表達(dá)式中用顯式類型轉(zhuǎn)換運算,強制地將一種類型的表達(dá)式值轉(zhuǎn)換成另一種類型的位。顯式類型轉(zhuǎn)換的書寫形式為(類型名)表達(dá)式其中(類型名)是對其后的表達(dá)式作強制類型轉(zhuǎn)換運算,它將表達(dá)式的值強制地轉(zhuǎn)換成類型名所指明的類型。例如,庫函數(shù)sqrt()是求一個double型值的平方根。為求整型變量m的平方根,正確的寫法是sqrt((double)m)在求m的平方根之前,先將m的值強制地轉(zhuǎn)換成double型,然后去調(diào)用函數(shù)sqrt()。類型轉(zhuǎn)換不只改變表達(dá)式的值的類型,也可能會因兩種表示形式上的差異,值的大小會有一些誤差3.1順序結(jié)構(gòu)順序結(jié)構(gòu)用來描述一個計算或操作序列,表示從序列的第一個計算開始,順序執(zhí)行序列中的每個計算,直至序列的最后一個計算。通常,一個復(fù)雜的計算過程不能用一個簡單的計算來表達(dá),而需把復(fù)雜的計算描述成簡單計算的序列。在C語言中,將順序執(zhí)行的語句序列,用花括號括起來,構(gòu)成C語言的復(fù)合語句。在邏輯上視復(fù)合語句為單個語句,它也能用作其它結(jié)構(gòu)語句的成分語句。在很多場合,復(fù)合語句內(nèi)還會包含其它結(jié)構(gòu)語句。在順序結(jié)構(gòu)中,最頻繁使用的是表達(dá)式之后接上一個分號。例如,在賦值表達(dá)式之后接上分號,完成用表達(dá)式的值更新某變量,習(xí)慣稱這種表達(dá)式語句為賦值語句;在函數(shù)調(diào)用之后接上分號,完成指定的計算功能,習(xí)慣稱這種表達(dá)式語句為函數(shù)調(diào)用語句。最基本的輸入輸出庫函數(shù)有字符輸入函數(shù)、字符輸出函數(shù)、格式輸入函數(shù)和格式輸出函數(shù)。字符輸入函數(shù)getchar()的功能是從標(biāo)準(zhǔn)輸入設(shè)備上(通常是鍵盤終端)讀取一個字符。該函數(shù)沒有參數(shù),對它的每次調(diào)用,就返回下一個輸入字符的ASCII代碼值。例如,執(zhí)行語句ch=getchar();使變量ch得到輸入字符的ASCII代碼值。一般情況下,這里的變量ch為char型或int型。當(dāng)程序在輸入字符后,用ch判定輸入文件是否結(jié)束時,變量ch必須是int型的。這是因為文件結(jié)束標(biāo)記值是-1,是int型的。程序中常用EOF表示當(dāng)前讀人字符是文件結(jié)束標(biāo)記,常量名EOF在文件Stdio.h中被定義為-1.18字符輸出函數(shù)ptuchar()有一個字符的ASCII代碼值參數(shù),函數(shù)調(diào)用putchar(ch)的功能是將以出值為其ASCII代碼的字符輸出到標(biāo)準(zhǔn)輸出設(shè)備(通常是終端顯示屏)上。這里ch可以是char型或int型數(shù)據(jù)。格式輸入函數(shù)scanf()的作用是從標(biāo)準(zhǔn)設(shè)備讀人字符序列,按格式控制字符率所包含的格式解釋輸入字符序列,并將解釋結(jié)果存儲到對應(yīng)的變量中。調(diào)用格式輸入函數(shù)scanf()的一般形式為scanf(格式控制字符串,變量地址,變量地址,……)格式控制字符串是字符串表達(dá)式,通常是由一對雙引號括起來的字符串常量,直接用于解釋輸入字符序列。格式控制字符率可以包含:?空白類字符(空格符或制表符),它們使輸入跳過空白類字符,直到遇到下一個非空白類字符。?普通字符(不包括%),它們要求輸入字符流中下一個字符與它相同。?格式轉(zhuǎn)換說明,以字符?%?開頭至輸入格式符結(jié)束的字符序列組成。格式轉(zhuǎn)換說明引導(dǎo)對下一輸入字符段進(jìn)行轉(zhuǎn)換。格式轉(zhuǎn)換說明的一般形式為%[*][w][h/l/L]輸入格式符輸入格式符共有14個,有12種不同輸入格式,其中大綱要求掌握的7種輸入格式符的意義見表3.1.用方括號括住的內(nèi)容是輸入格式修飾說明,可以缺省,它們的意義是:(1)*——星號(賦值抑制符),對應(yīng)的輸入數(shù)據(jù)項按格式要求被輸入,但結(jié)果不存儲。帶星號的格式轉(zhuǎn)換說明不對應(yīng)變量地址。用它來跳過一個輸入數(shù)據(jù)項。(2)——整型常數(shù)(域?qū)捳f明),表示輸入數(shù)據(jù)項的字符段的有效字符數(shù)。若實際輸入字符段的字符數(shù)小于W,以實際有效字符為準(zhǔn)。對于數(shù)值數(shù)據(jù)輸入格式來說,輸入域定義為從下一個非空白類字符起(因此可能跳過若干個空格符、制表符、換行符),到一個與數(shù)值數(shù)據(jù)相矛盾的字符,或直到輸入了指定個數(shù)的字符數(shù);對于字符率輸入格式來說,輸入域定義為從下一個非空白類字符起,輸入非空白類字符,直至遇到空白類字符,或直到輸入了指定個數(shù)的非空白字符。(3)h/l/L長度修飾符,指明輸入數(shù)據(jù)項的存儲類型。h修飾格式符d,o,X時,表示輸入的整數(shù)按短整型存儲。l修飾格式符d,O,X時,表示輸入的整數(shù)按長整型存儲。l修飾格式符e,f時,表示輸入的實數(shù)按double型存儲。19缺省時,對于格式符d,o,x,表示輸入的整數(shù)按int整型存儲;對于格式符e,f,表示輸入的實數(shù)是按float型存儲。表3.l常用輸入格式符表格式符意義d輸入十進(jìn)制形式的整型數(shù)據(jù)O以人進(jìn)制形式輸入整型數(shù)據(jù)X以十六進(jìn)制形式輸入整型數(shù)據(jù)C輸入字符數(shù)據(jù)S輸入字符串e,f輸入實型數(shù)據(jù)說明:(1)格式控制字符率之后給出的是變量地址,而不是變量名(除非是指針)。如要為整型變量n輸入數(shù)據(jù),寫成scanf(“%d",n)是不正確的,應(yīng)寫成scanf(”%d“,&n)(2)如果在格式控制字符串中除格式轉(zhuǎn)換說明和空白符之外,還有其它字符,則在輸入數(shù)據(jù)時應(yīng)輸入與這些字符相同的字符。例如,scanf(“%d,%d??,&i,&j)則在為i,j輸入數(shù)據(jù)時,緊接在第一個整型數(shù)據(jù)之后,需要有一個逗號字符,如輸入1,2是正確的;而輸入12等其它形式都是不正確的。(3)在用“%c”格式轉(zhuǎn)換說明輸入字符時,空白類字符和用轉(zhuǎn)義字符表示的字符都能作為有效字符輸入。要輸入一串空白類字符之后的第一個非空白類字符,可采用格式“%C”。格式字符率中的空格符使輸入跳過空白類字符到第一個非空白類字符,然后被C格式輸入。(4)為整型變量輸入整數(shù)時,若變量類型為短整型,則必須在格式符之前加長度修飾說明h;若變量類型為長整型,則必須在格式符之前加長度修飾說明1.(5)輸入數(shù)值數(shù)據(jù)時,輸入字符流中的前導(dǎo)空白類字符會被自動跳過,從空白類字符后的數(shù)值20數(shù)據(jù)字符開始輸入。構(gòu)成數(shù)值數(shù)據(jù)的字符被輸入轉(zhuǎn)換成計算機的內(nèi)部表示,并存儲結(jié)果。若第一個非空白類字符不能構(gòu)成數(shù)值字符,則立即結(jié)束輸入。(6)S格式用來輸入字符串,對應(yīng)的變量地址為字符列表(數(shù)組)的首地址,該數(shù)組必須大到足以容納可能輸入的最長字符串。在輸入字符流中,跳過前導(dǎo)的空白類字符,以非空白類字符開始,以后隨的第一個空白類字符結(jié)束的非空白類字符的字符序列作為一個字符串。scanf()函數(shù)在輸入的字符序列之后自動添加字符率結(jié)束標(biāo)記符'\0'(因此,存儲輸入字符序列的字符數(shù)組的長度必須比實際最長字符串的字符數(shù)多1)。(7)e,f格式用未輸入實數(shù),對應(yīng)的數(shù)據(jù)存儲地址為實型數(shù)據(jù)存儲地址。如格式轉(zhuǎn)換說明中含有長度修飾說明1,則為double型變量地址;若無長度修飾說明,則為float型變量地址。輸入數(shù)據(jù)的字符序列是由正負(fù)號(可有可無)、十進(jìn)制數(shù)字串、帶小數(shù)點的小數(shù)部分(可有可無)。以e或E開頭的指數(shù)部分(可有可無)組成。(8)在跳過前導(dǎo)空白符后,正在輸入數(shù)值數(shù)據(jù)和字符串時,遇以下情況,就認(rèn)為該數(shù)據(jù)結(jié)束:?遇空白類字符:空白符、制表符、換行符。?已讀人由有效字符數(shù)所指定的字符數(shù)。如“%4d多至4個數(shù)字符。?對于輸入數(shù)值數(shù)據(jù),下一個字符不能構(gòu)成正確的數(shù)據(jù)格式。如scanf(“%d%C%f,&i,&c,&x)假定變量i,c,x分別為int型、char型和float型。若輸入字符列為:123a123x.26則變量i為123,變量c為字符a,變量x為123.0.(9)輸入數(shù)據(jù)時,將字符流轉(zhuǎn)換成內(nèi)部表示后,存儲到對應(yīng)變量中。例如,scanf(“%3d%*4d%d”,&i,&j)如輸入字符行為12345678將使變量i=123,j=78.其中數(shù)據(jù)456因賦值抑制符*的作用被跳過。一般從鍵盤讀入數(shù)據(jù),不指定輸入數(shù)據(jù)項的有效字符數(shù),數(shù)據(jù)項與數(shù)據(jù)項之間用空白符,或制表符,或回車符分隔。格式輸出函數(shù)printf()的作用是將輸出項接指定的格式排版輸出到標(biāo)準(zhǔn)設(shè)備上(通常是終端顯示屏)。調(diào)用printf()函數(shù)的一般形式為printf(格式控制字符串,表達(dá)式,表達(dá)式,……)21其中格式控制字符率是字符串表達(dá)式,通常是由用一對雙引號括起來的字符串常量。它包含三類字符:普通字符、轉(zhuǎn)義字符和格式轉(zhuǎn)換說明,它們的作用分別如下:(l)普通字符,要求按原樣輸出。(2)轉(zhuǎn)義字符,要求技轉(zhuǎn)義字符的意義輸出,如?\n?,表示輸出時回車換行,?\b?表示退格等。(3)格式轉(zhuǎn)換說明,以字符%開頭至格式符結(jié)束的字符列組成,其一般形式為%[-」「+」「」[#」「W][。p][h/l/L]輸出格式符其中用方括號括住的內(nèi)容是格式修飾說明,可以缺?。ú怀霈F(xiàn)),如“%d”、“%7.5f”等。每個格式轉(zhuǎn)換說明對應(yīng)一個輸出項,輸出項可以是常量、變量或表達(dá)式。格式轉(zhuǎn)換說明的作用是將對應(yīng)輸出項的內(nèi)容按格式符要求產(chǎn)生出字符列,并按格式修飾說明排版輸出。輸出格式符共有16個,有12種不同的格式,考試大綱只要求掌握表3.2所列的九種。3.2常用輸出格式符表格式符意義d或i整型數(shù)據(jù)以十進(jìn)制形式輸出o無符號整型數(shù)據(jù)以八進(jìn)制形式輸出X無符號整型數(shù)據(jù)以十六進(jìn)制形式輸出U元符號整型數(shù)據(jù)以十進(jìn)制形式輸出C字符的ASCll碼數(shù)據(jù),輸出對應(yīng)的字符S輸出字符串f以“整數(shù)部分。小數(shù)部分”形式輸出實型數(shù)據(jù)e以[-]n.nnnnne?xx輸出實型數(shù)據(jù)g以f或e格式輸出說明:(1)x格式符同。格式符一樣,把符號位作為數(shù)的一部分輸出。對于x格式,用字符a、b、c、d、e、f(或A、B、C、D、E、F)表示9之后的六個十六進(jìn)制數(shù)字符。(2)一個整數(shù),只要它的位在0-255范圍內(nèi),也可以用字符形式輸出,輸出以該整數(shù)為ASCII代碼的字符。反之,一個字符數(shù)據(jù)也可以用整數(shù)形式輸出,輸出該字符的ASCII代碼值。(3)f、e和g格式符用于輸出實型數(shù)據(jù),格式轉(zhuǎn)換時有四舍五人處理。對于f格式,小數(shù)點后的數(shù)字個數(shù)可由格式修飾說明p指定,若p為0,不顯示小數(shù)點。用e格式輸出時,對于非0實數(shù),小數(shù)點22前有一位非零數(shù)字,輸出格式中的有效位數(shù)可由格式修飾說明p指定;字符e(或E)之后是指數(shù),指數(shù)部分至少包含兩個數(shù)字。若輸出值的絕對值不小于1E+100,則指數(shù)部分多于兩位數(shù)字。g格式能根據(jù)表示數(shù)據(jù)所需字符的多少自動選擇f格式或e(或E)格式輸出實數(shù),選擇是以輸出時所需字符數(shù)多少為標(biāo)準(zhǔn)。格式修飾說明有七種,教材只介紹其中四種,它們的意義分別說明如下:(1)W域?qū)捳f明,W是一個十進(jìn)制整數(shù),表示輸出字段的字符數(shù)。若轉(zhuǎn)換后需要的字符個數(shù)比給出的W多,則以實際需要為準(zhǔn);若轉(zhuǎn)換后需要的字符數(shù)比W少,就在左邊用填充字符補足(若給出左邊對齊標(biāo)志(-),則在右邊補填充字符人通常用空白符作填充字符,若十進(jìn)制整數(shù)W之前有前導(dǎo)0(此0不表示以八進(jìn)制數(shù)給出字段寬度),則以字符0作填充字符。(2)-左對齊標(biāo)志,當(dāng)轉(zhuǎn)換后字符個數(shù)少于W時,在W所限定的字段寬度內(nèi),轉(zhuǎn)換所得字符列左對齊,右邊補填充符。缺省時,右對齊,左邊補填充符。(3)。p,其中p也是十進(jìn)制整數(shù)。對于g或e格式輸出,p指明輸出精度(有效數(shù)字位數(shù)),可以缺省,缺省值依賴于系統(tǒng)的規(guī)定(下面的例子設(shè)p的缺省值為6)。對于f格式輸出,p指明輸出字符列的小數(shù)點之后的數(shù)字個數(shù),可以缺省。對于S格式輸出,p指明最多輸出字符率的前p個字符,多余截斷。缺省時,字符串的內(nèi)容全部輸出。對于d.i、O、u、x和X,表示至少出現(xiàn)的數(shù)字個數(shù)。同域?qū)捳f明一樣,p也可以是字符*,而實際值由后面一個輸出項的整數(shù)值給出,若該值為負(fù)值,相當(dāng)于沒有給出p.(4)l指明輸出項的類型。長度修飾符l用于格式符d、i、o、u、X,表示對應(yīng)的輸出項是長整型或無符號長整型。以下是格式輸出的一些例子。例如,inti=1234;longj=1234567L;printf(“%d,%+6d,%06d,%-6d,%5ld”,i,i,i,i,j)將輸出:1234,+1234,00l234,1234,1234567注意:對于long型數(shù)據(jù)輸出,必須在格式符之前有長度修飾符l,表明輸出long型數(shù)據(jù)。若intk=045;longp=-1L;printf(“%#o,%4o,%6lo”,k,k,p)23將輸出:045,45,37777777777而printf(“%#x,%4x,%6lx”,k,k,p)將輸出:0x25,25,F(xiàn)FFFFFFF若unsignedintu=65535u;prinif(“%d,%4u,%ln?,u,u,p)將輸出:-l,65535,4294967295若charch1=045,ch2=?a?;printf(“%c,%-3c,%2c”,ch1,ch2,ch2)將輸出:%,a,a若chars[]==“ABCDEF?;printf(”%3s,%4.2s,%-7.4s,%.5s“,s,s,s,s)將輸出:ABCDEF,AB,ABCD,ABCDE若floatf=123.4567f;doubled=123.456789;printf(“%。4f,%8.3f,%-7.2f,%。7f”,f,f,f,d)將輸出:123.4567,123.457,123.46,123.4567890而printf(“%。6e,%10.2e,%-10.2e,%.2e,%.9e”,f,f,f,f,d)將輸出:1.23457e+02,1.2e+02,1.2e+02,l.2e+02,1.23456789e+02注意:實型數(shù)據(jù)的有效位數(shù),不要以為凡是打?。@示)的數(shù)字都是準(zhǔn)確的。一般地,float型只有7位有效數(shù)字,double型有15位有效數(shù)字。實際上,因計算過程中的誤差積累,通常不能達(dá)到所說的有效位數(shù)。另外,要注意%g格式的特殊性,當(dāng)它選擇“整數(shù)部分。小數(shù)部分”形式時,因格式修飾說明。p在e格式中的意義是指明精度,所以p的值是整數(shù)部分位數(shù)與小數(shù)部分位數(shù)之和(不是f格式中的小數(shù)位數(shù))。如有24floatg1=12.34f,g2=0.0f;doubled=123.456789,g=123456.789;printf(“%g,%G”,g1,g2);printf(“%f,%g,%g,%g,%.8g”?,g1,g1,d,g,g)將輸出:12.34,012.340000,12.34,123.457,123457,123456.793.3選擇結(jié)構(gòu)選擇結(jié)構(gòu)有單分支選擇結(jié)構(gòu)、雙分支選擇結(jié)構(gòu)和多分支選擇結(jié)構(gòu)。C語言提供相應(yīng)的if語句和switCh語句分別用來描述這些選擇結(jié)構(gòu)。單分支選擇語句有以下形式:if(表達(dá)式)語句這種形式的語句執(zhí)行過程是:(l)計算表達(dá)式的值;(2)測試表達(dá)式的值。若表達(dá)式的值非0,則執(zhí)行它的成分語句,并結(jié)束單分支選擇的執(zhí)行;若表達(dá)式的值為0,則立即結(jié)束單分支選擇的執(zhí)行。漢分支選擇語句有以下形式:if(表達(dá)式)語句1else語句2雙分支選擇語句根據(jù)給定的選擇條件表達(dá)式值為非0或為0兩種情況,從兩個供選擇的成分語句中自動選取一個成分語句執(zhí)行。雙分支選擇語句的執(zhí)行過程是:25(1)計算表達(dá)式的值;(2)測試表達(dá)式的值并選擇執(zhí)行語句。若表達(dá)式的值非0,則執(zhí)行語句1,并結(jié)束雙分支選擇語句;否則執(zhí)行語句2,并結(jié)束雙分支選擇語句。注意;無論條件表達(dá)式的值為何值,只能執(zhí)行語句1或語句2中的一個。當(dāng)雙分文選擇語句中的else之后的語句2為空語句時,就變成單分支選擇語句。單分文選擇語句和雙分支選擇語句統(tǒng)稱且語句。在if語句中的語句、語句1和語句2可以是任何語句。當(dāng)它們中的某一個需用語句序列描述時,必須將這語句序列寫成復(fù)合語句。當(dāng)它們中的某一個又是if語句時,就呈現(xiàn)嵌套的if語句形式。這時應(yīng)注意else與if的對應(yīng)關(guān)系。C語言約定else總是與它前面最接近的if對應(yīng)。為正確書寫if語句,特別說明以下幾點:(1)若if語句中的語句、語句1、語句2是一個簡單語句,則這些簡單語句之后會有一個分號,這是C語言對這些簡單語句的要求。(2)若if語句中的語句、語句l、語句2要用語句序列(即為順序結(jié)構(gòu))來實現(xiàn),則必須將它們改寫成復(fù)合語句,即邏輯上把它們變成一個語句。(3)在if語句中,每個else總要與它前面的if對應(yīng),不可能出現(xiàn)沒有對應(yīng)if的else.3.多分支選擇語句多分支選擇結(jié)構(gòu)通常有n(>2)個不同情況和n+1個供選擇的分支。多分支選擇結(jié)構(gòu)也可用前敘述的嵌套if語句來描述,但因if語句嵌套深度太多不便于程序編寫,也不便于理解,為此C語言專門提供了一種實現(xiàn)多分支選擇結(jié)構(gòu)的語句,這就是switCh語句。它的一般形式是:。switeh(表達(dá)式){case常量表達(dá)式1:語句序列1case常量表達(dá)式1:語句序列2case常量表達(dá)式n:語句序列ndefalt:語句序列n+1}對switeh語句需說明以下幾點:(1)switch后面括號內(nèi)的表達(dá)式只限于是整型表達(dá)式或字符型表達(dá)式或枚舉型表達(dá)式。(2)case后的常量表達(dá)式稱為情況前綴,要求所有常量表達(dá)式的值互不相同,并與switch后面括號內(nèi)的表達(dá)式值的類型相一致。(3)語句序列由任意條合法的C語句構(gòu)成,也可以沒有語句。26(4)情況前綴default可以缺省,但至多出現(xiàn)一次,習(xí)慣總是將它寫在全部情況前綴之后,如有必要也可寫在某case之前。switch語句的執(zhí)行過程解釋如下:先計算表達(dá)式的值,以該值依次與各case之后的常量表達(dá)式的值比較,按下列規(guī)則,選擇執(zhí)行的入口:如果表達(dá)式的值等于某個常量表達(dá)式的值,switch語句就從該常量表達(dá)式之后的語句序列的第一個語句開始執(zhí)行,然后一直向下執(zhí)行,或自動依次進(jìn)入后繼常量表達(dá)式之后的語句序列繼續(xù)執(zhí)行(如沒有break語句),或執(zhí)行完語句序列n+1,結(jié)束switch語句的執(zhí)行;或在執(zhí)行某個語句序列過程中遇到轉(zhuǎn)出該switch語句的語句(如break語句),就停止向下執(zhí)行,結(jié)束switch語句的執(zhí)行。如果沒有相匹配的常量表達(dá)式,就從以default為情況前綴的語句序列開始執(zhí)行。如果沒有相匹配的常量表達(dá)式,也沒有defaul情況前綴,則該switch語句的這次執(zhí)行立即結(jié)束。由上述解釋可知,“case常量表達(dá)式”只是起語句序列入口的作用。在執(zhí)行switch語句時,根據(jù)switch之后的表達(dá)式的值找到與該值匹配的入口,就從此人口處開始執(zhí)行,只要未遇到轉(zhuǎn)出該switch語句的break語句或goto語句,就一直向下執(zhí)行,也不再理會經(jīng)過的case后的常量表達(dá)式。如果要使各種情況互相排斥,僅執(zhí)行各case所對應(yīng)的語句序列,最常用的辦法是使用break語句,各語句序列都以break語句結(jié)束。在switch語句中,執(zhí)行break語句將使控制轉(zhuǎn)向switch語句的后繼語句。由于switch語句的表達(dá)式不允許是實型的,當(dāng)應(yīng)用于實型值選擇情況時,通常需作以下處理:將實表達(dá)式乘上一個適當(dāng)?shù)谋壤蜃?,使較大的實表達(dá)式值映照到一個較小的范圍上,然后再將它轉(zhuǎn)換到整型。3.4循環(huán)結(jié)構(gòu)循環(huán)計算用循環(huán)結(jié)構(gòu)來描述。C語言提供三種描述不同循環(huán)結(jié)構(gòu)的語句,它們是while語句、do-while語句和for語句。1.while語句while語句用來描述while型循環(huán)結(jié)構(gòu),它的一般形式為while(表達(dá)式)語句while語句的執(zhí)行過程是:(1)計算while之后的表達(dá)式的值;(2)測試表達(dá)式的值,當(dāng)值為非0時,轉(zhuǎn)步驟3;如值為0,則結(jié)束while語句;27(3)執(zhí)行while語句的循環(huán)體,并轉(zhuǎn)步驟1(從而構(gòu)成循環(huán))。一般來說,為使while語句的執(zhí)行能正常結(jié)束,如控制循環(huán)的條件表達(dá)式包含有變量,循環(huán)體的執(zhí)行應(yīng)能更新這些變量的值,使表達(dá)式的值會變?yōu)?.有時,很難直接寫出while后的條件,這時可以簡單地寫上1,而在循環(huán)體中含有當(dāng)某條件滿足時,執(zhí)行如break語句那樣的控制轉(zhuǎn)移語句,使控制跳出while循環(huán),即呈以下結(jié)構(gòu)形式:while(1){……if(表達(dá)式)break;……}:2.do-while語句do-while語句用來描述do-while型循環(huán)結(jié)構(gòu),它的一般形式為;do語句while(表達(dá)式);其中的語句是do-while語句的循環(huán)體。do-while語句的執(zhí)行過程是:(1)執(zhí)行do-while語句的循環(huán)體;(2)求while之后的表達(dá)式的值;(3)測試表達(dá)式的值,當(dāng)值為非0,轉(zhuǎn)步驟1(從而構(gòu)成循環(huán));如值為0,則結(jié)束do-while語句。與while語句一樣,當(dāng)循環(huán)體由多個語句組成時,必須把它們書寫成復(fù)合語句。有些用while語句描述的循環(huán)計算,也能用do-while語句描述。然而,并非總是如此。兩者的重要區(qū)別在于:執(zhí)行循環(huán)體時,對作為循環(huán)條件的表達(dá)式的求值和測試的時間不同。while語句對作為循環(huán)條件的表達(dá)式求值和測試在執(zhí)行循環(huán)體之前,而do-While語句對作為循環(huán)條件的表達(dá)式求值和測試在執(zhí)行循環(huán)體之后。對于do-while語句,它的循環(huán)體至少被執(zhí)行一次,而while語句的循環(huán)體在作為循環(huán)條件的表達(dá)式值一開始就為0的情況下,就一次也未被執(zhí)行。如能保證while語句中的作為循環(huán)條件的表達(dá)式在第一次被求值后,總是非0,則把該循環(huán)條件移至循環(huán)體執(zhí)行之后求值和測試,能起同樣的控制作用。在這種情況下,while語句就能改寫成如while語句。如while語句中的作為循環(huán)條件的表達(dá)式值可能初次求值就為0時,則它不能簡單地改寫成do-while語句。另外要特別指出,分號是do-while語句的結(jié)束符,不能省略。3.for語句for語句是C語言中最靈活、使用最廣泛的循環(huán)結(jié)構(gòu)語句。如以最一般意義下考慮循環(huán),一個完整的循環(huán)應(yīng)包含對有關(guān)變量賦初值部分、控制循環(huán)的條件、一個要循環(huán)計算的操作、每次循環(huán)后對28有關(guān)變量的修正等四部分組成。拉語句就是從這一般意義下表達(dá)循環(huán)結(jié)構(gòu)的語句。for語句的一般形式為for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句其中的語句是for語句的循環(huán)體。輸語句的執(zhí)行過程是:(1)計算表達(dá)式1;(2)計算表達(dá)式2的值,并測試其值為0或非0.若值為非0,轉(zhuǎn)步驟3;否則結(jié)束for語句;(3)執(zhí)行循環(huán)體;(4)計算表達(dá)式3;(5)轉(zhuǎn)向步驟2.for語句的一般形式也可等價地用以下形式的while語句來表達(dá):表達(dá)式1;while(表達(dá)式2){語句表達(dá)式3;}由for語句的執(zhí)行過程可知,for語句的表達(dá)式1的作用是對控制循環(huán)的有關(guān)變量賦初值;表達(dá)式2是控制循環(huán)的條件;表達(dá)式3用于修正有關(guān)變量;語句是循環(huán)體。所以for語句按各部分的功能,可以形象地寫成以下形式:for(賦初值的表達(dá)式;控制循環(huán)條件的表達(dá)式;修正變量的表達(dá)式)完成循環(huán)計算的語句正確使用for語句,需注意以下幾種情況:(1)for語句的一般形式中,表達(dá)式1、表達(dá)式2和表達(dá)式3都可以省略。如表達(dá)式1省略,表示該for語句沒有賦初值部分,或前面的程序段已為有關(guān)變量賦了初值,或確實沒有特別的初值;如表達(dá)式2省略,表示循環(huán)條件永遠(yuǎn)為真,可能循環(huán)體內(nèi)有控制轉(zhuǎn)移語句轉(zhuǎn)出缺語句;表達(dá)式3省略,表示沒有修正部分,對變量的修正已在循環(huán)體內(nèi)一起完成。不管表達(dá)式1、表達(dá)式2和表達(dá)式3省略情況如何,其中兩個分號都不能省略。對于三個表達(dá)式都省略情況,for語句呈以下形式:for(;;)29語句(2)表達(dá)式l、表達(dá)式2和表達(dá)式3都可包含逗號運算符由多個表達(dá)式組成。4.break語句break語句除能用于switch語句外,還常用于循環(huán)語句中。執(zhí)行循環(huán)結(jié)構(gòu)中的break語句,控制就從包含它的循環(huán)結(jié)構(gòu)中退出。break語句通常與if語句結(jié)合,構(gòu)成一個結(jié)束循環(huán)的條件。5.continue語句continue語句只用于循環(huán)語句中。通常復(fù)雜的循環(huán)計算中,循環(huán)語句的循環(huán)體是一個語句序列,中間會有一個包含continue語句的且語句。當(dāng)指定的條件成立時,continue語句就被執(zhí)行,這時continue語句之后的語句就不再執(zhí)行,控制立即進(jìn)入下一輪循環(huán)。6.語句標(biāo)號和goto語句C程序的語句之前都可插入標(biāo)識符和冒號,該標(biāo)識符即為其后語句的標(biāo)號。如strat:X=0;標(biāo)識符Start就是語句“x=0;”的標(biāo)號。goto語句(goto標(biāo)號;)是一種無條件轉(zhuǎn)移語句,其意義是將程序的控制轉(zhuǎn)到以所指定的標(biāo)號命名的語句處。goto語句通常出現(xiàn)在if語句內(nèi),實現(xiàn)當(dāng)某種條件出現(xiàn)時,需要改變正常的順序執(zhí)行控制流程。由于goto語句過份的隨意使用會給程序的理解帶來很大的困難,所以一般強調(diào)不使用goto語句來編程。只有當(dāng)一個多重循環(huán)的最內(nèi)層,當(dāng)發(fā)現(xiàn)某種特別的情況需要結(jié)束整個多重循環(huán),這時可用goto語句讓程序執(zhí)行從最內(nèi)層直接轉(zhuǎn)到外層循環(huán)之外。注意,break語句只能跳出包含它的一層循環(huán)。7.用goto語句構(gòu)成循環(huán)在早先非結(jié)構(gòu)化程序設(shè)計中,由于語言提供的控制結(jié)構(gòu)的結(jié)構(gòu)性差,常用goto語句構(gòu)成循環(huán)。但在結(jié)構(gòu)化程序中,不再用goto語句構(gòu)成循環(huán)。考生掌握這個知識是要求考生能將goto語句構(gòu)成的循環(huán)改寫成結(jié)構(gòu)化控制結(jié)構(gòu)描述的循環(huán)。4.1一維數(shù)組1.數(shù)組的基本概念數(shù)組是一組同類對象集合的一種表示。在C語言中,數(shù)組類型是這樣一種數(shù)據(jù)結(jié)構(gòu):數(shù)組所有元素的數(shù)據(jù)類型相同,元素個數(shù)固定,其元素按順序存放,每個元素對應(yīng)一個序號(稱為下標(biāo)),數(shù)組元素的下標(biāo)從0開始順序編號,各元素按下標(biāo)存?。ㄒ茫?shù)組元素變量能與相同類型的獨立的變量一樣使用。引用數(shù)組元素變量所需的下標(biāo)個數(shù)由數(shù)組的維數(shù)決定,數(shù)組有一維數(shù)組、二維數(shù)組或多維數(shù)組之分。2.一線數(shù)組的定義30一維數(shù)組的定義形式為類型說明符數(shù)組名[常量表達(dá)式」;例如inta[5];定義一個名為a的數(shù)組,它有五個元素,每個元素都是整型。數(shù)組定義包含以下幾個要點:(l)類型說明符用來指明數(shù)組元素的類型,同一數(shù)組的諸元素,它們的類型是相同的。(2)數(shù)組是一個變量,與一般變量一樣,用標(biāo)識符命名,數(shù)組名遵守標(biāo)識符的命名規(guī)則。(3)方括號“[]”是數(shù)組的標(biāo)志,方括號中的常量表達(dá)式的值表示數(shù)組的元素個數(shù),即數(shù)組的長度。例如,inta[5]中的5表示數(shù)組a有5個元素,下標(biāo)從0開始,這五個元素分別是:a[0]、a[1]、a[2]、a[3]和a[4].(4)常量表達(dá)式通常是整型常量、符號常量或sizeof(類型名),以及由它們組成的常量表達(dá)式。定義數(shù)組大小用常量表達(dá)式,就是說數(shù)組的大小是固定的,不可以包含引用變量值的表達(dá)式來定義數(shù)組的大小。(5)C語言有一個約定,當(dāng)數(shù)組名單獨出現(xiàn)在表達(dá)式中時,數(shù)組名可以代表為它分配的內(nèi)存區(qū)域的開始地址,即數(shù)組中下標(biāo)為0的元素的地址。在這種情況下,數(shù)組名起著一個常量的作用,即a與&a[0]作用一樣。如代碼scanf(“%d”,&a[0])與scanf(“%d”,a)都是為數(shù)組a的第一個元素輸入值。3.一維數(shù)組的初始化可在數(shù)組定義同時,給出數(shù)組元素的初值。這種表述形式稱為數(shù)組初始化。數(shù)組初始化可用以下幾種方法實現(xiàn):(l)數(shù)組定義時,順序列出數(shù)組全部元素的初值。例如,intd[5]={0,l,2,3,4};將數(shù)組元素的初值依次寫在一對花括弧內(nèi)。經(jīng)上面定義和初始化之后,就有d[0]=0.d[l]=l、d[2]=2、d[3]=3、d[4]=4.(2)只給數(shù)組的前面一部分元素設(shè)定初值。例如,inte[5]={0,l,2};定義數(shù)組e有5個整型元素,其中前三個元素設(shè)定了初值,而后兩個元素末明確地設(shè)定初值。系統(tǒng)約定,當(dāng)一個數(shù)組的部分元素被設(shè)定初值后,對于元素為數(shù)值型的數(shù)組,那些末明確設(shè)定初值的元素自動被設(shè)定0值。所以數(shù)組e的后兩個元素的初值為0.但是,當(dāng)定義數(shù)組時,如未對它的元素指定過初值,對于內(nèi)

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論