C語言程序設(shè)計(jì)-第9章.ppt_第1頁
C語言程序設(shè)計(jì)-第9章.ppt_第2頁
C語言程序設(shè)計(jì)-第9章.ppt_第3頁
C語言程序設(shè)計(jì)-第9章.ppt_第4頁
C語言程序設(shè)計(jì)-第9章.ppt_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C語言程序設(shè)計(jì),貴陽市新科電腦培訓(xùn)中心 唐紹國 制作,全國計(jì)算機(jī)等級(jí)考試 二級(jí)教程,第九章 數(shù)組,本章要點(diǎn): 一維數(shù)組的定義和一維數(shù)組元素的引用 一維數(shù)組和指針 函數(shù)之間對(duì)一維數(shù)組和數(shù)組元素的引用 二維數(shù)組的定義和二維數(shù)組元素的引用 二維數(shù)組和指針 二維數(shù)組名和指針數(shù)組作為實(shí)參,什么是數(shù)組?,數(shù)組是按次序排列的一組數(shù)據(jù),用一個(gè)統(tǒng)一的數(shù)組名標(biāo)識(shí)這一數(shù)組,而用下標(biāo)來指示數(shù)組中元素的序號(hào)。在數(shù)組中所有的數(shù)組元素都具有相同的數(shù)據(jù)類型。 在c語言中,數(shù)組屬于構(gòu)造數(shù)據(jù)類型。一個(gè)數(shù)組可以分解成多個(gè)數(shù)組元素,這些數(shù)組元素可以是基本數(shù)據(jù)類型或是構(gòu)造類型。 按數(shù)組元素的不同,可分為數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結(jié)構(gòu)數(shù)組等各種類型。,一維數(shù)組的定義,當(dāng)數(shù)組中每個(gè)元素只帶有一個(gè)下標(biāo)時(shí),稱這樣的數(shù)組為一維數(shù)組。 一維數(shù)組的定義形式如下: 類型名 數(shù)組名常量表達(dá)式,;,一維數(shù)組說明符,例如:int a8; 說明:Int是類型名,a8是一維數(shù)組說明符。經(jīng)過以上定義后,c編譯程序?qū)閍數(shù)組在內(nèi)存中開辟8個(gè)連續(xù)的存儲(chǔ)單元。在程序中,我們可以通過數(shù)組名加下標(biāo)的方式去引用每一個(gè)存儲(chǔ)單元。 比如:引用第5個(gè)元素的方法為:a4,一維數(shù)組元素的引用,一維數(shù)組只帶有一個(gè)下標(biāo),它的引用形式如下: 數(shù)組名下標(biāo) /*下標(biāo)可以是表達(dá)式*/ 例如:double x8; /*定義了一個(gè)雙精度型數(shù)組,有8個(gè)元素*/ 則:x3或xi+3都是合法的引用形式。 數(shù)組概念的相關(guān)解釋: 1、一個(gè)數(shù)組元素實(shí)際上就是一個(gè)變量名,代表內(nèi)存中的一個(gè)存儲(chǔ)單元。一個(gè)數(shù)組占有一串連續(xù)的存儲(chǔ)單元。 2、在c語言中,一個(gè)數(shù)組不能整體引用。在c語言中,數(shù)組名中存放的是一個(gè)地址常量,它代表整個(gè)數(shù)組的首地址。 3、在引用數(shù)組元素時(shí),數(shù)組元素中下標(biāo)表達(dá)式的值必須是整數(shù),它的下限為0。在編寫程序時(shí)保證數(shù)組下標(biāo)不越界是十分重要的。,一維數(shù)組的初始化,1、在定義數(shù)組的同時(shí)為數(shù)組元素賦初值 例: int a8=0,1,2,3,4,5,6,7; 注意: 所賦初值放在賦值號(hào)后的一對(duì)花括號(hào)中,數(shù)值類型必須與所說明的類型相一致,所賦初值之間用逗號(hào)分隔,系統(tǒng)將按這些數(shù)值的排列順序,從a0元素開始依次給a數(shù)組中的元素賦初值。 以上語句將給a0賦初值0,給a1賦初值1,給a7賦初值7。在指定初值時(shí),第一個(gè)初值必定賦給下標(biāo)為0的元素,因此,不可能跳過前面的元素給后面的元素賦初值。 當(dāng)所賦初值少于所定義的元素的個(gè)數(shù)時(shí),將自動(dòng)給后面的元素賦以初值0。 例如:int a10=0; 該語句將給a數(shù)組中的所有元素賦初值0。對(duì)于字符型數(shù)組同樣補(bǔ)以初值0,即0。 例如:char c5=; 相當(dāng)于:char c5=, 0, 0, 0, 0,通過賦初值確定數(shù)組的大小,例如:int a =0,0,0,0,0,0,0,0; 以上語句的一對(duì)花括號(hào)中出現(xiàn)了8個(gè)0,它隱含地定義了a數(shù)組含有8個(gè)元素,此定義語句等價(jià)于以下語句: Int a8=0;,通過循環(huán)來賦值,例: main() int a10; int i; for(i=0;i10;i+) ai=2*i-1; printf(“%4d”,ai); ,一維數(shù)組和指針,一維數(shù)組和數(shù)組元素的地址 在c語言中,在函數(shù)體中或在函數(shù)外部定義的數(shù)組名可以認(rèn)為是一個(gè)存放地址值的指針變量名,其中的地址值是數(shù)組第一個(gè)元素的地址,也就是數(shù)組所占一串連續(xù)存儲(chǔ)單元的起始地址;定義數(shù)組時(shí)的類型即是此指針變量的基類型 數(shù)組名所代表的指針變量中的地址是不可改變的,也就是說,不可以給數(shù)組名重新賦值。一旦定義,a永遠(yuǎn)指向a數(shù)組的首地址。例: 若有以下定義: int a10,*p,x; 語句a=或a+都是非法的。,在c語言中,雖然不可以改變數(shù)組名a中的內(nèi)容,但可以通過對(duì)數(shù)組名加一個(gè)整數(shù)的辦法,來依次表達(dá)該數(shù)組中不同元素的地址。例如:(假定已定義k為整型變量); for(k=0;k10;K+) p=a+k; 在循環(huán)中并沒有改變a的值,但通過表達(dá)式:a+k,逐一給出了a數(shù)組中每個(gè)元素的地址,使p依次指向a數(shù)組中的每一個(gè)元素。,由于scanf函數(shù)要求給出輸入項(xiàng)的地址值,因此,可以通過以下循環(huán)從終端讀入數(shù)據(jù)依次放入a數(shù)組中: for(k=0;k10;k+) scanf(“%d”,a+k); 語句p=都是合法的。這兩條語句的功能相同,都是使指針變量p指向了a數(shù)組的首地址。,以下循環(huán)中,由于在進(jìn)入循環(huán)時(shí)使指針變量p指向了a數(shù)組的首地址,p+將使指針變量p依次指向a數(shù)組中的每一個(gè)元素。 for(p=a,k=0;k10;k+) p+; 因此,以下循環(huán)也可以將從終端讀入的數(shù)據(jù)依次放入a數(shù)組中: for(p=a,k=0;k10;k+) scanf(“%d”,p); p+;) 可以進(jìn)一步簡化寫成: for(p=a,k=0;k10;k+) scanf(“%d”,p+); 還可以進(jìn)一步簡化寫成: for(p=a;p-a10;p+) scanf(“%d”,p);,通過數(shù)組的首地址引用數(shù)組元素,a是a數(shù)組元素的首地址,a(即a+0)的值即等于,通過指針來引用一維數(shù)組元素,若有以下定義: Int a10,*p; Int k; 并執(zhí)行語句:p=a;或p=,用帶下標(biāo)的指針變量引用一維數(shù)組元素,若有以下定義和語句: int *p,s10,I; p=s, 且0i10,我們已經(jīng)知道,可以使用&si、s+i和p+i三種表達(dá)式來表示si的地址。同時(shí)可以用si、*(s+i)和*(p+i)三種表達(dá)式來表示數(shù)組元素si。很明顯,si可以用表達(dá)式*(s+i)來表示,則同理,*(p+i)也應(yīng)該可以用pi的形式來表示。事實(shí)上,在C語言中,方括號(hào)不是僅用來表示數(shù)組元素的記號(hào),而是一種運(yùn)算符。因此,當(dāng)p指向s數(shù)組的首地址時(shí),表示數(shù)組元素si的表達(dá)式應(yīng)當(dāng)有: (1)si (2)*(s+i) (3)*(p+i) (4)pi 共四種形式。但在這里,s和p有著明顯的區(qū)別,s是不可變的,而p中的地址值卻是可變的。因此,s+、s=p,p=&s等都是非法的。而p+、p=s、p=&si則都是合法的表達(dá)式。,函數(shù)之間對(duì)一維數(shù)組和數(shù)組元素的引用,數(shù)組元素作實(shí)參 當(dāng)調(diào)用函數(shù)時(shí),數(shù)組元素可以作為實(shí)參傳遞給形參,每個(gè)數(shù)組元素實(shí)際上代表內(nèi)存中的一個(gè)存儲(chǔ)單元,故和普通變量一樣,對(duì)應(yīng)的形參必須是類型相同的變量。數(shù)組元素的值可以傳送給該變量,在函數(shù)中只能對(duì)該變量進(jìn)行操作,而不能直接引用對(duì)應(yīng)數(shù)組元素。 數(shù)組名作實(shí)參 數(shù)組名也可以作為實(shí)參傳送,但數(shù)組名本身是一個(gè)地址值,因此,對(duì)應(yīng)的形參就就應(yīng)當(dāng)是一個(gè)指針變量,此指針變量的基類型必須與數(shù)組的類型一致。在函數(shù)中,可以通過此指針變量來引用調(diào)用函數(shù)中對(duì)應(yīng)的數(shù)組元素,從而達(dá)到對(duì)調(diào)用函數(shù)中對(duì)應(yīng)的數(shù)組元素進(jìn)行操作。,形參的幾種寫法,當(dāng)數(shù)組名作為實(shí)參時(shí),對(duì)應(yīng)的形參除了應(yīng)該是指針外,形參還可以用另外兩種形式。 (1)arrin(int *a); (2)arrin(int aM); (3)arrin(int a ); 雖然說明的形式不一樣,但C編譯程序都將把a(bǔ)處理成指針。,函數(shù)的指針形參和函數(shù)體中數(shù)組的區(qū)別,(1)指針形參:程序只為指針形參分配一個(gè)存儲(chǔ)單元;卻要為數(shù)組分配多個(gè)連續(xù)的存儲(chǔ)單元。 (2)指針形參是一個(gè)指針變量,可以重新改變它的指向,而數(shù)組名是一個(gè)指針常量,一旦定義,它就永遠(yuǎn)指向了該數(shù)組的首地址。 (3)指針形參和數(shù)組都是函數(shù)中的內(nèi)部變量,使用到的時(shí)候才為它們臨時(shí)開辟存儲(chǔ)單元,使用完后要釋放掉其所占用的存儲(chǔ)空間.,二維數(shù)組的定義和二維數(shù)組元素的引用,當(dāng)二維數(shù)組中每個(gè)元素帶有兩個(gè)下標(biāo)時(shí),稱這樣的數(shù)組為二維數(shù)組。在邏輯上,可以把二維數(shù)組看成是一個(gè)具有行和列的表格或一個(gè)矩陣。 二維數(shù)組的定義: 類型名 數(shù)組名常量表達(dá)式1常量表達(dá)式2 ; 二維數(shù)組說明符中必須有用兩個(gè)方括號(hào)括起來的常量表達(dá)式,常量表達(dá)式的值只能是正整數(shù)??梢园选俺A勘磉_(dá)式1”看成是矩陣(或表格)的行數(shù),它決定了第一維下標(biāo)值的上限為“常量表達(dá)式1”-1;可以把常量表達(dá)式2看成是矩陣(或表格)的列數(shù),它決定了第二維下標(biāo)值的上限為:“常量表達(dá)式2”-1。例如有以下定義: Int a34; 在這里,int 是類型名,a34是一個(gè)二維數(shù)組說明符??梢哉J(rèn)為此語句說明了:(1)定義了一個(gè)名為a 的二維數(shù)組。(2)a數(shù)組中每個(gè)元素都是整型。(3)a數(shù)組中共有34個(gè)元素。(4)a數(shù)組的邏輯結(jié)構(gòu)是一個(gè)具有3行4列的矩陣(或表格)。,二維數(shù)組的引用,引用二維數(shù)組時(shí)必須帶有兩個(gè)下標(biāo)。引用形式如下: 數(shù)組名下標(biāo)表達(dá)式1下標(biāo)表達(dá)式2 例:double w42; 則w01、wij、wi+ki+k都是合法的數(shù)組元素引用形式,只是每個(gè)下標(biāo)表達(dá)式的值必須是整數(shù),且不得超過數(shù)組定義中的上、下界。 注意:引用二維數(shù)組時(shí),一定要把兩個(gè)下標(biāo)分別放在兩個(gè)方括號(hào)內(nèi)。例如,引用以上w數(shù)組時(shí),不可以寫成:w0,1、wi,j、wi+k,j+k,這都是不合法的。,二維數(shù)組的初始化,1、所賦初值個(gè)數(shù)與數(shù)組元素的個(gè)數(shù)相同,按對(duì)應(yīng)關(guān)系存放 2、每行所賦初值個(gè)數(shù)少于數(shù)組元素個(gè)數(shù)時(shí),系統(tǒng)自動(dòng)給后面的元素賦初值0 3、所賦初值行數(shù)少于數(shù)組行數(shù),系統(tǒng)自動(dòng)給后面各行補(bǔ)初值0 4、賦初值時(shí)省略行花括號(hào),系統(tǒng)將按數(shù)組元素在內(nèi)存中的排列順序,將花括號(hào)中的數(shù)據(jù)一一對(duì)應(yīng)地賦給各個(gè)元素,若數(shù)不足,系統(tǒng)將給后面的元素補(bǔ)以初值0,通過賦初值確定數(shù)組的大小,對(duì)于一維數(shù)組,可以在數(shù)組定義語句中省略方括號(hào)中的常量表達(dá)式,通過所賦初值的個(gè)數(shù)來確定數(shù)組的大?。粚?duì)于二維數(shù)組,只可以省略第一個(gè)方括號(hào)中的常量表達(dá)式,而不能省略第二個(gè)括號(hào)中的常量表達(dá)式。這時(shí),第一維的大小按以下規(guī)則決定: 1)當(dāng)初值的個(gè)數(shù)能被第二維的常量表達(dá)式的值除盡時(shí),所得商 數(shù)就是第一維的大小。 2)當(dāng)初值的個(gè)數(shù)不能被第二維的常量表達(dá)式值除盡時(shí),則:第一維的大小=所得的商數(shù)+1。,通過地址來引用二維數(shù)組元素,若有以下定義: int a34,i,j;且0i3;0j4 則數(shù)組元素可用以下五種表達(dá)式來引用。 (1) aij (2) *(ai+j) (3) *(*(a+i)+j) (4) (*(a+i)j (5) *(&a00+4*i+j),通過建立一個(gè)指針數(shù)組來引用二維數(shù)組元素,若有以下定義: int *p3,a32,I,j; 則可以通過以下形式引用aIj: (1)*(pI+j) /*與*(aI+j)對(duì)應(yīng)*/ (2)*(*(p+I)+j) /*與*(*(a+I)+j)對(duì)應(yīng)*/ (3)(*(p+I)j /*與(*(a+j)j對(duì)應(yīng)*/ (4)pIj /*與aIj對(duì)應(yīng)*/,通過建立一個(gè)行指針來引用二維數(shù)組,若有以下定義: int a32,(*prt)2; 在這里,說明符(*prt)2中,由于一對(duì)圓括號(hào)的存在,所以*號(hào)首先與prt 結(jié)合,說明prt是一個(gè)指針變量,然后再與說明符2結(jié)合,說明指針變量prt的基類型是一個(gè)包含有兩個(gè)int元素的數(shù)組。在這里,prt的基類型與a的相同,因此prt=a;是合法的賦值語句。prt+1等價(jià)于a+1、等價(jià)于a1。當(dāng)prt指向數(shù)組的開頭時(shí),可以通過以下形式來引用aIj: (1)*(prtI+j) /*與*(aI+j)對(duì)應(yīng)*/ (2)*(*(prt+I)+j) /*與*(*(a+I)+j)對(duì)應(yīng)*/ (3)(*(prt+I)j /*與(*(a+I)j對(duì)應(yīng)*/ (4)prtIj /*與aIj對(duì)應(yīng)*/ 在這里,prt是個(gè)指針變量,它的值可變,而

溫馨提示

  • 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)論