版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)類型、運(yùn)算符與運(yùn)算式本章著重講述5個(gè)方面的內(nèi)容:(1)C語(yǔ)言的基本數(shù)據(jù)類型。(2)C語(yǔ)言認(rèn)可的常量及其表示法。(3)C語(yǔ)言中變數(shù)的數(shù)據(jù)類型、存儲(chǔ)類型。(4)完整變數(shù)說(shuō)明的組成。(5)C語(yǔ)言裏的運(yùn)算符和由它們組成的運(yùn)算式。2.1C語(yǔ)言的數(shù)據(jù)類型 程式中涉及的各種數(shù)據(jù)(常量、變數(shù)),都必須存放在記憶體裏。所謂一個(gè)數(shù)據(jù)的“數(shù)據(jù)類型”,是該數(shù)據(jù)自身的一種屬性,它告訴編譯程序,這個(gè)數(shù)據(jù)要在內(nèi)存中佔(zhàn)用多少個(gè)位元組。 不同類型數(shù)據(jù)所佔(zhàn)用的記憶體區(qū)域大小是不同的,這個(gè)區(qū)域的位元組數(shù)被稱為是這種數(shù)據(jù)類型的“長(zhǎng)度”。表2-1列出了C語(yǔ)言中基本數(shù)據(jù)類型的長(zhǎng)度。2.2常量 所謂“常量”,就是指在程式執(zhí)行過(guò)程中,其值不能改變的量。C語(yǔ)言裏有如下幾種常量:整型常量、實(shí)型常量、字元常量和字串常量。一個(gè)常量的類型,由它的書寫格式確定,無(wú)須事先加以說(shuō)明。使用時(shí),在程式需要的地方直接寫出來(lái)即可。2.2.1整型常量 值為整數(shù)的常量稱為“整型常量”,簡(jiǎn)稱“整常量”,它包括正整數(shù)、零和負(fù)整數(shù)。整常量的數(shù)據(jù)類型當(dāng)然是整型(int)的。 整常量可以以十進(jìn)位、八進(jìn)制和十六進(jìn)制的書寫形式出現(xiàn)在C語(yǔ)言的程式裏。(1)十進(jìn)位整常量的書寫形式 十進(jìn)位整常量就是通常意義下的整數(shù)。(2)八進(jìn)制整常量的書寫形式 八進(jìn)制整常量是在通常意義下的八進(jìn)制整數(shù)前加上首碼數(shù)字“0”構(gòu)成。(3)十六進(jìn)制整常量的書寫形式 十六進(jìn)制整常量是在通常意義下的十六進(jìn)制整數(shù)前加上首碼“0x”(數(shù)字0和小寫字母x)構(gòu)成。 整型或短整型常量屬於整型。由表2-1知,它們需要佔(zhàn)用記憶體的2個(gè)位元組。在電腦中存放時(shí),是將其數(shù)值轉(zhuǎn)換成相應(yīng)的二進(jìn)位數(shù),放在兩個(gè)位元組(16個(gè)二進(jìn)位位)裏,因此其數(shù)值範(fàn)圍是十進(jìn)位的?32768~+32767;長(zhǎng)整型常量需要佔(zhàn)用記憶體的4個(gè)位元組。在電腦中存放時(shí),是將其數(shù)值轉(zhuǎn)換成相應(yīng)的二進(jìn)位數(shù),放在四個(gè)位元組(32個(gè)二進(jìn)位位)裏,因此其數(shù)值範(fàn)圍是十進(jìn)位的?2147483648~+2147483647。如果是長(zhǎng)整型常量,那麼在程式中書寫時(shí),需要在它的末尾加上尾碼:小寫的字母“l(fā)”,或大寫的字母“L”,以便與整型或短整型常量區(qū)分開來(lái)。2.2.2實(shí)型常量 值為實(shí)數(shù)的常量稱為“實(shí)型常量”,簡(jiǎn)稱“實(shí)常量”。在C語(yǔ)言中,整常量有十進(jìn)位、八進(jìn)制和十六進(jìn)制3種書寫形式。但是對(duì)於實(shí)常量而言,只有十進(jìn)位一種書寫形式,沒(méi)有八進(jìn)制和十六進(jìn)制的實(shí)常量。 在C語(yǔ)言中表示十進(jìn)位的實(shí)常量,可以採(cǎi)用一般形式與指數(shù)形式兩種辦法。(1)一般形式的實(shí)常量 一般形式的實(shí)常量就是通常意義下的實(shí)數(shù),它由整數(shù)、小數(shù)點(diǎn)和小數(shù)3部分構(gòu)成。(2)指數(shù)形式的實(shí)常量 指數(shù)形式的實(shí)常量由尾數(shù)、小寫字母e或大寫字母E以及指數(shù)3部分構(gòu)成。 可以用不同的尾數(shù)和指數(shù),表示同一個(gè)實(shí)數(shù)。如果尾數(shù)部分被寫成小數(shù)點(diǎn)前有且僅有一位非0數(shù)字,那麼就稱它為“規(guī)範(fàn)化的指數(shù)形式”。2.2.3字元常量 在C語(yǔ)言中,用單引號(hào)前、後括住的單個(gè)字元被稱為“字元常量”。 程式中書寫字元常量時(shí),雖然要用單引號(hào)前、後把它括住,但單引號(hào)只起一個(gè)標(biāo)識(shí)作用,並不算作字元常量的組成部分。在內(nèi)存中,將開闢一個(gè)位元組(8個(gè)二進(jìn)位位)來(lái)存放字元,存放的內(nèi)容是該字元的ASCII碼值。2.2.4字串常量 在C語(yǔ)言中,用雙引號(hào)前、後括住的零個(gè)或若干個(gè)字元,被稱為“字串常量”,簡(jiǎn)稱“字串”。 一個(gè)字串中所包含的字元個(gè)數(shù),稱為該“字串的長(zhǎng)度”。 在C語(yǔ)言中,總是為每一個(gè)字串多分配1個(gè)位元組來(lái)存放它。在順序存放完字串裏的字元後,往最後一個(gè)位元組裏存放一個(gè)ASCII碼值為0的字元,用以標(biāo)識(shí)該字串的結(jié)束。2.3簡(jiǎn)單變量 在程式執(zhí)行過(guò)程中,允許其值發(fā)生變化的量,被稱為“變數(shù)”。 用戶應(yīng)該為程式中用到的每一個(gè)變數(shù)起一個(gè)名字,以示區(qū)別,為變數(shù)取的名字,稱為“變數(shù)名”。在C語(yǔ)言中,為變數(shù)起名應(yīng)符合識(shí)別字的命名規(guī)則,因此,變數(shù)名只能以字母或下劃線開頭。2.3.1變數(shù)的數(shù)據(jù)類型 在程式中使用一個(gè)變數(shù)之前,先要對(duì)它進(jìn)行說(shuō)明:起一個(gè)名字(變數(shù)名),指定它的數(shù)據(jù)類型。變數(shù)說(shuō)明語(yǔ)句的基本格式是:<數(shù)據(jù)類型符><變數(shù)名>;1.整型變數(shù)的說(shuō)明 用數(shù)據(jù)類型符int,可以將一個(gè)變數(shù)說(shuō)明為是整型的。比如:intx; 說(shuō)明了一個(gè)名為x的變數(shù),它的數(shù)據(jù)類型是整型的。由這個(gè)說(shuō)明,表示x要在內(nèi)存佔(zhàn)用2個(gè)位元組來(lái)存放它的值,它的取值範(fàn)圍是?32768~+32767。2.實(shí)型變數(shù)的說(shuō)明 用數(shù)據(jù)類型符float或double,可以將一個(gè)變數(shù)說(shuō)明為是單精確度實(shí)型的或雙精度實(shí)型的。比如:
floatx;doublent; 這兩個(gè)變數(shù)說(shuō)明語(yǔ)句,第1個(gè)把x說(shuō)明為是單精確度實(shí)型的,它需要4個(gè)位元組來(lái)存放自己的取值;第2個(gè)把nt說(shuō)明為是雙精度實(shí)型的,它需要8個(gè)位元組來(lái)存放自己的取值。3.字元型變數(shù)的說(shuō)明 用數(shù)據(jù)類型符char,可以將一個(gè)變數(shù)說(shuō)明為是字元型的。比如:
charch; 說(shuō)明變數(shù)ch是字元型的,它要在內(nèi)存中佔(zhàn)用1個(gè)位元組,來(lái)存放它的ASCII碼值。關(guān)於變數(shù)的數(shù)據(jù)類型說(shuō)明,有如下幾點(diǎn)要注意。(1)切記任何一個(gè)變數(shù)都要遵循“先說(shuō)明後使用”的原則。(2)在一個(gè)變數(shù)說(shuō)明語(yǔ)句中,可以同時(shí)說(shuō)明多個(gè)相同數(shù)據(jù)類型的變數(shù)。(3)變數(shù)數(shù)據(jù)類型說(shuō)明可以放在所有函數(shù)的外面,也可以放在函數(shù)裏面。(4)在同一個(gè)函數(shù)中說(shuō)明變數(shù)時(shí),變數(shù)名不能相同。(5)在C語(yǔ)言中,只有字串常量,沒(méi)有字串型的變數(shù)。之所以這樣,是因?yàn)镃認(rèn)為任何一種數(shù)據(jù)類型的長(zhǎng)度都應(yīng)該是一定的,但字串的長(zhǎng)度卻不能確定,所以不能有這種數(shù)據(jù)類型的變數(shù)。2.3.2變數(shù)的存儲(chǔ)類型 系統(tǒng)分給用戶使用的記憶體空間,有3個(gè)部分: 應(yīng)用程式區(qū)——用於存放用戶程式。 靜態(tài)存儲(chǔ)區(qū)——用於存放在程式執(zhí)行的全部過(guò)程中,都需要保存的那些數(shù)據(jù)。 動(dòng)態(tài)存儲(chǔ)區(qū)——用於存放在程式執(zhí)行時(shí),臨時(shí)需要保存的那些數(shù)據(jù)。 為了說(shuō)明一個(gè)變數(shù)的存儲(chǔ)類型,只需在變數(shù)說(shuō)明語(yǔ)句裏添加存儲(chǔ)類型符即可。這時(shí)的變數(shù)說(shuō)明語(yǔ)句格式成為:<存儲(chǔ)類型符><數(shù)據(jù)類型符><變數(shù)名>;1.自動(dòng)型變數(shù) C語(yǔ)言在動(dòng)態(tài)存儲(chǔ)區(qū)裏為其分配存儲(chǔ)區(qū)。對(duì)於自動(dòng)變數(shù),有如下幾點(diǎn)要注意。 (1)自動(dòng)變數(shù)只能在函數(shù)內(nèi)說(shuō)明。 (2)如果一個(gè)變數(shù)是自動(dòng)型的,那麼保留字auto可以省略不寫。 (3)在不同函數(shù)中說(shuō)明的自動(dòng)變數(shù),可以使用相同的名字,它們的類型可以相同,也可以不同,彼此不會(huì)產(chǎn)生干擾。2.寄存器型變數(shù) 現(xiàn)實(shí)程式中極少使用寄存器型變數(shù)。3.靜態(tài)型變數(shù) 把存儲(chǔ)類型符static加在變數(shù)名及其類型前面,該變數(shù)就成為一個(gè)靜態(tài)型變數(shù),簡(jiǎn)稱“靜態(tài)變數(shù)”。C語(yǔ)言在靜態(tài)存儲(chǔ)區(qū)裏為靜態(tài)變數(shù)分配存儲(chǔ)區(qū)。 對(duì)於靜態(tài)變數(shù),要注意的是: (1)靜態(tài)變數(shù)可以在函數(shù)內(nèi)部說(shuō)明,也可以在函數(shù)外部說(shuō)明。 (2)在整個(gè)程式運(yùn)行期間,靜態(tài)變數(shù)一直佔(zhàn)據(jù)分配給它的存儲(chǔ)區(qū)不予歸還,直到程式運(yùn)行結(jié)束。4.外部型變數(shù)2.3.3變數(shù)的初始化與完整的變數(shù)說(shuō)明語(yǔ)句 在對(duì)變數(shù)進(jìn)行說(shuō)明的同時(shí)給變數(shù)賦予值,稱為“變數(shù)的初始化”。這樣,一個(gè)完整的變數(shù)說(shuō)明語(yǔ)句有如下的格式:<存儲(chǔ)類型符><數(shù)據(jù)類型符><變數(shù)名>=<常量>; 對(duì)於自動(dòng)(auto)型和寄存器(register)型變數(shù),如果在說(shuō)明時(shí)進(jìn)行初始化,那麼每次運(yùn)行到該變數(shù)所在的函數(shù)時(shí),都會(huì)隨之而再次被初始化;如果在說(shuō)明時(shí)沒(méi)有進(jìn)行初始化,那麼在執(zhí)行到第一次賦予它值的語(yǔ)句之前,它的值是不確定的(也就是它的存儲(chǔ)單元裏的內(nèi)容是不要確定的)。 對(duì)於在函數(shù)內(nèi)說(shuō)明的靜態(tài)(static)型變數(shù),如果在說(shuō)明時(shí)進(jìn)行初始化,那麼這個(gè)初始化的工作只在第一次運(yùn)行時(shí)進(jìn)行。下次再運(yùn)行到該變數(shù)所在的函數(shù)時(shí),不會(huì)重新初始化,而是繼承上次運(yùn)行後保留的當(dāng)前值參與這次運(yùn)算;如果在說(shuō)明時(shí)沒(méi)有進(jìn)行初始化,那麼C編譯程序會(huì)自動(dòng)為其進(jìn)行初始化:將整型(int)變數(shù)賦予初值0,將實(shí)型(float、double)變數(shù)賦予初值0.0,將字元(char)型變數(shù)賦予初值空字元(即ASCII碼值為0的字元'\0')。下次再運(yùn)行到該變數(shù)所在的函數(shù)時(shí),不會(huì)重新初始化,而是繼承上次運(yùn)行後保留的當(dāng)前值參與這次運(yùn)算。2.3.4變數(shù)地址與取地址符“&” 在程式中說(shuō)明了一個(gè)變數(shù)之後,記憶體就會(huì)有一個(gè)存儲(chǔ)區(qū)與之對(duì)應(yīng)。這個(gè)存儲(chǔ)區(qū)的第1個(gè)位元組的地址,就稱為是該變數(shù)的“地址”。C語(yǔ)言裏,一個(gè)變數(shù)的地址只能通過(guò)在變數(shù)前加“&”符號(hào)來(lái)得到,稱其為“取地址符”。2.4C語(yǔ)言的運(yùn)算符與各種運(yùn)算式 用來(lái)表示各種運(yùn)算的符號(hào)稱為“運(yùn)算符”。 用運(yùn)算符把運(yùn)算對(duì)象連接在一起所組成的式子,稱為“運(yùn)算式”。 當(dāng)運(yùn)算式中有多個(gè)運(yùn)算符時(shí),先做哪個(gè)運(yùn)算,後做哪個(gè)運(yùn)算,必須遵循一定的規(guī)則,這種運(yùn)算符執(zhí)行的先後順序,稱為“運(yùn)算符的優(yōu)先順序”。在C語(yǔ)言中,同級(jí)別運(yùn)算符可以有兩種結(jié)合性。所謂結(jié)合性是“自左向右”的,意即由左向右遇到誰(shuí)就先做誰(shuí);所謂結(jié)合性是“自右向左”的,意即由右向左遇到誰(shuí)就先做誰(shuí)。2.4.1算術(shù)運(yùn)算符與算術(shù)運(yùn)算式1.除法運(yùn)算符:/ 該運(yùn)算符的運(yùn)算規(guī)則與運(yùn)算對(duì)象的數(shù)據(jù)類型有關(guān):如果兩個(gè)運(yùn)算對(duì)象都是整型的,則結(jié)果是取商的整數(shù)部分,舍去小數(shù)(也就是做整除);如果兩個(gè)運(yùn)算對(duì)象中至少有一個(gè)是實(shí)型的,那麼結(jié)果是實(shí)型的,即是一般的除法。2.模運(yùn)算符:% 該運(yùn)算符的兩個(gè)運(yùn)算對(duì)象必須是整型的,結(jié)果是整除後的餘數(shù)(即求餘),符號(hào)與被除數(shù)相同。3.增1、減1運(yùn)算符:++和-- 增1、減1運(yùn)算符都是單目運(yùn)算符,其運(yùn)算對(duì)象只能是變數(shù),且變數(shù)的數(shù)據(jù)類型限於整型、字元型,以及以後要學(xué)習(xí)的指針型、整型數(shù)組元素等。增1、減1運(yùn)算符實(shí)施的具體操作是自動(dòng)將運(yùn)算對(duì)象實(shí)行加1或減1,然後把運(yùn)算結(jié)果回存到運(yùn)算對(duì)象中。增1、減1運(yùn)算符與眾不同之處在於它們既能出現(xiàn)在運(yùn)算對(duì)象之前,比如:++i,--j,成為所謂的“首碼運(yùn)算符”;也能出現(xiàn)在運(yùn)算對(duì)象之後,比如:x++,y--,成為所謂的“尾碼運(yùn)算符”。 首碼式增1、減1運(yùn)算符和尾碼式增1、減1運(yùn)算符之間的差別在於實(shí)施其增、減操作的時(shí)間。首碼式增1、減1運(yùn)算符,是先對(duì)運(yùn)算對(duì)象完成加、減1和回存操作,然後才能使用該運(yùn)算對(duì)象的值;尾碼式增1、減1運(yùn)算符,是先使用該運(yùn)算對(duì)象的值,然後才去完成加、減1和回存操作。對(duì)於這種前、尾碼差異的正確理解是非常重要的。2.4.2賦值運(yùn)算符與賦值運(yùn)算式 表2-5列出了C語(yǔ)言中的基本賦值運(yùn)算符和一組算術(shù)自反賦值運(yùn)算符及它們的含義。算術(shù)自反賦值運(yùn)算符對(duì)我們來(lái)說(shuō)是一組新的運(yùn)算符,但理解它們不會(huì)感到困難。表2-5 C語(yǔ)言的賦值運(yùn)算符1.基本賦值運(yùn)算符:=
<變數(shù)>=<運(yùn)算式> 其含義是先計(jì)算賦值號(hào)“=”右邊<運(yùn)算式>的值,然後把計(jì)算的結(jié)果賦給(即存入)左邊的<變數(shù)>。上述式子即是一個(gè)運(yùn)算式,稱為“賦值運(yùn)算式”。在賦值運(yùn)算式的後面加上分號(hào)(即語(yǔ)句結(jié)束符),就成為一個(gè)賦值語(yǔ)句。2.算術(shù)自反賦值運(yùn)算符:+=、?=、*=、/=和%= 算術(shù)自反賦值運(yùn)算符的作用是把“運(yùn)算”和“賦值”兩個(gè)動(dòng)作結(jié)合起來(lái),成為一個(gè)複合運(yùn)算符。其形式為:
<變數(shù)>+=<運(yùn)算式> 其含義是先把運(yùn)算符左邊<變數(shù)>的當(dāng)前值與右邊<運(yùn)算式>的值進(jìn)行“+”運(yùn)算,然後把運(yùn)算結(jié)果賦給(即存入)左邊的變數(shù)。2.4.3關(guān)係運(yùn)算符與關(guān)係運(yùn)算式 表2-6列出了C語(yǔ)言中的關(guān)係運(yùn)算符及其含義。表2-6 C語(yǔ)言的關(guān)係運(yùn)算符 所有關(guān)係運(yùn)算符都是雙目的。用關(guān)係運(yùn)算符將兩個(gè)運(yùn)算對(duì)象連接起來(lái)所形成的運(yùn)算式,稱為“關(guān)係運(yùn)算式”。關(guān)係運(yùn)算符的作用是對(duì)其左、右兩個(gè)運(yùn)算對(duì)象進(jìn)行比較,測(cè)試它們之間是否具有所要求的關(guān)係。關(guān)係運(yùn)算式的最終結(jié)果是邏輯值:如果關(guān)係成立,則運(yùn)算式取邏輯值“真”,用數(shù)值1表示;如果關(guān)係不成立,則運(yùn)算式取邏輯值“假”,用數(shù)值0表示。2.4.4邏輯運(yùn)算符與邏輯運(yùn)算式 表2-7列出了C語(yǔ)言中的邏輯運(yùn)算符及其含義。表2-7 C語(yǔ)言的邏輯運(yùn)算符1.邏輯非運(yùn)算符:! 邏輯非的運(yùn)算結(jié)果是得到運(yùn)算對(duì)象的“反”。2.邏輯與運(yùn)算符:&& 只有當(dāng)兩個(gè)運(yùn)算對(duì)象同時(shí)為真時(shí),整個(gè)邏輯運(yùn)算式的值才為真;只要其中有一個(gè)為假,整個(gè)邏輯運(yùn)算式的值就是假。3.邏輯或運(yùn)算符:|| 只要兩個(gè)運(yùn)算對(duì)象中有一個(gè)為真時(shí),整個(gè)邏輯運(yùn)算式的值就是真;只有兩個(gè)運(yùn)算對(duì)象同時(shí)為假時(shí),整個(gè)邏輯運(yùn)算式的值才是假。 要把多個(gè)簡(jiǎn)單的條件組合形成複雜的條件,就必須利用邏輯運(yùn)算符。關(guān)於邏輯運(yùn)算符,要注意如下幾點(diǎn):(1)在參加邏輯運(yùn)算時(shí),用非0值表示邏輯真,而邏輯運(yùn)算的結(jié)果是用數(shù)值1來(lái)表示邏輯真;至於邏輯假,無(wú)論是參與邏輯運(yùn)算時(shí)還是求得的運(yùn)算結(jié)果,都是以數(shù)值0來(lái)表示的。(2)對(duì)於&&運(yùn)算符,只要其左邊的運(yùn)算對(duì)象為假,則整個(gè)運(yùn)算式肯定取值“假”(數(shù)值0),C編譯程序不會(huì)再對(duì)右邊的運(yùn)算對(duì)象進(jìn)行求值。(3)對(duì)於||運(yùn)算符,只要其左邊的運(yùn)算對(duì)象為真,則整個(gè)運(yùn)算式肯定取值“真”(數(shù)值1),C編譯程序不會(huì)再對(duì)右邊的運(yùn)算對(duì)象進(jìn)行求值。2.4.5條件運(yùn)算符與條件運(yùn)算式 在C語(yǔ)言裏,由“?”和“:”兩個(gè)符號(hào)組合成條件運(yùn)算符,它是C語(yǔ)言裏唯一的一個(gè)三目運(yùn)算符。使用時(shí)的一般形式為:<運(yùn)算式1>?<運(yùn)算式2>:<運(yùn)算式3> 其中,第1個(gè)運(yùn)算對(duì)象<運(yùn)算式1>是一個(gè)邏輯運(yùn)算式,第2、3個(gè)運(yùn)算對(duì)象<運(yùn)算式2>和<運(yùn)算式3>的類型必須相同。由此而構(gòu)成的整個(gè)運(yùn)算式,稱為“條件運(yùn)算式”。 該運(yùn)算符的含義是:先計(jì)算<運(yùn)算式1>的值。如果它的值為真(非0),則整個(gè)條件運(yùn)算式以<運(yùn)算式2>的值作為自己的值;如果它的值為假(0),則整個(gè)條件運(yùn)算式以<運(yùn)算式3>的值作為自己的值??梢?jiàn),<運(yùn)算式1>起到一個(gè)判定作用,整個(gè)條件運(yùn)算式要根據(jù)它的值來(lái)決定自己的最終取值。2.4.6逗號(hào)運(yùn)算符與逗號(hào)運(yùn)算式 逗號(hào)運(yùn)算符就是把逗號(hào)(,)作為運(yùn)算符,利用它來(lái)把若干個(gè)運(yùn)算式“連接”在一起。這樣構(gòu)成的運(yùn)算式整體,稱為“逗號(hào)運(yùn)算式”。逗號(hào)運(yùn)算式的一般形式為:<運(yùn)算式1>,<運(yùn)算式2>,<運(yùn)算式3>,…,<運(yùn)算式n> 逗號(hào)運(yùn)算式的執(zhí)行過(guò)程是:從左到右順序計(jì)算諸運(yùn)算式的值,並且把最右邊運(yùn)算式的值作為該逗號(hào)運(yùn)算式的最終取值。2.4.7位運(yùn)算符1.位邏輯運(yùn)算符 表2-9列出了C語(yǔ)言中的位邏輯運(yùn)算符及其含義。 由位邏輯運(yùn)算符和運(yùn)算對(duì)象構(gòu)成的運(yùn)算式,稱為“位邏輯運(yùn)算式”。表2-9 C語(yǔ)言的位邏輯運(yùn)算符2.移位運(yùn)算符 表2-10列出了C語(yǔ)言中的移位運(yùn)算符及其含義。 “左移”和“右移”兩個(gè)移位運(yùn)算符都是雙目的。由移位運(yùn)算符和運(yùn)算對(duì)象構(gòu)成的運(yùn)算式,稱為“移位運(yùn)算式”。表2-10 C語(yǔ)言的移位運(yùn)算符(1)左移位運(yùn)算符:<< 由左移位運(yùn)算符構(gòu)成的移位運(yùn)算式一般為:
運(yùn)算式<<n 其中“運(yùn)算式”是進(jìn)行移位的對(duì)象,“n”指明移位的次數(shù)。功能是把左邊運(yùn)算式裏以二進(jìn)位形式給出的值向左移動(dòng)n位,左邊移出的位丟棄,右邊空出的位補(bǔ)0。(2)右移位運(yùn)算符:>> 由右移位運(yùn)算符構(gòu)成的移位運(yùn)算式一般為:
運(yùn)算式>>n 其中“運(yùn)算式”是進(jìn)行移位的對(duì)象,“n”指明移位的次數(shù)。功能是把左邊運(yùn)算式裏以二進(jìn)位形式給出的值向右移動(dòng)n位,右邊移出的位丟棄,如果運(yùn)算對(duì)象是無(wú)符號(hào)數(shù),則空出的位用數(shù)字0填補(bǔ);如果運(yùn)算對(duì)象是帶符號(hào)數(shù),則空出的位用符號(hào)位內(nèi)容填補(bǔ)。3.位自反賦值運(yùn)算符 表2-11列出了C語(yǔ)言中的位自反賦值運(yùn)算符及其含義。表2-11 C語(yǔ)言的位自反賦值運(yùn)算符2.4.8運(yùn)算式中數(shù)據(jù)類型的轉(zhuǎn)換 當(dāng)計(jì)算運(yùn)算式時(shí),C語(yǔ)言是這樣來(lái)處理“運(yùn)算式裏的各個(gè)變數(shù)的數(shù)據(jù)類型不一致”的問(wèn)題的:把參加運(yùn)算的數(shù)據(jù)都自動(dòng)轉(zhuǎn)換成數(shù)據(jù)長(zhǎng)度最長(zhǎng)的數(shù)據(jù)類型,然後進(jìn)行計(jì)算。計(jì)算後的結(jié)果仍然保持?jǐn)?shù)據(jù)長(zhǎng)度最長(zhǎng)的數(shù)據(jù)類型。 當(dāng)把運(yùn)算式的計(jì)算結(jié)果賦予變數(shù)時(shí),C語(yǔ)言是這樣來(lái)處理“結(jié)果的數(shù)據(jù)類型與左邊變數(shù)的數(shù)據(jù)類型不一致”的問(wèn)題的:把結(jié)果的數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換成變數(shù)的數(shù)據(jù)類型,然後賦予該變數(shù)。 在編寫程式時(shí),如果有必要的話,程式設(shè)計(jì)人員也可以使用C語(yǔ)言提供的強(qiáng)制式數(shù)據(jù)轉(zhuǎn)換方式,以得到自己所希望的數(shù)據(jù)類型。 強(qiáng)制式數(shù)據(jù)轉(zhuǎn)換的一般格式是:
(<數(shù)據(jù)類型符>)(<運(yùn)算式>)第3章C語(yǔ)言程式設(shè)計(jì)的三種基本結(jié)構(gòu)本章著重講述4個(gè)方面的內(nèi)容:(1)字元輸入/輸出函數(shù)。(2)格式輸入/輸出函數(shù)。(3)C語(yǔ)言中的各種選擇語(yǔ)句。(4)C語(yǔ)言中的各種迴圈語(yǔ)句。3.1順序結(jié)構(gòu)程式設(shè)計(jì) 如果程式中的若干語(yǔ)句是按照書寫的順序執(zhí)行,那麼這段程式的結(jié)構(gòu)就是順序式的。 C語(yǔ)言沒(méi)有輸入/輸出語(yǔ)句。C語(yǔ)言中的輸入/輸出功能,都是通過(guò)調(diào)用系統(tǒng)提供的輸入/輸出函數(shù)來(lái)實(shí)現(xiàn)的。3.1.1賦值語(yǔ)句、複合語(yǔ)句、空語(yǔ)句1.賦值語(yǔ)句 在賦值運(yùn)算式的後面,加上一個(gè)語(yǔ)句結(jié)束符“;”,就形成了一個(gè)賦值語(yǔ)句。其一般格式是:
<變數(shù)>=<運(yùn)算式>; 功能是計(jì)算出賦值運(yùn)算符“=”右邊運(yùn)算式的值,然後將該值賦予左邊的變數(shù)。 賦值語(yǔ)句也可以有如下格式:
<變數(shù)>@=<運(yùn)算式>; 其中@=是一個(gè)算術(shù)或位自反賦值運(yùn)算符。功能是將左邊的變數(shù)和右邊的運(yùn)算式進(jìn)行指定的算術(shù)或位運(yùn)算後,將所得的值賦予左邊的變數(shù)。2.複合語(yǔ)句 在C語(yǔ)言程式中,可以用一對(duì)花括弧把若干條語(yǔ)句括起來(lái),形成一個(gè)整體。這個(gè)整體就被稱為“複合語(yǔ)句”。從語(yǔ)法上講,它相當(dāng)於一個(gè)語(yǔ)句。複合語(yǔ)句的一般格式是: { 語(yǔ)句; 語(yǔ)句; } 要注意,複合語(yǔ)句中可以出現(xiàn)變數(shù)說(shuō)明,複合語(yǔ)句中的最後一條語(yǔ)句的語(yǔ)句結(jié)束符(分號(hào))不能省略,否則會(huì)造成語(yǔ)法錯(cuò)誤。另外,標(biāo)識(shí)複合語(yǔ)句結(jié)束的右花括弧的後面不能有語(yǔ)句結(jié)束符(分號(hào))。3.空語(yǔ)句 在C語(yǔ)言中,稱僅由一個(gè)分號(hào)組成的語(yǔ)句為“空語(yǔ)句”,即:
; 編譯程序在遇到空語(yǔ)句時(shí),不會(huì)為其產(chǎn)生任何相應(yīng)的指令代碼。這就是說(shuō),空語(yǔ)句不執(zhí)行任何操作。因此,空語(yǔ)句只是C語(yǔ)言語(yǔ)法上的一個(gè)概念,它起到一個(gè)語(yǔ)句的作用,僅此而已。3.1.2字元輸入/輸出函數(shù)1.字元輸入函數(shù):getchar() 調(diào)用形式:getchar() 函數(shù)功能:使程式處?kù)兜却脩魪逆I盤進(jìn)行輸入的狀態(tài)。輸入以在鍵盤上按回車換行鍵(Enter)結(jié)束,隨之返回輸入的第1個(gè)字元。該函數(shù)沒(méi)有參數(shù)。 在程式中使用該函數(shù)的一般形式是:
<變數(shù)>=getchar();2.字元輸出函數(shù):putchar() 調(diào)用形式:putchar(c),其中c為該函數(shù)的參數(shù),通常是一個(gè)已經(jīng)賦值的字元型變數(shù),或是一個(gè)字元常量。 函數(shù)功能:將字元變數(shù)c裏的內(nèi)容或字元常量在顯示器上顯示(即輸出)。 在程式中使用該函數(shù)時(shí)的一般形式是:
putchar(<字元變數(shù)名>);或 putchar(<字元常量>);3.1.3格式輸入/輸出函數(shù)1.格式輸入函數(shù):scanf() 調(diào)用形式:
scanf( <格式控制字串>, <輸入地址列表> ) 該函數(shù)有兩個(gè)參數(shù)。其中參數(shù)<格式控制字串>是用雙引號(hào)括起的一個(gè)字串常量。 字串中可以有兩部分內(nèi)容:一個(gè)是在輸入數(shù)據(jù)時(shí)起分隔數(shù)據(jù)作用的一般字元。因此輸入時(shí),這部分字元用戶必須按照原樣從鍵盤鍵入。另一個(gè)是若干個(gè)以%開頭,後面跟隨格式字元的格式說(shuō)明,由它們指出數(shù)據(jù)輸入時(shí)採(cǎi)用的不同格式。當(dāng)使用scanf()函數(shù)輸入多個(gè)數(shù)據(jù)時(shí),最重要的是判斷一個(gè)數(shù)據(jù)的輸入是否結(jié)束。這可以有下麵的幾種方法。方法1:在scanf()的格式控制字串裏安排起數(shù)據(jù)分隔作用的一般字元。這時(shí),用戶輸入時(shí),必須按照安排,鍵入這些一般字元。方法2:在scanf()的格式控制字串裏不安排任何數(shù)據(jù)分隔符號(hào),這時(shí)C語(yǔ)言就默認(rèn)使用空白字元、跳位字元(Tab鍵)、回車換行符(Enter鍵)作為每一個(gè)數(shù)據(jù)輸入完畢的分隔符號(hào)。方法3:在格式符前冠以附加格式符,指明輸入數(shù)據(jù)的域?qū)挘ㄕ麛?shù))。2.格式輸出函數(shù):printf() 調(diào)用形式:printf(<格式控制字串>,<輸出變數(shù)列表>); 該函數(shù)有兩個(gè)參數(shù)。其中參數(shù)<格式控制字串>是用雙引號(hào)括起的一個(gè)字串常量。字串中可以有兩部分內(nèi)容:一個(gè)是要求函數(shù)原樣輸出的一般字元;一個(gè)是若干個(gè)以“%”開頭、後面跟隨格式字元的格式說(shuō)明,由它們規(guī)定所要輸出的數(shù)據(jù)所採(cǎi)用的格式。參數(shù)<輸出變數(shù)列表>列出了需要輸出的變數(shù)名(或運(yùn)算式),正是它們的內(nèi)容要按照格式說(shuō)明的規(guī)定加以輸出。3.2選擇結(jié)構(gòu)程式設(shè)計(jì)3.2.1if單分支選擇語(yǔ)句 if單分支選擇語(yǔ)句的一般格式是:
if(<條件>) <語(yǔ)句>;功能:在程式執(zhí)行過(guò)程中遇到if時(shí),若圓括號(hào)裏的<條件>取值為非0(條件成立),則執(zhí)行<語(yǔ)句>;否則(即是值為0,條件不成立)不執(zhí)行if中的<語(yǔ)句>,而去執(zhí)行該單分支選擇語(yǔ)句的後續(xù)語(yǔ)句。注意,如果在條件成立時(shí)所要做的事情需要用幾條語(yǔ)句來(lái)表達(dá),那麼格式中的<語(yǔ)句>就應(yīng)該以複合語(yǔ)句的形式出現(xiàn)。if單分支選擇語(yǔ)句的整個(gè)執(zhí)行流程,如圖3-5(a)所示。圖3-5if單分支選擇語(yǔ)句3.2.2if…else雙分支選擇語(yǔ)句 if…else雙分支選擇語(yǔ)句的一般格式是:
if(<條件>) <語(yǔ)句1>;
else <語(yǔ)句2>; 功能:在程式中遇到if時(shí),若圓括號(hào)裏的<條件>取值為非0(條件成立),則執(zhí)行<語(yǔ)句1>;否則(即是值為0,條件不成立)執(zhí)行<語(yǔ)句2>。無(wú)論執(zhí)行的是<語(yǔ)句1>還是<語(yǔ)句2>,隨後都去執(zhí)行後續(xù)語(yǔ)句。注意,格式中代表兩個(gè)分支的<語(yǔ)句1>或<語(yǔ)句2>,都可以以複合語(yǔ)句的形式出現(xiàn)。if…else雙分支選擇語(yǔ)句的整個(gè)執(zhí)行流程,如圖3-7(a)所示。圖3-7if…else雙分支選擇語(yǔ)句3.2.3if…elseif多分支選擇語(yǔ)句 if…elseif多分支選擇語(yǔ)句的一般格式是:
if(<條件1>)<語(yǔ)句1>;
elseif(<條件2>)<語(yǔ)句2>;
elseif(<條件3>)<語(yǔ)句3>;
elseif(<條件n-1>)<語(yǔ)句n-1>;else<語(yǔ)句n>;...功能:在程式中遇到if時(shí),若圓括號(hào)裏的<條件1>取值為非0(條件成立),則執(zhí)行<語(yǔ)句1>;否則去判定elseif後面圓括號(hào)裏<條件2>,如果值為非0(條件成立),則執(zhí)行<語(yǔ)句2>;否則去判定下一個(gè)elseif後面圓括號(hào)裏<條件3>的值,如果值為非0(條件成立),則執(zhí)行<語(yǔ)句3>;如此等等。如果<條件1>、<條件2>、<條件3>、…、<條件n?1>都為0(不成立),那麼執(zhí)行else後面的<語(yǔ)句n>。在執(zhí)行了<語(yǔ)句1>或<語(yǔ)句2>或<語(yǔ)句3>…或<語(yǔ)句n>後,去執(zhí)行後續(xù)語(yǔ)句。 注意,格式中的<語(yǔ)句1>、<語(yǔ)句2>、…、<語(yǔ)句n>等,都可以以複合語(yǔ)句的形式出現(xiàn)。if…elseif多分支選擇語(yǔ)句的整個(gè)執(zhí)行流程,如圖3-8(a)所示。圖3-8if…elseif多分支選擇語(yǔ)句3.2.4if語(yǔ)句的嵌套結(jié)構(gòu) 在各種if選擇結(jié)構(gòu)裏,其分支語(yǔ)句本身也可以是一個(gè)if選擇結(jié)構(gòu)語(yǔ)句。這就是所謂的“if語(yǔ)句的嵌套結(jié)構(gòu)”。由於在這種語(yǔ)句中,可能會(huì)出現(xiàn)許多個(gè)if和else,因此必須注意if和else之間的匹配問(wèn)題。原則上,else總是與它最近的if配對(duì)。3.2.5switch多分支選擇語(yǔ)句 switch多分支選擇語(yǔ)句的一般格式是:
switch(<運(yùn)算式>){
case常量值1:<語(yǔ)句1>;
break;case常量值2:<語(yǔ)句2>;
break;case常量值n-1:<語(yǔ)句n-1>;break;default:<語(yǔ)句n>;break;}...功能:首先計(jì)算switch後圓括號(hào)內(nèi)的運(yùn)算式值,然後用該值逐個(gè)去與case後的常量值進(jìn)行比較。當(dāng)找到相匹配的值時(shí),就執(zhí)行其後的語(yǔ)句。隨之接著繼續(xù)執(zhí)行後面case裏的語(yǔ)句。只有在對(duì)所有case後的常量值的比較,都找不到匹配者時(shí),才去執(zhí)行default(如果有的話)後的語(yǔ)句。在執(zhí)行匹配case後的語(yǔ)句中,如果遇到break語(yǔ)句,則不再繼續(xù)後面的執(zhí)行,而是立即跳出switch語(yǔ)句,去執(zhí)行switch的後續(xù)語(yǔ)句。所以,break語(yǔ)句的功能是終止switch語(yǔ)句的執(zhí)行。圖3-9給出了switch語(yǔ)句的執(zhí)行流程。圖3-9switch語(yǔ)句的執(zhí)行流程對(duì)switch語(yǔ)句有如下幾點(diǎn)說(shuō)明。(1)switch後面的運(yùn)算式必須用圓括號(hào)括住,其取值必須是整型或字元型的。(2)各case後面的常量值必須是整數(shù)或一個(gè)字元常量,並且它們不應(yīng)該相同。(3)執(zhí)行完case後面的語(yǔ)句,如果沒(méi)有遇到break,那麼switch語(yǔ)句就會(huì)自動(dòng)去執(zhí)行下一個(gè)case後面的語(yǔ)句,而不去判別與其常量值是否匹配。(4)如果語(yǔ)句中安排有default,那麼通常都把它安排在switch語(yǔ)句的最後。3.3迴圈結(jié)構(gòu)程式設(shè)計(jì)3.3.1while迴圈語(yǔ)句 while迴圈語(yǔ)句的一般結(jié)構(gòu)是:
while(<條件>) <語(yǔ)句>; 功能:在程式中遇到while時(shí),首先檢查<條件>是否成立。如果成立,就執(zhí)行<語(yǔ)句>(通常稱為“循環(huán)體”),然後再去檢查<條件>是否成立;如果<條件>不成立,則終止迴圈,去執(zhí)行while語(yǔ)句的後續(xù)語(yǔ)句。構(gòu)成循環(huán)體的<語(yǔ)句>,可以是複合語(yǔ)句。圖3-12是while語(yǔ)句的執(zhí)行流程。圖3-12while語(yǔ)句的執(zhí)行流程3.3.2do…while迴圈語(yǔ)句 do…while迴圈語(yǔ)句的一般結(jié)構(gòu)是:
do { <語(yǔ)句>; }while(<條件>); 功能:在程式中遇到do時(shí),就直接執(zhí)行<語(yǔ)句>(即循環(huán)體),然後才去檢查<條件>是否成立。如果跟隨在while後面的<條件>成立,則繼續(xù)執(zhí)行<語(yǔ)句>;如果不成立,則終止迴圈,去執(zhí)行do…while語(yǔ)句的後續(xù)語(yǔ)句。構(gòu)成循環(huán)體的<語(yǔ)句>,可以是複合語(yǔ)句。圖3-14是do…while語(yǔ)句的執(zhí)行流程。圖3-14do…while迴圈語(yǔ)句的流程3.3.3for迴圈語(yǔ)句 for迴圈語(yǔ)句的一般結(jié)構(gòu)是:
for(<運(yùn)算式1>;<運(yùn)算式2>;<運(yùn)算式3>)<語(yǔ)句>;功能:先計(jì)算<運(yùn)算式1>,通常是為迴圈變數(shù)指定初值(在整個(gè)迴圈過(guò)程中,它只做一次)。然後計(jì)算<運(yùn)算式2>,判定它的值是否為非0(成立)。如果其值不為0,表示迴圈條件為真,則進(jìn)入循環(huán)體,執(zhí)行<語(yǔ)句>(可以是複合語(yǔ)句);如果其值為0,表示迴圈條件為假,則終止迴圈,去執(zhí)行for迴圈語(yǔ)句的後續(xù)語(yǔ)句。在執(zhí)行完循環(huán)體後,就去計(jì)算<運(yùn)算式3>。<運(yùn)算式3>通常是對(duì)迴圈條件施加修改。隨後就又重新計(jì)算<運(yùn)算式2>,以便判定是否進(jìn)入下一個(gè)迴圈。圖3-17是for語(yǔ)句的執(zhí)行流程。圖3-17for迴圈語(yǔ)句的流程(1)for語(yǔ)句中的<運(yùn)算式1>和<運(yùn)算式3>都可以是逗號(hào)運(yùn)算式。(2)for語(yǔ)句中迴圈變數(shù)的值可以遞增變化,也可以遞減變化。(3)for語(yǔ)句中的<運(yùn)算式2>,可以不涉及對(duì)迴圈變數(shù)的測(cè)試,它能夠是任何合法的C運(yùn)算式。語(yǔ)句中的<運(yùn)算式1>、<運(yùn)算式3>甚至都可以略去不要。3.3.4break和continue語(yǔ)句1.break語(yǔ)句 break語(yǔ)句的一般形式是:
break; 功能:該語(yǔ)句只能用於C程式中的兩個(gè)場(chǎng)合,一是用在switch多分支選擇結(jié)構(gòu)中,當(dāng)某個(gè)case後的語(yǔ)句執(zhí)行完、遇到break語(yǔ)句時(shí),就跳出switch結(jié)構(gòu);一是用在任何一種迴圈結(jié)構(gòu)中,如果遇到break,則立即結(jié)束整個(gè)迴圈,跳到本迴圈外、該迴圈後續(xù)語(yǔ)句的地方去執(zhí)行。2.continue語(yǔ)句 continue語(yǔ)句的一般形式是:
continue; 功能:在迴圈結(jié)構(gòu)裏遇到它時(shí),就跳過(guò)循環(huán)體中位於它後面的其他語(yǔ)句,提前結(jié)束本次迴圈,並去判斷迴圈控制條件,以決定是否進(jìn)入下一次迴圈。注意,該語(yǔ)句只能使用在C語(yǔ)言的迴圈結(jié)構(gòu)中。3.3.5迴圈的嵌套結(jié)構(gòu) 如果在一個(gè)迴圈結(jié)構(gòu)的循環(huán)體內(nèi),又出現(xiàn)了一個(gè)迴圈結(jié)構(gòu),那麼這就是所謂的“迴圈的嵌套結(jié)構(gòu)”,有的書上稱其為多重迴圈。既然是嵌套式的結(jié)構(gòu),那就表明各迴圈之間只能是“包含”關(guān)係,即一個(gè)迴圈結(jié)構(gòu)完全在另一個(gè)迴圈結(jié)構(gòu)的裏面。通常把裏面的迴圈稱為“內(nèi)迴圈”,外面的迴圈稱為“外迴圈”。第4章數(shù)組本章著重講述3個(gè)方面的內(nèi)容:(1)一維數(shù)組。(2)二維數(shù)組。(3)字元數(shù)組和字串。4.1數(shù)組的基本概念 所謂“數(shù)組”,就是只用一個(gè)名字去代表相同數(shù)據(jù)類型元素的一個(gè)有序集合,並用對(duì)應(yīng)的序號(hào),來(lái)區(qū)分這個(gè)集合中的一個(gè)個(gè)元素。所起的名字,稱為“數(shù)組名”,序號(hào)稱為數(shù)組元素的“下標(biāo)”。用一個(gè)下標(biāo)來(lái)區(qū)分其元素的數(shù)組,稱為“一維數(shù)組”;用兩個(gè)或多個(gè)下標(biāo)來(lái)區(qū)分其元素的數(shù)組,稱為“二維數(shù)組”或“多維數(shù)組”。 在C語(yǔ)言程式中說(shuō)明一個(gè)數(shù)組後,系統(tǒng)就為它在內(nèi)存中分配一個(gè)連續(xù)的存儲(chǔ)區(qū),順序存放該數(shù)組的元素。這個(gè)存儲(chǔ)區(qū)所需要的位元組數(shù),按如下公式計(jì)算:總位元組數(shù)=數(shù)組元素個(gè)數(shù)*數(shù)據(jù)類型長(zhǎng)度4.2一維數(shù)組4.2.1一維數(shù)組的說(shuō)明 說(shuō)明一個(gè)一維數(shù)組的語(yǔ)句格式是:<存儲(chǔ)類型><數(shù)據(jù)類型><數(shù)組名>[<長(zhǎng)度>]; C語(yǔ)言規(guī)定,一維數(shù)組的名字不是變數(shù),而是一個(gè)記憶體地址常量(無(wú)符號(hào)數(shù)),只有它的元素才是變數(shù)。4.2.2一維數(shù)組元素的初始化
所謂一維數(shù)組的初始化,即是指在說(shuō)明數(shù)組的同時(shí)為其諸元素(變數(shù))賦初值。因此,完整的數(shù)組說(shuō)明語(yǔ)句格式為:
<存儲(chǔ)類型><數(shù)據(jù)類型><數(shù)組名>[<長(zhǎng)度>]={<常量1>,<常量2>,<常量3>,…};其中<常量1>是數(shù)組第1個(gè)元素的取值,<常量2>是數(shù)組第2個(gè)元素的取值,<常量3>是數(shù)組第3個(gè)元素的取值,如此等等。關(guān)於數(shù)組元素的初始化,有4種情況需要注意。(1)如果在說(shuō)明時(shí)是對(duì)數(shù)組的所有元素賦予初始值,那麼在數(shù)組說(shuō)明中可以將<長(zhǎng)度>省略(方括號(hào)不能沒(méi)有)。(2)如果在數(shù)組說(shuō)明時(shí)給出了<長(zhǎng)度>,但沒(méi)有給所有的元素賦予初始值,而只依次給前面的幾個(gè)數(shù)組元素賦了初值。那麼C語(yǔ)言將自動(dòng)對(duì)餘下的元素賦予初值。(3)如果所說(shuō)明的數(shù)組的存儲(chǔ)類型是static的,那麼這個(gè)數(shù)組的所有元素都是靜態(tài)(static)型變數(shù)。(4)如果數(shù)組說(shuō)明時(shí)給出了<長(zhǎng)度>,並對(duì)元素進(jìn)行了初始化。那麼所列出的元素初始值的個(gè)數(shù),不能多於數(shù)組元素的個(gè)數(shù)。否則C語(yǔ)言就會(huì)判定為語(yǔ)法錯(cuò)。4.2.3一維數(shù)組元素的引用 每一個(gè)數(shù)組元素是變數(shù),它們是可以接受賦值的。所以,在程式中通過(guò)向一個(gè)個(gè)數(shù)組元素賦值的方法,就能使它們獲得取值。把數(shù)組中的每個(gè)元素當(dāng)成普通的變數(shù)來(lái)使用,這就是所謂的“數(shù)組元素的引用”4.3二維數(shù)組4.3.1二維數(shù)組的說(shuō)明
說(shuō)明一個(gè)二維數(shù)組的語(yǔ)句格式是:<存儲(chǔ)類型><數(shù)據(jù)類型><數(shù)組名>[<長(zhǎng)度1>][<長(zhǎng)度2>];<長(zhǎng)度1>和<長(zhǎng)度2>都是用方括號(hào)括住的整形常量,其數(shù)值的乘積(即<長(zhǎng)度1>*<長(zhǎng)度2>),表示該數(shù)組所擁有的元素個(gè)數(shù)。根據(jù)“數(shù)組名就是分配給它的存儲(chǔ)區(qū)起始地址”的C語(yǔ)言規(guī)定,對(duì)於上面說(shuō)明的二維數(shù)組a,就有如下重要結(jié)論:a作為二維數(shù)組名,是一個(gè)地址常量;a[0],a[1],a[2]作為一維數(shù)組名,也都是地址常量。a是系統(tǒng)分配給這個(gè)二維數(shù)組整個(gè)存儲(chǔ)區(qū)的起始地址;a[0]是一維數(shù)組元素a[0][0],a[0][1],a[0][2],a[0][3]佔(zhàn)用的存儲(chǔ)區(qū)的起始地址;a[1]是一維數(shù)組元素a[1][0],a[1][1],a[1][2],a[1][3]佔(zhàn)用的存儲(chǔ)區(qū)的起始地址;a[2]是一維數(shù)組元素a[2][0],a[2][1],a[2][2],a[2][3]佔(zhàn)用的存儲(chǔ)區(qū)的起始地址。4.3.2二維數(shù)組元素的初始化 對(duì)二維數(shù)組的初始化,有如下幾種方法。 (1)分行對(duì)二維數(shù)組進(jìn)行初始化。 (2)不分行將所有數(shù)據(jù)依次列在一個(gè)花括弧裏。 (3)分行對(duì)二維數(shù)組進(jìn)行初始化時(shí),可以只對(duì)部分元素賦初值。 (4)如果是對(duì)二維數(shù)組的全部元素進(jìn)行初始化,那麼在數(shù)組說(shuō)明語(yǔ)句裏,<長(zhǎng)度1>可以省略不寫(方括號(hào)還是要的)。4.3.3二維數(shù)組元素的引用 在程式中通過(guò)向一個(gè)個(gè)數(shù)組元素賦值的方法,就能使它們獲得取值。把二維數(shù)組中的每個(gè)元素當(dāng)成普通的變數(shù)來(lái)使用,這就是所謂的“二維數(shù)組元素的引用”。4.4字元數(shù)組與字串4.4.1字元數(shù)組與字串 字元數(shù)組是字元型數(shù)組的簡(jiǎn)稱?!白衷獢?shù)組”是一個(gè)諸元素都是字元的數(shù)組。說(shuō)明一個(gè)字元數(shù)組時(shí),<數(shù)組名>前的<數(shù)據(jù)類型>應(yīng)該是char的??梢允褂脤?duì)一般數(shù)組元素初始化的方法,來(lái)完成對(duì)字元數(shù)組的初始化。對(duì)於字元數(shù)組,還可以直接使用字串常量,來(lái)完成對(duì)其元素的初始化工作。具體的做法有兩種。(1)用字符串常量對(duì)字元數(shù)組進(jìn)行初始化。(2)用花括弧括住字串常量對(duì)字元數(shù)組進(jìn)行初始化。直接用字符串常量或用花括弧括住字串常量的辦法對(duì)字元數(shù)組元素進(jìn)行初始化時(shí),所說(shuō)明數(shù)組的<長(zhǎng)度>必須比字串擁有的字元個(gè)數(shù)大1,以便能在末尾安放字串結(jié)束符“\0”。4.4.2字串的運(yùn)算 在C語(yǔ)言的系統(tǒng)函數(shù)庫(kù)裏,提供了完成各種字串運(yùn)算的函數(shù)。只要將它們所在的頭檔包含進(jìn)程序,就可以直接調(diào)用它們。4.4.3常用的字串處理函數(shù)1.字串輸入函數(shù):gets() 調(diào)用的一般格式:gets(<字元數(shù)組名>);2.字串輸出函數(shù):puts() 調(diào)用的一般格式:puts(<字元數(shù)組名>);3.字串複製(拷貝)函數(shù):strcpy() 調(diào)用的一般格式:strcpy(<字元數(shù)組名1>,<字元數(shù)組名2>);4.字串連接函數(shù):strcat() 調(diào)用的一般格式:strcat(<字元數(shù)組名1>,<字元數(shù)組名2>);5.字串比較函數(shù):strcmp() 調(diào)用的一般格式:intx;x=strcmp(<字元數(shù)組名1>,<字元數(shù)組名2>);6.求字串長(zhǎng)度函數(shù):strlen() 調(diào)用的一般格式:
intx; x=strlen(<字元數(shù)組名>);7.將字串中大寫字母改為小寫字母函數(shù):strlwr() 調(diào)用的一般格式:
strlwr(<字元數(shù)組名>);8.將字串中小寫字母改為大寫字母函數(shù):strupr() 調(diào)用的一般格式:
strupr(<字元數(shù)組名>);第5章指針本章著重講述4個(gè)方面的內(nèi)容:(1)建立地址就是指針的概念。(2)指針變數(shù)的說(shuō)明和初始化。(3)指針變數(shù)的使用。(4)指針數(shù)組的含義及使用。5.1指針和指針變數(shù)5.1.1直接訪問(wèn)和間接訪問(wèn) 所謂一個(gè)“變數(shù)的地址”,就是指其佔(zhàn)用存儲(chǔ)區(qū)中由小到大的第1個(gè)位元組地址。 由這些可以看出下麵的兩點(diǎn)。 (1)地址起到了一個(gè)指向作用。(2)在C語(yǔ)言中說(shuō)一個(gè)變數(shù)的地址,其實(shí)還隱含有這個(gè)變數(shù)的類型資訊在內(nèi),不能籠統(tǒng)地只把它視為一個(gè)地址。由於一個(gè)變數(shù)的地址(指針)也是一個(gè)值(只不過(guò)它是一個(gè)地址值,而不是普通意義的數(shù)值),因此就可以把這個(gè)地址值存放到另一個(gè)變數(shù)裏保存。這種專門用來(lái)存放變數(shù)地址的變數(shù),稱為“指針變數(shù)”。 由於一個(gè)變數(shù)的地址(指針)還隱含有這個(gè)變數(shù)的類型資訊在內(nèi),所以不能隨意把一個(gè)地址存放到任何一個(gè)指針變數(shù)中去,只能把具有相同類型的變數(shù)的地址,存放到這個(gè)指針變數(shù)裏去??梢?jiàn),指針變數(shù)也應(yīng)該有自己的類型,這個(gè)類型與存放在它裏面的地址所隱含的類型應(yīng)該相同。從變數(shù)名,找到這個(gè)變數(shù)對(duì)應(yīng)的地址,從這個(gè)地址直接完成對(duì)存儲(chǔ)單元進(jìn)行訪問(wèn)的方法,稱為對(duì)內(nèi)存的“直接訪問(wèn)”。通過(guò)一個(gè)地址得到另一個(gè)地址,再由得到的這個(gè)地址訪問(wèn)所需的存儲(chǔ)單元。這種由變數(shù)的地址得到另一個(gè)變數(shù)的地址,再通過(guò)得到的這個(gè)地址,完成對(duì)存儲(chǔ)單元訪問(wèn)的方法,稱為對(duì)內(nèi)存的“間接訪問(wèn)”。5.1.2指針變數(shù)的說(shuō)明和初始化 C語(yǔ)言把記憶體單元的地址視為一種數(shù)據(jù)類型,即指針型數(shù)據(jù)。存放指針型數(shù)據(jù)的變數(shù),稱為指針型變數(shù),簡(jiǎn)稱指針變數(shù)。 說(shuō)明一個(gè)變數(shù)是指針變數(shù)的一般格式是:<存儲(chǔ)類型><數(shù)據(jù)類型>*<變數(shù)名>;要注意以下3點(diǎn)。(1)“*”只起到一個(gè)標(biāo)識(shí)的作用,它不是所說(shuō)明的指針變數(shù)名本身的一個(gè)組成部分。(2)說(shuō)明中的<數(shù)據(jù)類型>,是指說(shuō)明的指針變數(shù)裏面所能存放的變數(shù)地址的類型。(3)相同類型的指針變數(shù)可以在一個(gè)說(shuō)明語(yǔ)句裏出現(xiàn),但每一個(gè)變數(shù)名的前面都要冠有指針變數(shù)的標(biāo)識(shí)“*”。5.1.3取地址運(yùn)算符與指針運(yùn)算符1.取地址運(yùn)算符:& “&”是一個(gè)單目運(yùn)算符,使用時(shí)的一般格式是:
&<變數(shù)名> 該運(yùn)算符的運(yùn)算對(duì)象只能是由<變數(shù)名>所指定的變數(shù),運(yùn)算結(jié)果是得到該變數(shù)的存儲(chǔ)地址。2.指針運(yùn)算符:* “*”是一個(gè)單目運(yùn)算符,其使用的一般格式是:
*<指針變數(shù)名> 該運(yùn)算符的運(yùn)算對(duì)象只能是由<指針變數(shù)名>所指定的指針變數(shù)或一個(gè)地址,運(yùn)算結(jié)果是訪問(wèn)該指針變數(shù)(或地址)所指的變數(shù)。5.2指針與數(shù)組 可以用一個(gè)指針變數(shù)指向數(shù)組,也可以用一個(gè)指針變數(shù)指向數(shù)組的某一個(gè)元素。前者稱為“指向數(shù)組的指針變數(shù)”,簡(jiǎn)稱“指向數(shù)組的指針”;後者稱為“指向數(shù)組元素的指針變數(shù)”,簡(jiǎn)稱“指向數(shù)組元素的指針”。5.2.1指向一維數(shù)組的指針變數(shù) 為了讓一個(gè)指針指向一維數(shù)組,只要將這個(gè)一維數(shù)組的名字或這個(gè)一維數(shù)組第一個(gè)元素的地址賦給這個(gè)指針即可。1.用指向數(shù)組的指針來(lái)引用數(shù)組的元素 這時(shí)可以通過(guò)“++”運(yùn)算符來(lái)移動(dòng)指針,得到數(shù)組所有元素的地址,從而就可以訪問(wèn)到數(shù)組的所有元素。 在指針p上進(jìn)行++運(yùn)算,並不是單純加1,而是加上它所指變數(shù)數(shù)據(jù)類型的長(zhǎng)度單位。 在將一個(gè)指針指向一維數(shù)組首地址後,C語(yǔ)言提供了下麵4種直接訪問(wèn)該數(shù)組第i個(gè)元素的方法:<數(shù)組名>[i] <指針變數(shù)名>[i] *(<數(shù)組名>+i) *(<指針變數(shù)名>+i) 前面兩種方法使用了數(shù)組元素的下標(biāo),所以稱為“下標(biāo)法”,後面兩種方法使用了指針運(yùn)算符,所以稱為“指針?lè)ā薄?shù)組名是一個(gè)地址常量,指向數(shù)組的指針是一個(gè)變數(shù),因此不能把它們完全等同地加以使用,它們之間的區(qū)別有以下3點(diǎn)。(1)數(shù)組名代表的是一個(gè)地址常數(shù),指針是一個(gè)變數(shù)。(2)數(shù)組名不能修改,指針可以改變指向。 (3)在數(shù)組名上只能進(jìn)行加法,以計(jì)算出某個(gè)數(shù)組元素的地址,但不能對(duì)數(shù)組名進(jìn)行增1、減1運(yùn)算;而指針不僅可以進(jìn)行加、減法,以計(jì)算出某個(gè)數(shù)組元素的地址,而且可以進(jìn)行增1、減1運(yùn)算,達(dá)到修改指針指向的目的。2.用指向數(shù)組元素的指針來(lái)引用數(shù)組的元素 在把數(shù)組第i個(gè)元素的地址賦給指針變數(shù)後,這個(gè)指針就指向了該數(shù)組的第i個(gè)元素了。這時(shí)可以通過(guò)++和--運(yùn)算符來(lái)向前、向後一步步地移動(dòng)指針,得到數(shù)組所有元素的地址,從而訪問(wèn)到數(shù)組的所有元素;也可以通過(guò)減k或加k的辦法(k是一個(gè)正整數(shù)),得到以第i個(gè)元素為基準(zhǔn)的前第k個(gè)元素的地址,或得到以第i個(gè)元素為基準(zhǔn)的後第k個(gè)元素的地址,從而訪問(wèn)到所要訪問(wèn)的數(shù)組元素。5.2.2指向字串的指針變數(shù) C語(yǔ)言還提供了基於指針變數(shù)來(lái)實(shí)現(xiàn)字串的方法。由於指針變數(shù)是一個(gè)變數(shù),它能夠接受賦值。當(dāng)把一個(gè)地址賦給它時(shí),指針的指向也就隨之改變。因此,利用字元型指針變數(shù)來(lái)處理字串,在程式中使用起來(lái)會(huì)感到便利和簡(jiǎn)捷。讓一個(gè)字元指針變數(shù)指向字串常量的方法有兩種。 (1)在指針變數(shù)初始化時(shí)。格式是:char*<指針變數(shù)名>=<字串常量>; (2)在程式中,直接將字串常量賦給一個(gè)字元型指針變數(shù)。格式是:char*<指針變數(shù)名>;<指針變數(shù)名>=<字串常量>; 無(wú)論採(cǎi)用哪種方法,都只是把字串常量在內(nèi)存的首地址賦給了指針,而不是把這個(gè)字串賦給了指針。指針只能接受地址。5.2.3指向二維數(shù)組的指針變數(shù)1.讓指針變數(shù)指向一個(gè)二維數(shù)組首地址 在讓一個(gè)指針指向二維數(shù)組的首地址後,就可以通過(guò)這個(gè)指針訪問(wèn)數(shù)組的各個(gè)元素了。有兩種方法可以採(cǎi)用。方法1:由於C語(yǔ)言在內(nèi)存裏是以二維數(shù)組行的順序來(lái)存放元素的,因此可以把指向二維數(shù)組的指針視為指向一個(gè)“大”的一維數(shù)組的指針,利用它從頭到尾訪問(wèn)數(shù)組的所有元素。方法2:根據(jù)二維數(shù)組元素的兩個(gè)下標(biāo)值,計(jì)算出該元素的地址,然後使用指針運(yùn)算符“*”作用在這個(gè)地址上,達(dá)到訪問(wèn)該元素的目的。2.讓指針變數(shù)指向二維數(shù)組的某個(gè)元素 要讓一個(gè)指針變數(shù)指向二維數(shù)組的某個(gè)元素,可以在變數(shù)說(shuō)明時(shí)對(duì)它進(jìn)行初始化,也可以在程式中使用賦值語(yǔ)句。5.3指針數(shù)組把若干個(gè)指針變數(shù)統(tǒng)一起一個(gè)名字,相互間用下標(biāo)(一個(gè)或兩個(gè))來(lái)區(qū)分,就構(gòu)成了一個(gè)所謂的“指針型數(shù)組”,簡(jiǎn)稱“指針數(shù)組”。指針數(shù)組中的每個(gè)元素,都是一個(gè)指針變數(shù),在裏面存放的都是一個(gè)記憶體單元的地址值,即存放的是一個(gè)個(gè)指針。5.3.1一維指針數(shù)組的說(shuō)明和初始化 一維指針數(shù)組說(shuō)明的一般格式為:<存儲(chǔ)類型><數(shù)據(jù)類型>*<數(shù)組名>[<長(zhǎng)度>]; 對(duì)指針數(shù)組做完整說(shuō)明的一般格式是:<存儲(chǔ)類型><數(shù)據(jù)類型>*<數(shù)組名>[<長(zhǎng)度>]={<地址1>,<地址2>,…};5.3.2指針數(shù)組元素的引用 指針數(shù)組元素,既是一個(gè)數(shù)組元素,又是一個(gè)指針。因此引用起來(lái),既要注意到它的數(shù)組元素特徵,也要注意到它的指針特徵。第6章函數(shù)本章著重講述4個(gè)方面的內(nèi)容:(1)定義函數(shù)的方法。(2)編寫程式時(shí),調(diào)用函數(shù)和被調(diào)函數(shù)的位置關(guān)係。(3)調(diào)用函數(shù)和被調(diào)函數(shù)間數(shù)據(jù)傳遞的各種方式。(4)程式中各個(gè)變數(shù)的作用域和生命期。6.1函數(shù)的概念所謂“函數(shù)”,是程式中可以反復(fù)使用的一個(gè)程式段,其他函數(shù)可以通過(guò)調(diào)用語(yǔ)句來(lái)執(zhí)行這段程式,完成所需要的工作。C語(yǔ)言本身為用戶提供了很多函數(shù),這稱為“系統(tǒng)函數(shù)”。程式設(shè)計(jì)者自己編寫的函數(shù),稱為“用戶函數(shù)”。6.1.1函數(shù)的定義函數(shù)定義的一般格式是:<函數(shù)類型><函數(shù)名>(<形式參數(shù)表>){<函數(shù)體>}其中:(1)<函數(shù)類型>:是所定義函數(shù)在執(zhí)行完後返回結(jié)果的數(shù)據(jù)類型,即返回值的類型。(2)<函數(shù)名>:是所定義函數(shù)的名稱,它可以是C語(yǔ)言中任何合法的識(shí)別字。(3)<形式參數(shù)表>:形式參數(shù)表中列出的形式參數(shù),簡(jiǎn)稱“形參”。被調(diào)函數(shù)就是通過(guò)這些形參,接收從調(diào)用函數(shù)傳遞過(guò)來(lái)的數(shù)據(jù)。定義的函數(shù)可以有參數(shù),也可以沒(méi)有參數(shù)。如果定義的函數(shù)有形參,則稱為“有參函數(shù)”,否則就是“無(wú)參函數(shù)”。(4)<函數(shù)體>:函數(shù)體由一對(duì)花括弧“{}”括起,它由變數(shù)說(shuō)明語(yǔ)句和執(zhí)行語(yǔ)句序列組成。6.1.2函數(shù)的調(diào)用 根據(jù)一個(gè)函數(shù)是否有返回值,C語(yǔ)言將以不同的方式對(duì)它們進(jìn)行調(diào)用。 (1)沒(méi)有返回值的函數(shù),是以函數(shù)調(diào)用語(yǔ)句的方式進(jìn)行調(diào)用的。即:<函數(shù)名>(<實(shí)際參數(shù)表>); (2)有返回值的函數(shù),是以函數(shù)運(yùn)算式的方式調(diào)用的。即:<函數(shù)名>(<實(shí)際參數(shù)表>) 這兩種調(diào)用方式根本的不同是:前者是一個(gè)語(yǔ)句,以分號(hào)結(jié)尾;後者是一個(gè)運(yùn)算式,凡是一般運(yùn)算式能夠出現(xiàn)的地方,它都可以出現(xiàn)。 函數(shù)調(diào)用時(shí)給出的<實(shí)際參數(shù)表>中,必須列出與被調(diào)函數(shù)定義中所給形參個(gè)數(shù)相等、類型相符、次序相同的實(shí)參,各實(shí)參之間仍以逗號(hào)為分隔符號(hào)。否則就會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤。6.1.3函數(shù)的原型說(shuō)明 在函數(shù)中調(diào)用一個(gè)用戶函數(shù)時(shí),必須首先保證這個(gè)被調(diào)用的用戶函數(shù)已經(jīng)存在。如果放的位置顛倒了,若被調(diào)函數(shù)返回值的類型是int、char,那麼不會(huì)產(chǎn)生什麼影響;若被調(diào)函數(shù)返回值的類型是非int、非char,即返回值的類型是float、double或void等,那麼編譯時(shí)就會(huì)給出出錯(cuò)資訊。 C語(yǔ)言提供了兩種解決這個(gè)問(wèn)題的辦法,一是把被調(diào)用者與調(diào)用者的位置重新放正確;二是保持這種顛倒的位置關(guān)係,但在整個(gè)程式最前面或在調(diào)用函數(shù)裏先對(duì)被調(diào)函數(shù)做一個(gè)說(shuō)明,這就是所謂的“函數(shù)原型說(shuō)明”。 函數(shù)原型說(shuō)明的一般格式是:<函數(shù)類型><函數(shù)名>(<形參類型表>); 它類同於函數(shù)定義中的函數(shù)頭,但有兩點(diǎn)區(qū)別:一是函數(shù)定義中函數(shù)頭裏給出的是形式參數(shù)表,它由“<類型><參數(shù)>”對(duì)組成,函數(shù)原型說(shuō)明裏給出的是形參類型表,它只列出“<類型>”;二是函數(shù)原型說(shuō)明要以分號(hào)為結(jié)尾,成為一條說(shuō)明語(yǔ)句。6.1.4變數(shù)的作用域和生命期1.全局變數(shù)、局部變數(shù)與變數(shù)的作用域 編寫程式時(shí),C語(yǔ)言允許在3個(gè)地方說(shuō)明變數(shù)。 (1)在所有函數(shù)之外。這種變數(shù)稱為“全局變數(shù)”,它可以被該程式中的所有函數(shù)使用。(2)在某個(gè)函數(shù)(或複合語(yǔ)句)裏面。這種變數(shù)稱為“局部變數(shù)”,它只能在說(shuō)明它的範(fàn)圍內(nèi)使用。(3)作為函數(shù)的形參。這類變數(shù)也是局部變數(shù),其作用就是用於接收調(diào)用者傳遞過(guò)來(lái)的實(shí)參數(shù)據(jù),出了函數(shù),該變數(shù)就不能使用了。 在C語(yǔ)言中,稱一個(gè)變數(shù)的作用範(fàn)圍為“變數(shù)的作用域”。由於每個(gè)變數(shù)都有自己的作用域,因此在不同函數(shù)內(nèi)說(shuō)明的局部變數(shù)就可以使用相同的變數(shù)名,類型也可以不一樣。它們不會(huì)因?yàn)槊窒嗤ハ喔蓴_。C語(yǔ)言規(guī)定,在一個(gè)根源程式檔中,當(dāng)所說(shuō)明的全局變數(shù)與某個(gè)函數(shù)內(nèi)說(shuō)明的局部變數(shù)同名時(shí),那麼在該局部變數(shù)的作用域,全局變數(shù)就不起作用。2.自動(dòng)變數(shù)、靜態(tài)變數(shù)與變數(shù)的生命期 (1)在函數(shù)內(nèi)說(shuō)明一個(gè)變數(shù)(它當(dāng)然是一個(gè)局部變數(shù))時(shí),若將其存儲(chǔ)類型說(shuō)成是auto,或沒(méi)有給出它的存儲(chǔ)類型,那麼這個(gè)變數(shù)是自動(dòng)型的。這時(shí),只有在調(diào)用函數(shù)而遇到這種變數(shù)時(shí),C語(yǔ)言才在動(dòng)態(tài)存儲(chǔ)區(qū)裏為它們分配所需要的存儲(chǔ)區(qū),函數(shù)調(diào)用完畢,就立即收回它們佔(zhàn)用的存儲(chǔ)區(qū)。從這樣的處理過(guò)程可以看出,每次調(diào)用函數(shù),都必須重新為自動(dòng)型變數(shù)分配存儲(chǔ)區(qū),重新進(jìn)行初始化。(2)在函數(shù)內(nèi)說(shuō)明一個(gè)變數(shù)(它當(dāng)然是一個(gè)局部變數(shù))時(shí),若將其存儲(chǔ)類型說(shuō)成是static,那麼這個(gè)變數(shù)是靜態(tài)型的。對(duì)於靜態(tài)變數(shù),C語(yǔ)言是編譯時(shí)在靜態(tài)存儲(chǔ)區(qū)裏為它們分配所需要的存儲(chǔ)區(qū),即使函數(shù)調(diào)用完畢,也不收回分配給它的存儲(chǔ)區(qū),直至程式運(yùn)行結(jié)束。如果程式中說(shuō)明靜態(tài)變數(shù)時(shí)對(duì)它做了初始化,那麼這種初始化只做一次,下次再調(diào)用就只是沿用上次調(diào)用後的取值,不再初始化了。 在C語(yǔ)言中,稱一個(gè)變數(shù)說(shuō)明後它存在的時(shí)間區(qū)間為“變數(shù)的生命期”。對(duì)於自動(dòng)變數(shù),它只在其作用域裏存在,出了作用域就不存在了。因此自動(dòng)變數(shù)的生命期就是它的作用域;對(duì)於靜態(tài)變數(shù),在它的作用域裏存在,出了作用域它仍然存在(只是不能使用)。因此靜態(tài)變數(shù)的生命期比它的作用域來(lái)得大。6.2函數(shù)調(diào)用中的數(shù)據(jù)傳遞6.2.1參數(shù)是普通變數(shù)時(shí)的數(shù)據(jù)傳遞過(guò)程當(dāng)調(diào)用者與被調(diào)用者之間是以普通變數(shù)作為參數(shù)進(jìn)行數(shù)據(jù)傳遞時(shí),調(diào)用者是把實(shí)參變數(shù)的值賦給被調(diào)用者的形參變數(shù)的。由於實(shí)參變數(shù)和形參變數(shù)佔(zhàn)用的是記憶體中不同的存儲(chǔ)區(qū),被調(diào)函數(shù)對(duì)形參的加工,是在形參變數(shù)自己的存儲(chǔ)區(qū)裏進(jìn)行,所以根本不會(huì)影響到實(shí)參變數(shù)。稱這種數(shù)據(jù)傳遞是“單向的”。6.2.2參數(shù)是指針變數(shù)時(shí)的數(shù)據(jù)傳遞過(guò)程 當(dāng)調(diào)用者與被調(diào)用者之間是以指針變數(shù)作為參數(shù)進(jìn)行數(shù)據(jù)傳遞時(shí),調(diào)用者是把實(shí)參指針變數(shù)的值賦給被調(diào)用者的形參指針變數(shù)的。於是,實(shí)參指針變數(shù)和形參指針變數(shù)雖然在內(nèi)存中位於不同的存儲(chǔ)區(qū),但它們的內(nèi)容卻都是同一個(gè)地址,即它們是指向記憶體中同一個(gè)存儲(chǔ)區(qū)的兩個(gè)不同的指針。 於是,被調(diào)函數(shù)中對(duì)形參所指變數(shù)的任何處理,也就是在對(duì)實(shí)參所指變數(shù)做相同的處理。因此,從被調(diào)函數(shù)返回調(diào)用者時(shí),處理結(jié)果就在實(shí)參指針?biāo)缸償?shù)裏面保存著。調(diào)用者和被調(diào)用者,通過(guò)共同指向的存儲(chǔ)區(qū),“雙向的”傳遞了資訊:調(diào)用者通過(guò)這個(gè)存儲(chǔ)區(qū),把要加工的資訊傳遞給被調(diào)用者;被調(diào)用者又通過(guò)這個(gè)存儲(chǔ)區(qū),將加工完的結(jié)果資訊傳遞給調(diào)用者。6.2.3參數(shù)是數(shù)組名時(shí)的數(shù)據(jù)傳遞過(guò)程1.以長(zhǎng)度固定的數(shù)組作為函數(shù)參數(shù)2.以非固定長(zhǎng)度數(shù)組作為函數(shù)參數(shù) 當(dāng)以數(shù)組為參數(shù)在函數(shù)間傳遞數(shù)據(jù)時(shí),實(shí)參與形參共用同一個(gè)存儲(chǔ)區(qū)。 由於數(shù)組名是一個(gè)地址(指針),所以在調(diào)用者將實(shí)參數(shù)組名傳遞給被調(diào)函數(shù)時(shí),與它對(duì)應(yīng)的形參也可以是一個(gè)指針變數(shù)。6.2.4返回語(yǔ)句return 返回語(yǔ)句return都出現(xiàn)在被調(diào)函數(shù)中,它的作用是返回調(diào)用者,並向調(diào)用者傳遞計(jì)算結(jié)果。該語(yǔ)句有兩種使用格式:
格式1:return; 格式2:return(<運(yùn)算式>); 第1種格式用於無(wú)返回值的被調(diào)函數(shù)。它不返回任何值,只是起一個(gè)返回調(diào)用者的作用。第2種格式一方面返回調(diào)用者,同時(shí)把圓括號(hào)裏<運(yùn)算式>的值傳遞給調(diào)用者。6.3指針型函數(shù)如果一個(gè)函數(shù)的返回值是一個(gè)指針(地址),那麼就說(shuō)這個(gè)函數(shù)是返回指針的函數(shù),即“指針型函數(shù)”。指針型函數(shù)屬於有返回值函數(shù),且返回的是一個(gè)地址值。因此調(diào)用這種函數(shù)時(shí),在調(diào)用者裏接受返回值的必須是指針變數(shù),或是指針數(shù)組元素等,而不能是其他。6.3.1指針型函數(shù)的定義方法 指針型函數(shù)的定義格式和一般函數(shù)的定義格式基本相同,只是要在所定義函數(shù)名的前面冠以一個(gè)“*”。即:<函數(shù)類型>*<函數(shù)名>(<形式參數(shù)表>){<函數(shù)體>}6.3.2指針型函數(shù)的使用 指針型函數(shù)的用法,與其它函數(shù)一樣,沒(méi)有什麼特殊的地方。只是應(yīng)該注意兩點(diǎn): (1)定義中出現(xiàn)的“*”,只表明這是一個(gè)返回指針的函數(shù),並不是函數(shù)名的一部分。 (2)對(duì)指針型函數(shù)進(jìn)行調(diào)用之後,要把它的返回值賦給相同指針類型的變數(shù)。第7章用戶自定義的數(shù)據(jù)類型本章著重講述6個(gè)方面的內(nèi)容:(1)結(jié)構(gòu)式數(shù)據(jù)類型的定義、變數(shù)說(shuō)明和使用。(2)指向結(jié)構(gòu)式數(shù)據(jù)類型的指針。(3)鏈表及其操作。(4)共用式數(shù)據(jù)類型的定義、變數(shù)說(shuō)明和使用。(5)枚舉式數(shù)據(jù)類型的定義、變數(shù)說(shuō)明和使用。(6)編譯預(yù)處理和起別名。7.1結(jié)構(gòu)式數(shù)據(jù)類型 C語(yǔ)言向用戶提供了把不同數(shù)據(jù)類型聚集在一起、構(gòu)成一種新數(shù)據(jù)類型的手段——“結(jié)構(gòu)”。用戶可以根據(jù)實(shí)際問(wèn)題的需要,利用結(jié)構(gòu)來(lái)決定所定義的新數(shù)據(jù)類型叫什麼名字,由哪些成員組成。用結(jié)構(gòu)定義了一種結(jié)構(gòu)式的數(shù)據(jù)類型後,再說(shuō)明具有這種結(jié)構(gòu)式數(shù)據(jù)類型的變數(shù),就可以在程式中使用它們了。7.1.1結(jié)構(gòu)式數(shù)據(jù)類型的定義 定義結(jié)構(gòu)類型的一般格式是:
struct<結(jié)構(gòu)類型名> { <成員列表> };struct<結(jié)構(gòu)類型名> 這個(gè)整體,就是新定義的一種數(shù)據(jù)類型的名字了。 <成員列表>由如下形式的“對(duì)”組成:<數(shù)據(jù)類型><成員名>; 每一對(duì)給出該結(jié)構(gòu)式類型中一個(gè)成員的數(shù)據(jù)類型和名稱。7.1.2結(jié)構(gòu)類型變數(shù)的說(shuō)明與初始化 定義了一個(gè)結(jié)構(gòu)類型,只表明這種數(shù)據(jù)類型的存在,它不是變數(shù),並不佔(zhàn)用記憶體空間(這猶如int並不是變數(shù),並不佔(zhàn)用記憶體空間是相同的道理)。只有說(shuō)明了一個(gè)變數(shù)具有這種數(shù)據(jù)類型,系統(tǒng)才為其分配存儲(chǔ)空間,程式中才能使用這個(gè)變數(shù)。 說(shuō)明一個(gè)結(jié)構(gòu)類型的變數(shù)(在不引起混淆的情況下,簡(jiǎn)稱結(jié)構(gòu)變數(shù),甚至就稱變數(shù)),有如下兩種方式。1.先定義結(jié)構(gòu)類型,再說(shuō)明變數(shù)2.在定義結(jié)構(gòu)類型的同時(shí)說(shuō)明變數(shù)7.1.3結(jié)構(gòu)變數(shù)成員的引用 對(duì)結(jié)構(gòu)變數(shù)的使用,其含義是指對(duì)它各個(gè)成員的引用。引用結(jié)構(gòu)變數(shù)成員的一般方式是:<結(jié)構(gòu)變數(shù)名>.<成員名>其中“.”是成員運(yùn)算符。從輸出的結(jié)果可以看出如下幾點(diǎn)。(1)C語(yǔ)言是按照結(jié)構(gòu)類型定義中成員的順序來(lái)分配存儲(chǔ)空間的。(2)結(jié)構(gòu)變數(shù)中的成員,可以像通常的同類型變數(shù)那樣進(jìn)行各種運(yùn)算和操作。(3)對(duì)結(jié)構(gòu)變數(shù)成員的引用,不同於通常變數(shù)的引用方式,不能直接使用成員名。而是採(cǎi)取“由整體到局部”的層次式,即先指明是哪個(gè)結(jié)構(gòu)變數(shù),然後通過(guò)成員運(yùn)算符“.”,指定所要成員。7.1.4結(jié)構(gòu)數(shù)組的說(shuō)明與初始化 由相同結(jié)構(gòu)變數(shù)為元素的數(shù)組,就是“結(jié)構(gòu)數(shù)組”。也就是說(shuō),結(jié)構(gòu)數(shù)組中的每一個(gè)元素,都是一個(gè)相同結(jié)構(gòu)類型的變數(shù)。因此,結(jié)構(gòu)數(shù)組既具有結(jié)構(gòu)的特點(diǎn),也具有數(shù)組的特點(diǎn)。即:(1)要先定義結(jié)構(gòu)類型,再說(shuō)明結(jié)構(gòu)數(shù)組;或在定義結(jié)構(gòu)類型的同時(shí)說(shuō)明結(jié)構(gòu)數(shù)組。(2)結(jié)構(gòu)數(shù)組元素由下標(biāo)區(qū)分,它們都是結(jié)構(gòu)變數(shù)。(3)結(jié)構(gòu)數(shù)組元素通過(guò)成員運(yùn)算符引用其每一個(gè)結(jié)構(gòu)成員。 在說(shuō)明了一個(gè)結(jié)構(gòu)數(shù)組後,系統(tǒng)就會(huì)在內(nèi)存中為其開闢一個(gè)連續(xù)的存儲(chǔ)區(qū)存放它的元素,結(jié)構(gòu)數(shù)組名就是這個(gè)存儲(chǔ)區(qū)的起始地址。結(jié)構(gòu)數(shù)組在內(nèi)存的存放,仍然按照元素的順序排列,每一個(gè)元素佔(zhàn)用的存儲(chǔ)位元組數(shù),就是這種結(jié)構(gòu)類型所需要的位元組數(shù)。這些與對(duì)一般數(shù)組的處理是完全相同的。7.2指向結(jié)構(gòu)類型的指針 說(shuō)明一個(gè)已有定義的結(jié)構(gòu)類型指針後,把一個(gè)同類型的變數(shù)地址賦給它,該指針就指向了這個(gè)變數(shù),這個(gè)指針就是指向結(jié)構(gòu)類型變數(shù)的指針;把一個(gè)同類型的數(shù)組名賦給它,該指針就指向了這個(gè)數(shù)組,這個(gè)指針就是指向結(jié)構(gòu)類型數(shù)組的指針。7.2.1指向結(jié)構(gòu)類型變數(shù)的指針 說(shuō)明一個(gè)結(jié)構(gòu)類型的變數(shù)後,它就在內(nèi)存獲得了存儲(chǔ)區(qū)。該存儲(chǔ)區(qū)的起始地址,就是這個(gè)變數(shù)的地址(指針)。如果說(shuō)明一個(gè)這種結(jié)構(gòu)類型的指針變數(shù),把結(jié)構(gòu)類型變數(shù)的地址賦給它,這個(gè)指針就指向這個(gè)變數(shù)了。 在C語(yǔ)言裏,還有一種借助於指針變數(shù)來(lái)訪問(wèn)結(jié)構(gòu)變數(shù)成員的方法,即用指向成員運(yùn)算符“->”。一般格式是:指針變數(shù)名->結(jié)構(gòu)成員名 這樣一來(lái),訪問(wèn)結(jié)構(gòu)變數(shù)成員就有了3種等價(jià)的形式。(1)直接利用結(jié)構(gòu)變數(shù)名,一般格式是:
結(jié)構(gòu)變數(shù)名.成員名(2)利用指向結(jié)構(gòu)變數(shù)的指針和指針運(yùn)算符“*”,一般格式是:
(*指針變數(shù)名).成員名(3)利用指向結(jié)構(gòu)變數(shù)的指針和指向成員運(yùn)算符“->”,一般格式是:
指針變數(shù)名->成員名7.2.2指向結(jié)構(gòu)類型數(shù)組的指針 如果說(shuō)明了一個(gè)結(jié)構(gòu)數(shù)組和一個(gè)同類型的指針變數(shù)後,把數(shù)組名賦給該指針變數(shù),那麼這個(gè)指針變數(shù)就指向了這個(gè)數(shù)組。這時(shí),程式中不僅可以使用下標(biāo)形式來(lái)訪問(wèn)數(shù)組的元素,也可以通過(guò)對(duì)指針變數(shù)的操作,對(duì)數(shù)組元素進(jìn)行訪問(wèn)。7.2.3C語(yǔ)言的記憶體管理函數(shù) 需要時(shí)就向系統(tǒng)申請(qǐng)一定數(shù)量的存儲(chǔ)區(qū);不需要時(shí),就把佔(zhàn)用的存儲(chǔ)區(qū)歸還給系統(tǒng)?利用C語(yǔ)言提供的記憶體管理函數(shù),就可以達(dá)到這種目的。常用的記憶體管理函數(shù)有兩個(gè),它們被包含在頭檔“alloc.h”(或頭檔“stdlib.h”)裏。1.長(zhǎng)度運(yùn)算符:sizeof 一般格式是:sizeof(<數(shù)據(jù)類型符>) 或 sizeof(<變數(shù)名>)2.void指針類型 所謂“void指針類型”,即它是一個(gè)指針變數(shù),在它裏面存放的是一個(gè)記憶體地址,但沒(méi)有指明它是指向哪一種數(shù)據(jù)類型。3.記憶體分配函數(shù)malloc() malloc()函數(shù)的函數(shù)頭:void*malloc(unsignedintsize) 即malloc()函數(shù)有一個(gè)無(wú)符號(hào)整型的形式參數(shù),返回值是void型指針(地址)。 malloc()函數(shù)的功能: 向系統(tǒng)申請(qǐng)大小為size個(gè)位元組的存儲(chǔ)區(qū)。如果申請(qǐng)成功,則返回分配到存儲(chǔ)區(qū)的第1個(gè)位元組地址(viod型);如果申請(qǐng)失敗,則返回NULL(這是系統(tǒng)定義的一個(gè)符號(hào)常量,表示空指針)。 調(diào)用malloc()函數(shù)的一般格式:<指針變數(shù)名>=(<強(qiáng)制轉(zhuǎn)換類型>)malloc(<所需位元組數(shù)>);4.記憶體釋放函數(shù)free() free()函數(shù)的函數(shù)頭:voidfree(void*p) 即free()函數(shù)以一個(gè)void型指針作為形式參數(shù),無(wú)返回值。 free()函數(shù)的功能: 將事先經(jīng)由malloc()函數(shù)申請(qǐng)到的存儲(chǔ)區(qū)歸還給系統(tǒng),指針p指向要釋放的這個(gè)存儲(chǔ)區(qū)。如果p的值是NULL,則free()函數(shù)什麼事情也不做。 調(diào)用free()函數(shù)的一般格式:free(<指針變數(shù)名>);7.2.4自引用結(jié)構(gòu)類型和鏈表 “鏈表”類同於結(jié)構(gòu)數(shù)組,其元素也都具有相同的結(jié)構(gòu)類型,每個(gè)元素也都佔(zhàn)用同樣大小的存儲(chǔ)區(qū)。但由於它的元素個(gè)數(shù)是不固定的(可以隨時(shí)增加或減少),所以只能是在需要時(shí)為某個(gè)元素分配存儲(chǔ)區(qū),不用時(shí)就收回存儲(chǔ)區(qū)。 要注意,C語(yǔ)言規(guī)定在結(jié)構(gòu)類型定義中,不能包含有本類型的成員。但唯一的例外是在一個(gè)結(jié)構(gòu)類型定義中,可以有指向該結(jié)構(gòu)類型的指針作為成員,因?yàn)橹羔標(biāo)枰拇鎯?chǔ)量是固定的。由於這個(gè)指針指向的是具有這種結(jié)構(gòu)的變數(shù),所以常稱其是一個(gè)“自引用”結(jié)構(gòu)。 圖7-10給出了鏈表的直觀示例。圖7-10一個(gè)鏈表的直觀示例7.3共用式數(shù)據(jù)類型 與結(jié)構(gòu)式數(shù)據(jù)類型類似,“共用”式數(shù)據(jù)類型也是C語(yǔ)言向用戶提供的一種把不同數(shù)據(jù)類型聚集在一起,構(gòu)成一種新數(shù)據(jù)類型的手段。它們兩者間最大的區(qū)別是:結(jié)構(gòu)類型變數(shù)的每一個(gè)成員都佔(zhàn)有各自的存儲(chǔ)區(qū),而共用類型變數(shù)的所有成員卻共用一個(gè)存儲(chǔ)區(qū)。7.3.1共用式數(shù)據(jù)類型的定義 在程式中定義一個(gè)共用式數(shù)據(jù)類型,要用到C語(yǔ)言裏的保留字“union”。定義共用類型的一般格式是:
union<共用類型名> { <成員列表> }; 經(jīng)過(guò)定義後,在C語(yǔ)言裏:union<共用類型名> 這個(gè)整體,就是新定義的一種數(shù)據(jù)類型的名字了。 <成員列表>由如下形式的“對(duì)”組成:<數(shù)據(jù)類型><成員名>;7.3.2共用類型變數(shù)的說(shuō)明和使用 定義了一個(gè)共用類型後,只表明這種數(shù)據(jù)類型的存在,它不是變數(shù),並不佔(zhàn)用記憶體空間。只有說(shuō)明了一個(gè)變數(shù)具有這種數(shù)據(jù)類型,系統(tǒng)才會(huì)為這個(gè)變數(shù)分配存儲(chǔ)空間,程式中才能使用這個(gè)變數(shù)。 說(shuō)明一個(gè)共用類型的變數(shù)(在不引起混淆的情況下,簡(jiǎn)稱共用變數(shù),甚至就稱變數(shù)),有如下的兩種方式。1.先定義共用類型,再說(shuō)明變數(shù) 對(duì)於共用變數(shù),C語(yǔ)言是以其所有成員中所需存儲(chǔ)量最大者來(lái)為這個(gè)變數(shù)分配存儲(chǔ)空間的,共用變數(shù)的各個(gè)成員都使用這個(gè)存儲(chǔ)空間,只是不同時(shí)使用罷了。2.在定義共用類型的同時(shí)說(shuō)明變數(shù) 下麵3種訪問(wèn)共用型變數(shù)成員的方法是等價(jià)的。
共用變數(shù)名.成員名 (*p).成員名 p->成員名 由於共用變數(shù)的若干個(gè)成員共同使用一個(gè)存儲(chǔ)區(qū)域,而這些成員的類型可以完全不同,因此共用變數(shù)在某一時(shí)刻起作用的成員,是指最後一次被賦值的成員。7.4枚舉式數(shù)據(jù)類型 C語(yǔ)言向用戶提供了枚舉式數(shù)據(jù)類型。枚舉式數(shù)據(jù)類型同樣是一種定義新數(shù)據(jù)類型的手段,其特點(diǎn)是用若干名字代表一個(gè)整型常量的集合,具有這種類型的變數(shù),只能以集合中所列名字為其取值。7.4.1枚舉式數(shù)據(jù)類型的定義 定義枚舉類型的一般格式是:
enum<枚舉類型名> { <枚舉元素表> }; 經(jīng)過(guò)定義後,在C語(yǔ)言裏:union<枚舉類型名> 這個(gè)整體,就是新定義的一種數(shù)據(jù)類型的名字了。 <枚舉元素表>列出由逗號(hào)隔開的n個(gè)識(shí)別字,它們是具有這種數(shù)據(jù)類型的變數(shù)可取整型數(shù)值相對(duì)應(yīng)的符號(hào)名字。要特別注意,枚舉定義中<枚舉元素表>裏列出的名字,是整型數(shù)值相對(duì)應(yīng)的符號(hào)名字,不是字串常量。 在定義時(shí),可以更改<枚舉元素表>中所列識(shí)別字對(duì)應(yīng)的整型數(shù)值。7.4.2枚舉類型的使用1.先定義枚舉類型,再說(shuō)明變數(shù)2.在定義枚舉類型的同時(shí)說(shuō)明變數(shù)7.5編譯預(yù)處理和起別名7.5.1巨集命令#define C語(yǔ)言中,以“#define”開頭的行稱為“巨集命令行”。1.簡(jiǎn)單宏 簡(jiǎn)單巨集命令行的一般形式是:#define<宏名><字元序列> 其中<宏名>是一個(gè)符合C語(yǔ)言語(yǔ)法規(guī)定的識(shí)別字,為了與程式中的變數(shù)加以區(qū)分,宏名常用大寫字母書寫。<字元序列>是由C語(yǔ)言字元集中字元構(gòu)成的序列,它不是字串常量,因此外面沒(méi)有雙引號(hào)。 簡(jiǎn)單巨集命令行的作用是:有了它以後,編程時(shí)可以把出現(xiàn)在程式中的<字元序列>都使用<宏名>來(lái)代替。而在編譯預(yù)處理時(shí),又反過(guò)來(lái)做宏替換——把程式中的<宏名>全部用<字元序列>替換回來(lái)。 如果要取消一個(gè)已有宏的作用,就要在程式的適當(dāng)?shù)胤桨才啪幾g預(yù)處理命令:#undef<宏名>這樣,由<宏名>所指定的宏的作用就終止了。使用巨集命令行要注意以下幾點(diǎn)。(1)在寫巨集命令行時(shí),#define、<宏名>、<字元序列>之間要用空格隔開。(2)每一個(gè)巨集命令行要單獨(dú)佔(zhàn)用一行,它不能以分號(hào)“;”作為結(jié)束。(3)在編譯預(yù)處理做宏替換時(shí),只是用<字元序列>“原封不動(dòng)地”將程式中的<宏名>替換掉。2.帶參數(shù)宏 帶參數(shù)巨集命令行的一般形式是:#define<宏名>(<參數(shù)表>)<字元序列> 帶參數(shù)巨集命令行的作用是:有了它以後,編程時(shí)出現(xiàn)在程式中的<字元序列>不僅可以用<宏名>來(lái)代替,而且宏名中可以帶有參數(shù)。而在編譯預(yù)處理時(shí),又反過(guò)來(lái)做宏替換——把程式中的<宏名>及其參數(shù)全部用相應(yīng)的<字元序列>替換回來(lái)。使用帶參數(shù)巨集命令行要注意以下兩點(diǎn)。(1)帶參數(shù)巨集命令行裏給出的是形式參數(shù),程式中使用的是實(shí)際參數(shù)。(2)帶參數(shù)宏與簡(jiǎn)單宏在替換規(guī)則上是一樣的,編譯預(yù)處理時(shí)都是“原封不動(dòng)地”替換。帶參數(shù)宏看起來(lái)與有參函數(shù)類似,也有形參、實(shí)參之說(shuō)。但它們之間有如下幾點(diǎn)區(qū)別。(1)函數(shù)調(diào)用時(shí),先計(jì)算實(shí)際參數(shù)的值,然後向形式參數(shù)傳遞;宏替換時(shí),不對(duì)它的參數(shù)進(jìn)行任何計(jì)算,只是簡(jiǎn)單地替換而已。(2)函數(shù)名是有類型的,函數(shù)中的形式參數(shù)和實(shí)際參數(shù)也都有自己明確的類型;宏名沒(méi)有類型,其參數(shù)也無(wú)類型可言,它們都只是符號(hào)而已。(3)函數(shù)調(diào)用是在程式運(yùn)行時(shí)處理的(比如為參數(shù)分配存儲(chǔ)區(qū));宏替換是在編譯前預(yù)處理時(shí)完成的,沒(méi)有分配存儲(chǔ)區(qū)的問(wèn)題。(4)函數(shù)調(diào)用不會(huì)增加程式的長(zhǎng)度,但要耗費(fèi)程式的運(yùn)行時(shí)間;宏替換會(huì)增加程式的長(zhǎng)度,耗費(fèi)的是編譯時(shí)間,而不是程式的運(yùn)行時(shí)間。7.5.2檔包含命令#include 檔包含命令行的一般形式是:
#include<檔案名>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 植物園施工便道工程合同
- 2024年度供應(yīng)鏈管理合同(含多個(gè)供應(yīng)方)
- 墻面施工合同:辦公樓內(nèi)部裝修
- 石油化工鉤機(jī)租賃合同
- 招投標(biāo)項(xiàng)目團(tuán)隊(duì)溝通與協(xié)作
- 城市綠化混凝土施工合同
- 廣告?zhèn)髅巾?xiàng)目招投標(biāo)合作協(xié)議
- 建筑工地消防安全管理措施
- 房屋買賣合同的轉(zhuǎn)讓(8篇)
- 企業(yè)農(nóng)業(yè)貸款還款協(xié)議
- 2024年全國(guó)職業(yè)院校技能大賽高職組(智慧物流賽項(xiàng))考試題庫(kù)(含答案)
- 北師大版(三起)(2024)三年級(jí)上冊(cè)英語(yǔ)Unit 1 Family單元測(cè)試卷(含答案)
- 2024水利云播五大員考試題庫(kù)及答案
- 妊娠合并泌尿系結(jié)石診斷治療中國(guó)專家共識(shí)解讀課件
- 2024中考語(yǔ)文《儒林外史》歷年真題專練(學(xué)生版+解析版)
- 小學(xué)必背古詩(shī)練習(xí)題(四年級(jí)上冊(cè))(含答案)
- 工程項(xiàng)目審核現(xiàn)場(chǎng)踏勘記錄表
- DL∕T 698.45-2017 電能信息采集與管理系統(tǒng) 第4-5部分:通信協(xié)議-面向?qū)ο蟮臄?shù)據(jù)交換協(xié)議
- 2021年11月廣州市增城區(qū)(衛(wèi)生類)招聘考試《護(hù)理學(xué)》試卷
- 登革熱診療方案(衛(wèi)健委2024年版)
- 上海版小學(xué)英語(yǔ)單詞表
評(píng)論
0/150
提交評(píng)論