




已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C語言程序設(shè)計,貴陽市新科電腦培訓中心 唐紹國 制作,全國計算機等級考試 二級教程,第九章 數(shù)組,本章要點: 一維數(shù)組的定義和一維數(shù)組元素的引用 一維數(shù)組和指針 函數(shù)之間對一維數(shù)組和數(shù)組元素的引用 二維數(shù)組的定義和二維數(shù)組元素的引用 二維數(shù)組和指針 二維數(shù)組名和指針數(shù)組作為實參,什么是數(shù)組?,數(shù)組是按次序排列的一組數(shù)據(jù),用一個統(tǒng)一的數(shù)組名標識這一數(shù)組,而用下標來指示數(shù)組中元素的序號。在數(shù)組中所有的數(shù)組元素都具有相同的數(shù)據(jù)類型。 在c語言中,數(shù)組屬于構(gòu)造數(shù)據(jù)類型。一個數(shù)組可以分解成多個數(shù)組元素,這些數(shù)組元素可以是基本數(shù)據(jù)類型或是構(gòu)造類型。 按數(shù)組元素的不同,可分為數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結(jié)構(gòu)數(shù)組等各種類型。,一維數(shù)組的定義,當數(shù)組中每個元素只帶有一個下標時,稱這樣的數(shù)組為一維數(shù)組。 一維數(shù)組的定義形式如下: 類型名 數(shù)組名常量表達式,;,一維數(shù)組說明符,例如:int a8; 說明:Int是類型名,a8是一維數(shù)組說明符。經(jīng)過以上定義后,c編譯程序?qū)閍數(shù)組在內(nèi)存中開辟8個連續(xù)的存儲單元。在程序中,我們可以通過數(shù)組名加下標的方式去引用每一個存儲單元。 比如:引用第5個元素的方法為:a4,一維數(shù)組元素的引用,一維數(shù)組只帶有一個下標,它的引用形式如下: 數(shù)組名下標 /*下標可以是表達式*/ 例如:double x8; /*定義了一個雙精度型數(shù)組,有8個元素*/ 則:x3或xi+3都是合法的引用形式。 數(shù)組概念的相關(guān)解釋: 1、一個數(shù)組元素實際上就是一個變量名,代表內(nèi)存中的一個存儲單元。一個數(shù)組占有一串連續(xù)的存儲單元。 2、在c語言中,一個數(shù)組不能整體引用。在c語言中,數(shù)組名中存放的是一個地址常量,它代表整個數(shù)組的首地址。 3、在引用數(shù)組元素時,數(shù)組元素中下標表達式的值必須是整數(shù),它的下限為0。在編寫程序時保證數(shù)組下標不越界是十分重要的。,一維數(shù)組的初始化,1、在定義數(shù)組的同時為數(shù)組元素賦初值 例: int a8=0,1,2,3,4,5,6,7; 注意: 所賦初值放在賦值號后的一對花括號中,數(shù)值類型必須與所說明的類型相一致,所賦初值之間用逗號分隔,系統(tǒng)將按這些數(shù)值的排列順序,從a0元素開始依次給a數(shù)組中的元素賦初值。 以上語句將給a0賦初值0,給a1賦初值1,給a7賦初值7。在指定初值時,第一個初值必定賦給下標為0的元素,因此,不可能跳過前面的元素給后面的元素賦初值。 當所賦初值少于所定義的元素的個數(shù)時,將自動給后面的元素賦以初值0。 例如:int a10=0; 該語句將給a數(shù)組中的所有元素賦初值0。對于字符型數(shù)組同樣補以初值0,即0。 例如:char c5=; 相當于:char c5=, 0, 0, 0, 0,通過賦初值確定數(shù)組的大小,例如:int a =0,0,0,0,0,0,0,0; 以上語句的一對花括號中出現(xiàn)了8個0,它隱含地定義了a數(shù)組含有8個元素,此定義語句等價于以下語句: 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ù)組名可以認為是一個存放地址值的指針變量名,其中的地址值是數(shù)組第一個元素的地址,也就是數(shù)組所占一串連續(xù)存儲單元的起始地址;定義數(shù)組時的類型即是此指針變量的基類型 數(shù)組名所代表的指針變量中的地址是不可改變的,也就是說,不可以給數(shù)組名重新賦值。一旦定義,a永遠指向a數(shù)組的首地址。例: 若有以下定義: int a10,*p,x; 語句a=或a+都是非法的。,在c語言中,雖然不可以改變數(shù)組名a中的內(nèi)容,但可以通過對數(shù)組名加一個整數(shù)的辦法,來依次表達該數(shù)組中不同元素的地址。例如:(假定已定義k為整型變量); for(k=0;k10;K+) p=a+k; 在循環(huán)中并沒有改變a的值,但通過表達式:a+k,逐一給出了a數(shù)組中每個元素的地址,使p依次指向a數(shù)組中的每一個元素。,由于scanf函數(shù)要求給出輸入項的地址值,因此,可以通過以下循環(huán)從終端讀入數(shù)據(jù)依次放入a數(shù)組中: for(k=0;k10;k+) scanf(“%d”,a+k); 語句p=都是合法的。這兩條語句的功能相同,都是使指針變量p指向了a數(shù)組的首地址。,以下循環(huán)中,由于在進入循環(huán)時使指針變量p指向了a數(shù)組的首地址,p+將使指針變量p依次指向a數(shù)組中的每一個元素。 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+;) 可以進一步簡化寫成: for(p=a,k=0;k10;k+) scanf(“%d”,p+); 還可以進一步簡化寫成: 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=,用帶下標的指針變量引用一維數(shù)組元素,若有以下定義和語句: int *p,s10,I; p=s, 且0i10,我們已經(jīng)知道,可以使用&si、s+i和p+i三種表達式來表示si的地址。同時可以用si、*(s+i)和*(p+i)三種表達式來表示數(shù)組元素si。很明顯,si可以用表達式*(s+i)來表示,則同理,*(p+i)也應(yīng)該可以用pi的形式來表示。事實上,在C語言中,方括號不是僅用來表示數(shù)組元素的記號,而是一種運算符。因此,當p指向s數(shù)組的首地址時,表示數(shù)組元素si的表達式應(yī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則都是合法的表達式。,函數(shù)之間對一維數(shù)組和數(shù)組元素的引用,數(shù)組元素作實參 當調(diào)用函數(shù)時,數(shù)組元素可以作為實參傳遞給形參,每個數(shù)組元素實際上代表內(nèi)存中的一個存儲單元,故和普通變量一樣,對應(yīng)的形參必須是類型相同的變量。數(shù)組元素的值可以傳送給該變量,在函數(shù)中只能對該變量進行操作,而不能直接引用對應(yīng)數(shù)組元素。 數(shù)組名作實參 數(shù)組名也可以作為實參傳送,但數(shù)組名本身是一個地址值,因此,對應(yīng)的形參就就應(yīng)當是一個指針變量,此指針變量的基類型必須與數(shù)組的類型一致。在函數(shù)中,可以通過此指針變量來引用調(diào)用函數(shù)中對應(yīng)的數(shù)組元素,從而達到對調(diào)用函數(shù)中對應(yīng)的數(shù)組元素進行操作。,形參的幾種寫法,當數(shù)組名作為實參時,對應(yīng)的形參除了應(yīng)該是指針外,形參還可以用另外兩種形式。 (1)arrin(int *a); (2)arrin(int aM); (3)arrin(int a ); 雖然說明的形式不一樣,但C編譯程序都將把a處理成指針。,函數(shù)的指針形參和函數(shù)體中數(shù)組的區(qū)別,(1)指針形參:程序只為指針形參分配一個存儲單元;卻要為數(shù)組分配多個連續(xù)的存儲單元。 (2)指針形參是一個指針變量,可以重新改變它的指向,而數(shù)組名是一個指針常量,一旦定義,它就永遠指向了該數(shù)組的首地址。 (3)指針形參和數(shù)組都是函數(shù)中的內(nèi)部變量,使用到的時候才為它們臨時開辟存儲單元,使用完后要釋放掉其所占用的存儲空間.,二維數(shù)組的定義和二維數(shù)組元素的引用,當二維數(shù)組中每個元素帶有兩個下標時,稱這樣的數(shù)組為二維數(shù)組。在邏輯上,可以把二維數(shù)組看成是一個具有行和列的表格或一個矩陣。 二維數(shù)組的定義: 類型名 數(shù)組名常量表達式1常量表達式2 ; 二維數(shù)組說明符中必須有用兩個方括號括起來的常量表達式,常量表達式的值只能是正整數(shù)??梢园选俺A勘磉_式1”看成是矩陣(或表格)的行數(shù),它決定了第一維下標值的上限為“常量表達式1”-1;可以把常量表達式2看成是矩陣(或表格)的列數(shù),它決定了第二維下標值的上限為:“常量表達式2”-1。例如有以下定義: Int a34; 在這里,int 是類型名,a34是一個二維數(shù)組說明符??梢哉J為此語句說明了:(1)定義了一個名為a 的二維數(shù)組。(2)a數(shù)組中每個元素都是整型。(3)a數(shù)組中共有34個元素。(4)a數(shù)組的邏輯結(jié)構(gòu)是一個具有3行4列的矩陣(或表格)。,二維數(shù)組的引用,引用二維數(shù)組時必須帶有兩個下標。引用形式如下: 數(shù)組名下標表達式1下標表達式2 例:double w42; 則w01、wij、wi+ki+k都是合法的數(shù)組元素引用形式,只是每個下標表達式的值必須是整數(shù),且不得超過數(shù)組定義中的上、下界。 注意:引用二維數(shù)組時,一定要把兩個下標分別放在兩個方括號內(nèi)。例如,引用以上w數(shù)組時,不可以寫成:w0,1、wi,j、wi+k,j+k,這都是不合法的。,二維數(shù)組的初始化,1、所賦初值個數(shù)與數(shù)組元素的個數(shù)相同,按對應(yīng)關(guān)系存放 2、每行所賦初值個數(shù)少于數(shù)組元素個數(shù)時,系統(tǒng)自動給后面的元素賦初值0 3、所賦初值行數(shù)少于數(shù)組行數(shù),系統(tǒng)自動給后面各行補初值0 4、賦初值時省略行花括號,系統(tǒng)將按數(shù)組元素在內(nèi)存中的排列順序,將花括號中的數(shù)據(jù)一一對應(yīng)地賦給各個元素,若數(shù)不足,系統(tǒng)將給后面的元素補以初值0,通過賦初值確定數(shù)組的大小,對于一維數(shù)組,可以在數(shù)組定義語句中省略方括號中的常量表達式,通過所賦初值的個數(shù)來確定數(shù)組的大??;對于二維數(shù)組,只可以省略第一個方括號中的常量表達式,而不能省略第二個括號中的常量表達式。這時,第一維的大小按以下規(guī)則決定: 1)當初值的個數(shù)能被第二維的常量表達式的值除盡時,所得商 數(shù)就是第一維的大小。 2)當初值的個數(shù)不能被第二維的常量表達式值除盡時,則:第一維的大小=所得的商數(shù)+1。,通過地址來引用二維數(shù)組元素,若有以下定義: int a34,i,j;且0i3;0j4 則數(shù)組元素可用以下五種表達式來引用。 (1) aij (2) *(ai+j) (3) *(*(a+i)+j) (4) (*(a+i)j (5) *(&a00+4*i+j),通過建立一個指針數(shù)組來引用二維數(shù)組元素,若有以下定義: int *p3,a32,I,j; 則可以通過以下形式引用aIj: (1)*(pI+j) /*與*(aI+j)對應(yīng)*/ (2)*(*(p+I)+j) /*與*(*(a+I)+j)對應(yīng)*/ (3)(*(p+I)j /*與(*(a+j)j對應(yīng)*/ (4)pIj /*與aIj對應(yīng)*/,通過建立一個行指針來引用二維數(shù)組,若有以下定義: int a32,(*prt)2; 在這里,說明符(*prt)2中,由于一對圓括號的存在,所以*號首先與prt 結(jié)合,說明prt是一個指針變量,然后再與說明符2結(jié)合,說明指針變量prt的基類型是一個包含有兩個int元素的數(shù)組。在這里,prt的基類型與a的相同,因此prt=a;是合法的賦值語句。prt+1等價于a+1、等價于a1。當prt指向數(shù)組的開頭時,可以通過以下形式來引用aIj: (1)*(prtI+j) /*與*(aI+j)對應(yīng)*/ (2)*(*(prt+I)+j) /*與*(*(a+I)+j)對應(yīng)*/ (3)(*(prt+I)j /*與(*(a+I)j對應(yīng)*/ (4)prtIj /*與aIj對應(yīng)*/ 在這里,prt是個指針變量,它的值可變,而
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 租船回租協(xié)議書
- 谷歌租賃協(xié)議書
- 員工非正常死亡協(xié)議書
- 花圃認養(yǎng)協(xié)議書
- 聯(lián)養(yǎng)購買協(xié)議書
- 老公拒賭協(xié)議書
- 恒大悅瓏灣認籌協(xié)議書
- 考證服務(wù)協(xié)議書
- 電氣維護費合同協(xié)議書
- 比亞迪維修試車協(xié)議書
- 火災(zāi)自動報警系統(tǒng)設(shè)計規(guī)范完整版2025年
- 2025年日歷表(A4版含農(nóng)歷可編輯)
- MOOC 數(shù)值天氣預(yù)報-南京信息工程大學 中國大學慕課答案
- 2022屆高考英語復(fù)習:最后一節(jié)英語課(13張PPT)
- 加強評標專家管理實施方案
- 股票實戰(zhàn)技巧(一)薛斯通道_CCI_DMI經(jīng)典指標組合
- 小學生德育教育ppt課件
- 配電箱系統(tǒng)圖
- 精選靜電感應(yīng)現(xiàn)象的應(yīng)用練習題(有答案)
- 初中音樂--人聲的分類--(1)pptppt課件
- 小作坊生產(chǎn)工藝流程圖(共2頁)
評論
0/150
提交評論