面向?qū)ο蟪绦蛟O(shè)計(jì)C++第4章-復(fù)合數(shù)據(jù)類型_第1頁
面向?qū)ο蟪绦蛟O(shè)計(jì)C++第4章-復(fù)合數(shù)據(jù)類型_第2頁
面向?qū)ο蟪绦蛟O(shè)計(jì)C++第4章-復(fù)合數(shù)據(jù)類型_第3頁
面向?qū)ο蟪绦蛟O(shè)計(jì)C++第4章-復(fù)合數(shù)據(jù)類型_第4頁
面向?qū)ο蟪绦蛟O(shè)計(jì)C++第4章-復(fù)合數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、學(xué)習(xí)目標(biāo) 掌握一維數(shù)組和二維數(shù)組的定義、初始化和使用方法 理解字符數(shù)組與字符串的區(qū)別,掌握它們的使用方法 理解結(jié)構(gòu)類型的含義,掌握結(jié)構(gòu)類型變量的定義和使用 理解指針的含義,掌握指針的定義、初始化和使用方法4.1 一維數(shù)組4.1.1 一維數(shù)組的定義一維數(shù)組的定義格式為: ;其中: 類型標(biāo)識(shí)符: 表示數(shù)組中所有元素的數(shù)據(jù)類型。數(shù)組名: 就是這個(gè)數(shù)組型變量的名稱。常量表達(dá)式: 指出一維數(shù)組中元素的個(gè)數(shù),即數(shù)組長度。4.2 二維數(shù)組4.2.1 二維數(shù)組的定義二維數(shù)組的定義格式為: ;其中: 常量表達(dá)式1: 表示數(shù)組的行數(shù)。常量表達(dá)式2: 表示數(shù)組的列數(shù)。4.2.2 二維數(shù)組的引用二維數(shù)組元素的引用形式

2、為: 4.2 二維數(shù)組4.2.3 二維數(shù)組的初始化二維數(shù)組的初始化,可以用以下兩種方法來實(shí)現(xiàn):(1) 按行賦初值int a34=11,12,13,14,21,22,23,24,31,32,33,34;賦初值后數(shù)組為:4.2 二維數(shù)組4.2.3 二維數(shù)組的初始化二維數(shù)組的初始化,可以用以下兩種方法來實(shí)現(xiàn):(2) 按在內(nèi)存中的排列順序給各元素賦初值 將所有數(shù)據(jù)寫在一個(gè)花括號(hào)內(nèi),按數(shù)據(jù)排列的順序?qū)Ω髟刭x初值。 對(duì)部分元素顯式賦初值,未顯式賦初值的元素將自動(dòng)設(shè)為0。 若對(duì)全部元素顯式賦初值,則數(shù)組第一維的元素個(gè)數(shù)在說明時(shí)可以不指定,但第二維的元素個(gè)數(shù)不能缺省。4.3 字符數(shù)組與字符串4.3.1 字符

3、數(shù)組1. 字符數(shù)組的定義 一維字符數(shù)組的定義格式為:char 數(shù)組名常量表達(dá)式; 二維字符數(shù)組的定義格式為:char 數(shù)組名常量表達(dá)式1 常量表達(dá)式2;2 字符數(shù)組的引用字符數(shù)組的引用和數(shù)值型數(shù)組一樣,也是使用下標(biāo)的形式。4.3 字符數(shù)組與字符串4.3.1 字符數(shù)組3. 字符數(shù)組的初始化一維字符數(shù)組的初始化,有如下幾種方法:(1) 逐個(gè)字符賦給數(shù)組中各元素(2) 在定義字符數(shù)組時(shí)進(jìn)行初始化,可以省略數(shù)組長度字符數(shù)組的長度也可用初值來確定(3) 利用字符串給字符數(shù)組賦初值4.3 字符數(shù)組與字符串4.3.2 字符串1字符串及其結(jié)束符0 字符串是用雙引號(hào)括起來的若干有效字符序列,以0 (ASCII碼

4、值為0)結(jié)尾,也可以看成是以0結(jié)尾的字符數(shù)組。例如:I am a student /正確,合法的字符串a(chǎn) /正確,合法的字符串a(chǎn) /錯(cuò)誤!是單字符,非字符串morning /錯(cuò)誤!沒用雙引號(hào)括起來字符串是利用字符數(shù)組存放的。在進(jìn)行字符處理時(shí),必須事先知道字符數(shù)組中的字符個(gè)數(shù),這在程序設(shè)計(jì)過程中是很麻煩的一件事。4.3 字符數(shù)組與字符串3字符串的輸入與輸出在C/C+語言庫函數(shù)中,提供以下兩類字符串的輸入與輸出函數(shù)。(1) 格式化的字符串輸入/輸出函數(shù):scanf()/ printf()(2) 非格式化的字符串輸入/輸出函數(shù):gets()、cin.getline()/puts() 格式: gets

5、(字符數(shù)組名); cin.getline(char *, n);功能:讀入鍵盤輸入的字符串,并存儲(chǔ)在字符數(shù)組中。 格式: puts( 字符數(shù)組名);功能:將字符數(shù)組中的字符串輸出在屏幕上。4.3 字符數(shù)組與字符串4.3.3 字符串處理函數(shù)C+語言提供了一些字符串處理函數(shù),這些函數(shù)的原型在頭文件string.h中。1. 求字符串長度函數(shù)strlen( ) 格式: strlen(字符數(shù)組名);功能:計(jì)算字符串的實(shí)際長度(不包括結(jié)束符0)。函數(shù)的返回值為字符串的實(shí)際長度。2. 字符串復(fù)制函數(shù)strcpy( )格式: strcpy(目地字符數(shù)組名,源字符數(shù)組名);功能:把源字符數(shù)組中的字符串復(fù)制到目地

6、字符數(shù)組中,字符串結(jié)束符0 也一同復(fù)制。4.3 字符數(shù)組與字符串4.3.3 字符串處理函數(shù)C+語言提供了一些字符串處理函數(shù),這些函數(shù)的原型在頭文件string.h中。3. 字符串連接函數(shù)strcat( ) 格式: strcat(目地字符數(shù)組名,源字符數(shù)組名);功能:把源字符數(shù)組中的字符串連接到目地字符數(shù)組的后面,并刪除目地字符數(shù)組中的字符串結(jié)束符0 。要求目地字符數(shù)組應(yīng)有足夠的長度,否則不能裝下連接后的字符串。4.3 字符數(shù)組與字符串4. 兩字符串比較函數(shù)strcmp( )、strncmp()函數(shù)strcmp()用于兩字符串的比較,而函數(shù)strncmp()用于兩字符串的前n個(gè)字符構(gòu)成的子串的比

7、較。兩個(gè)字符串大小比較效果與英文單詞字典排列先后確定大小一致。格式: int r; r = strcmp(字符數(shù)組名1,字符數(shù)組名2); (或r = strncmp(字符數(shù)組名1,字符數(shù)組名2);)功能:按照ASCII碼順序比較兩個(gè)字符數(shù)組中的字符串,并由函數(shù)返回值返回比較結(jié)果。返回值如下:r0 字符串1 0 字符串1 字符串2。4.4 結(jié)構(gòu)體類型4.4.1 結(jié)構(gòu)類型的定義定義一個(gè)結(jié)構(gòu)類型的一般形式為:struct 結(jié)構(gòu)類型名 數(shù)據(jù)類型 數(shù)據(jù)項(xiàng)1; 數(shù)據(jù)類型 數(shù)據(jù)項(xiàng)2; 數(shù)據(jù)類型 數(shù)據(jù)項(xiàng)n;4.4 結(jié)構(gòu)體類型4.4.2 結(jié)構(gòu)變量的定義定義了結(jié)構(gòu)體類型Student,并不分配存儲(chǔ)空間。只有定義了

8、相應(yīng)的結(jié)構(gòu)體變量,系統(tǒng)才分配內(nèi)存空間。定義結(jié)構(gòu)體類型變量有以下2種方法:1. 間接定義法先定義結(jié)構(gòu)體類型,再定義變量 結(jié)構(gòu)體變量定義的一般形式為: struct 結(jié)構(gòu)類型名 變量名;4.4 結(jié)構(gòu)體類型4.4.2 結(jié)構(gòu)變量的定義2. 直接定義法在定義結(jié)構(gòu)體類型的同時(shí)定義變量定義的一般形式為:struct 結(jié)構(gòu)類型名 /此時(shí),結(jié)構(gòu)類型名可缺省 數(shù)據(jù)類型 數(shù)據(jù)項(xiàng)1; 數(shù)據(jù)類型 數(shù)據(jù)項(xiàng)2; 數(shù)據(jù)類型 數(shù)據(jù)項(xiàng)n;變量名表;4.4 結(jié)構(gòu)體類型4.4.3 結(jié)構(gòu)體變量的引用1簡單結(jié)構(gòu)變量的引用結(jié)構(gòu)體變量的使用是通過對(duì)其每個(gè)成員的引用來實(shí)現(xiàn)的,一般形式如下: 結(jié)構(gòu)體變量名.成員名2. 同類型結(jié)構(gòu)變量間的引用AN

9、SI C新標(biāo)準(zhǔn)允許將一個(gè)結(jié)構(gòu)類型的變量,作為一個(gè)整體賦給另一個(gè)同結(jié)構(gòu)類型的變量。如有定義: struct Student stud1,stud2; 4.4.4 結(jié)構(gòu)變量的初始化定義結(jié)構(gòu)變量的同時(shí),允許對(duì)結(jié)構(gòu)變量初始化,但結(jié)構(gòu)成員的數(shù)據(jù)類型與初值一致。4.5 結(jié)構(gòu)體數(shù)組4.5.1 結(jié)構(gòu)體數(shù)組的定義定義結(jié)構(gòu)體數(shù)組的一般形式如下: struct 結(jié)構(gòu)類型名 數(shù)組名;4.5.2 結(jié)構(gòu)體數(shù)組的引用結(jié)構(gòu)體數(shù)組元素也是通過數(shù)組名和下標(biāo)來引用的。對(duì)結(jié)構(gòu)體數(shù)組元素的引用與對(duì)結(jié)構(gòu)體變量的引用一樣,也是逐級(jí)引用,只能對(duì)最低級(jí)的成員進(jìn)行存取和運(yùn)算。結(jié)構(gòu)體數(shù)組的引用的一般形式為:數(shù)組名下標(biāo).成員名4.5 結(jié)構(gòu)體數(shù)組4.

10、5.3 結(jié)構(gòu)體數(shù)組的初始化結(jié)構(gòu)數(shù)組也可以在定義時(shí)進(jìn)行初始化。其一般形式是: struct 結(jié)構(gòu)體類型 結(jié)構(gòu)數(shù)組名n=初值表1,初值表2, 初值表n;4.6 指 針4.6.1 指針的概念為了理解指針,必須了解計(jì)算機(jī)硬件系統(tǒng)的內(nèi)存地址的概念。1內(nèi)存地址在計(jì)算機(jī)硬件系統(tǒng)的內(nèi)存存儲(chǔ)器中,擁有大量的存儲(chǔ)單元(以字節(jié)為單位)。為了便于管理,每一個(gè)存儲(chǔ)單元都有唯一的編號(hào),這個(gè)編號(hào)就是存儲(chǔ)單元的“地址”。類似于教學(xué)樓中的每一個(gè)教室需要一個(gè)編號(hào)(按樓層、順序編號(hào))。例如,對(duì)16位機(jī),DOS環(huán)境下的應(yīng)用程序,其代碼段、數(shù)據(jù)段和堆棧段放位于內(nèi)存地址0 x00000 xffff之間的640k常規(guī)內(nèi)存中。也就是說,程序

11、中的某一變量,對(duì)應(yīng)0 x00000 xffff范圍內(nèi)中的某些存儲(chǔ)單元。2變量的地址和變量的值在程序中定義變量時(shí),計(jì)算機(jī)就按變量的類型,為其分配一定長度的存儲(chǔ)單元。例如:int x,y;float z;4.6 指 針4.6.1 指針的概念為了理解指針,必須了解計(jì)算機(jī)硬件系統(tǒng)的內(nèi)存地址的概念。(3) 指針變量與它所指向的變量的關(guān)系指針變量也是變量,在內(nèi)存中也占用一定的存儲(chǔ)單元,也有“地址”和“值”的概念。指針變量的“值”是另一實(shí)體(變量、數(shù)組或函數(shù)等)的地址。指針變量px與它所指向的變量x的關(guān)系,用指針運(yùn)算符“*”表示為:*px即*px等價(jià)于變量x,因此,下面兩條語句的作用相同。 x = 100;

12、 /將100直接賦給變量x *px= 100; /將100間接賦給變量x4.6 指 針4.6.2 指針變量的定義和初始化1. 指針變量的定義指針變量也是先定義后使用。指針變量的定義格式: 類型標(biāo)識(shí)符 * 指針變量名;2. 指針變量的初始化在指針變量定義時(shí),所存放的地址是隨機(jī)的,未經(jīng)賦值的指針變量不能使用??梢栽诙x時(shí)對(duì)其初始化。一般地,指針的定義和初始化形式為: 類型標(biāo)識(shí)符 *指針變量名 = &變量名;4.6 指 針給指針變量賦值有以下兩種方法。(1) 在定義指針變量的同時(shí)就進(jìn)行賦值 int x; int *px = &x;(2) 先定義指針變量,之后再賦值 int x; int *px; p

13、x = &x;4.6 指 針4.6.3 指針變量的使用指針變量的使用“&”和“*” 兩種運(yùn)算來實(shí)現(xiàn)。1. 取地址運(yùn)算符“&”賦值語句: px = &x ;就是通過取地址運(yùn)算符“&”,把變量x的地址賦給指針變量px的,也就是使px指向x。于是就可以通過px間接訪問x了。我們可以用圖4-189形象地表示出來。4.6 指 針2. 指針運(yùn)算符“*” px指向x后,就可以通過px間接訪問它所指向的變量x了。*px就等價(jià)于x,所以,以下兩條賦值語句: *px= 10; x = 10;是等價(jià)的,都是將10賦給x。同樣,下兩條語句: cout x endl; cout*pxendl;是以直接和間接方式輸出變量

14、x的值,因此,輸出結(jié)果都是10。4.6 指 針3變量的存取方式(1) 直接訪問 在計(jì)算機(jī)內(nèi),對(duì)變量的訪問其實(shí)是通過存儲(chǔ)單元的地址進(jìn)行的,比如,當(dāng)機(jī)器執(zhí)行語句coutx;時(shí),機(jī)器先找到變量x的地址(即0 x2000),然后從 0 x20000 x2003這4個(gè)地址所對(duì)應(yīng)的存儲(chǔ)單元中的數(shù)據(jù)10(即變量x的值)取出,然后再輸出。前面對(duì)變量的存取操作都是這種訪問方式進(jìn)行的。(2) 間接訪問假設(shè)px是整型指針變量,它被分配到0 x20180 x201B單元,其值可以通過賦值語句“px=&x;”得到。4.6 指 針4.6.4 指針變量的自加、自減運(yùn)算指針的自加、自減運(yùn)算不同于普通變量的自加、自減運(yùn)算,即它

15、不是簡單的加1、減1。而是對(duì)應(yīng)于內(nèi)存地址的偏移量實(shí)施的,偏移量會(huì)隨指針類型的不同而異。4.6.5 指針與數(shù)組指針和數(shù)組有著極為密切的聯(lián)系。引用數(shù)組元素可以用下標(biāo)法,也可以用指針法,兩者相比而言,下標(biāo)法易于理解,適合于初學(xué)者;而指針表示法有利于提高程序執(zhí)行效率。1數(shù)組的指針數(shù)組在內(nèi)存中的起始地址叫數(shù)組的指針。數(shù)組元素的指針是其元素在內(nèi)存的起始地址。2指向數(shù)組的指針變量類似于指向變量的指針。4.6 指 針3. 數(shù)組元素的引用若有如下聲明語句:int data6;int *p = data;則p是指向數(shù)組data的指針變量,指針和數(shù)組之間有如下恒等式: data+i = &datai = p+i (

16、i=0,1,5) datai = *(data+i) = *(p+i) = pi (i=0,1,5)所以,引用數(shù)組第i個(gè)元素,有以下幾種訪問方式:4.6 指 針(1) 下標(biāo)法 datai / 數(shù)組名下標(biāo)法: pi/ 指針變量下標(biāo)法:(2) 指針法 *(data+i) / 數(shù)組名指針法: *(p +i)/ 指針變量指針法:4.6 指 針4. 指向字符串的指針用雙引號(hào)“ ” 括起來的字符序列叫字符串,例如welcome to Shenzhen University!。字符串在內(nèi)存中以0結(jié)尾。因?yàn)橐粋€(gè)字符指針可以保存一個(gè)字符的地址,所以也可以定義和初始化它。例如:char * pc = GOOD MORNING;該語句定義了字符指針pc,并且用字符串的第一個(gè)字符的地址來初始化它,此外為字符串本身也分配了內(nèi)存單元。假設(shè)字符串GOOD MORNING存放在從0 x2000開始的內(nèi)存單元中。pc被分配了一個(gè)地址,pc指向字母G。4.6 指 針4.6.6 指針與結(jié)構(gòu)一個(gè)結(jié)構(gòu)體類型變量在內(nèi)存中占有一段連續(xù)存儲(chǔ)單元,這段內(nèi)存單元的首地址,就是該結(jié)構(gòu)體變量的指針??梢杂靡粋€(gè)指針變量指向一個(gè)結(jié)構(gòu)變量,或指向結(jié)構(gòu)數(shù)組中的元

溫馨提示

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

評(píng)論

0/150

提交評(píng)論