版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1,第 8 章(1) 數(shù) 組,2,我們已學(xué)習(xí)到的數(shù)據(jù)類型都屬于基本類型: int , char , float. C語(yǔ)言還提供了一類“構(gòu)造類型”的數(shù)據(jù): 數(shù)組, 結(jié)構(gòu)體, 共用體。,8.1 數(shù)組:,3,數(shù)組的概念: 數(shù)組是同一種數(shù)據(jù)類型的有序集合。 數(shù)組中的每個(gè)元素可用數(shù)組名和下標(biāo), 唯一地來(lái)標(biāo)記它們。 數(shù)組元素又稱為下標(biāo)變量.,如: 數(shù)組元素array15 表示名為array1的數(shù)組中下標(biāo)為5的那個(gè)元素.,4,使用數(shù)組的好處: 讓一批類型相同的數(shù)據(jù)用同一個(gè)數(shù)組名,書(shū)寫(xiě)方 便,可讀性高;便于使用循環(huán)語(yǔ)句處理。,數(shù)組中的一個(gè)一個(gè)的數(shù)據(jù)稱為數(shù)組元素,它們?cè)趦?nèi)存中是連續(xù)存放的. 數(shù)組元素其實(shí)可視為一
2、變量.,5,8.1.1 一維數(shù)組的定義和引用: 1定義: 類型說(shuō)明符 數(shù)組名 數(shù)組長(zhǎng)度 ;,說(shuō)明: (1). C語(yǔ)言的數(shù)組下標(biāo)是從開(kāi)始計(jì)數(shù)。,定義時(shí),數(shù)組長(zhǎng)度必定是一常量,指明數(shù)組元素個(gè)數(shù),從 0開(kāi)始,例: int a110; /*定義一個(gè)含有10個(gè)整型元素的數(shù)組a1*/ char c320; /*定義一個(gè)含有20個(gè)字符元素的數(shù)組c3*/ float f45; /*定義一個(gè)含有5個(gè)單精度浮點(diǎn)型元素的數(shù)組f4*/,6,如定義了數(shù)組: int a110 ; 它有10個(gè)元素,分別是: a10, a11, a12, a18, a19 .,這里不存在a110 這個(gè)元素。,數(shù)組a110 :,這里的a110
3、是定義數(shù)組的表達(dá)形式.,這里的a1i是數(shù)組a110 中的第i號(hào)元素.,注: 注意定義時(shí)數(shù)組名的表示形式,與它的各元素的表示形式的區(qū)別。,7,2. 數(shù)組元素的引用: a. 數(shù)組必須先定義,然后才能使用. b. 只能逐個(gè)引用數(shù)組各個(gè)元素,不能引用整個(gè)數(shù)組。 數(shù)組元素的引用要指定下標(biāo), 表示形式: 數(shù)組名下標(biāo) ,例: int k, a10; 在可以使用整型變量的任何地方,都可以使用數(shù)組元素.如: k=3; a0=23; ak-2=a0+1; scanf(“%d”,8,例8.1 數(shù)組及數(shù)組元素的表示方法: #include int main() int i,a10=1,2,3,4,5,6; for(i
4、=0;i10;i+) printf(a%d=%-4d, i, ai); printf(n); return 0; ,ch8_8_1.c,在定義數(shù)組時(shí)可對(duì)數(shù)組元素賦初值.,9,說(shuō)明: (1). 語(yǔ)言中對(duì)下標(biāo)不作合法性檢查,所以允許在使 用中下標(biāo)越界。這種情況須程序員自我檢查和控制。 合法的下標(biāo)范圍是: 0, 數(shù)組長(zhǎng)度-1,(2). 定義數(shù)組時(shí),數(shù)組長(zhǎng)度可以包含常量和符號(hào)常量,不 可使用變量 。 也就是說(shuō), 數(shù)組長(zhǎng)度在定義時(shí)必須指定, 運(yùn)行時(shí)是不 可改變的.,(3). 使用時(shí),只能逐個(gè)使用數(shù)組元素, 而不能一次使用 整個(gè)數(shù)組。 即:只能對(duì)數(shù)組元素進(jìn)行操作.,10,物理意義:,數(shù)組一旦定義: 在編譯
5、時(shí)在內(nèi)存中開(kāi)辟出一塊連續(xù)的空間,空間的首地址對(duì)應(yīng)于第一個(gè)元素,依次排列。,如果越界將出現(xiàn)什么問(wèn)題?,數(shù)組首地址,11,例: 使用一個(gè)a10數(shù)組,依次送入0-9,然后逆序輸出. main( ) int i, a10; for(i=0; i=0; i-) printf(“%d ”, ai ); ,輸出: 9 8 72 1 0,這里的a10是定義數(shù)組的表達(dá)形式.,這里的ai是數(shù)組a10 中的第i號(hào)元素.,12,例 8.2 數(shù)組元素賦值,及輸出 #include int main() int s10=1,2,3,4,5,6,7,8,9,10; int i=2, a3; a0=si; a1=s2+i;
6、a2=s2*i+3; printf(a0=%d a1=%d a2=%dn,a0,a1,a2); return 0; ,這里的定義了二個(gè)數(shù)組: s10, a3.,13,3. 一維數(shù)組的初始化: 在定義數(shù)組時(shí)可對(duì)數(shù)組元素賦初值,如: int a10= 1,2,3,4,5,6,7,8,9,10 ;,說(shuō)明:(1). 雖然C語(yǔ)言規(guī)定,只有靜態(tài)(static)存儲(chǔ)的數(shù)組才能初 始化,但一般的C編譯系統(tǒng)都允許對(duì)動(dòng)態(tài)(auto)型數(shù)組 賦初值. 以下內(nèi)容中,允許對(duì)靜態(tài)數(shù)組, 動(dòng)態(tài)型數(shù)組初始化.,可以將所有數(shù)據(jù)寫(xiě)在一對(duì)花括號(hào)內(nèi)。,14,例如: static int b5=1,2,3,4,5; 靜態(tài)(static
7、)存儲(chǔ)的數(shù)組如果沒(méi)有初始化,系統(tǒng)自動(dòng)給所有的數(shù)組元素賦0.,(2). 可以只給部分元素賦初值: static int b5=1,2,3; 給前面3個(gè)元素賦初值,后面2個(gè)元素自動(dòng)為0.,又如: int fib20=0,1; 給前面2個(gè)元素賦初值,后面其它元素的值不確定.,無(wú) static!,為動(dòng)態(tài)(auto)型數(shù)組.,15,如果提供的初始值個(gè)數(shù)與希望的數(shù)組長(zhǎng)度不一致,如 提供5個(gè)初始值, 而希望數(shù)組長(zhǎng)度為10,這時(shí)數(shù)組長(zhǎng)度 不能省。,(3). 對(duì)全部數(shù)組元素賦初值時(shí),可不指定數(shù)組元素長(zhǎng)度. 如: int a5=1,2,3,4,5; 可寫(xiě)成: int a =1,2,3,4,5;,這時(shí)系統(tǒng)自動(dòng)定義數(shù)
8、組 a 的長(zhǎng)度為5。,16,例8.3 從鍵盤(pán)輸入,給數(shù)組元素賦初值: #include int main() int i,a10; printf(請(qǐng)輸入10個(gè)整型數(shù),以空格隔開(kāi)n); for(i=0;i10;i+) scanf(%d, ,ch8_8_3.c,17,8.1.2 字符數(shù)組 存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組。數(shù)組中一個(gè)元素存放一個(gè)字符。 c語(yǔ)言中沒(méi)有字符串變量,它用一維字符數(shù)組來(lái)表示. 即將字符串作為字符數(shù)組來(lái)處理.,18,1. 一維字符數(shù)組的定義 如:char str80;,2字符數(shù)組的初始化: 最容易理解的方式就是, 逐個(gè)字符賦給數(shù)組中各元素. 如: char c10= I, , a
9、, m, , h, a, p, p,y;,19,如果初始值個(gè)數(shù)少于數(shù)組長(zhǎng)度,則只將這些字符賦予數(shù)組中前面的元素, 其余的元素自動(dòng)定為空字符(0). char c10= c, , p, r, o, g, r, a,m;,共九個(gè)字符.,20,3. 字符數(shù)組的引用: 可以引用字符數(shù)組一個(gè)元素,得到一個(gè)字符. main( ) char c210= I,a,m, ,a, ,b,o,y; int i; for(i=0;i10;i+) printf(“%c”,c2i); ,運(yùn)行輸出: I am a boy,21,4. 字符串和字符串結(jié)束標(biāo)志: 為了測(cè)定字符串的實(shí)際長(zhǎng)度,C語(yǔ)言規(guī)定了一個(gè)字符串結(jié)束標(biāo)志0.,如
10、果有一個(gè)字符串, 其第10字符為0,則此字符串的有效字符為9個(gè). 也就是說(shuō),在遇到0時(shí),表示字符串結(jié)束,由它前面的字符組成字符串.,22,系統(tǒng)對(duì)字符串常量也自動(dòng)加一個(gè)0, 例如“C program”共有9個(gè)字符, 但在內(nèi)存中占用10字節(jié), 最后一個(gè)0是由系統(tǒng)自動(dòng)加上去的. 字符串作為一維字符數(shù)組存放在內(nèi)存中.,23,5. 字符串的存儲(chǔ): 我們對(duì)字符串?dāng)?shù)組初始化也可用如下方法: char c2 = “I am happy” ;,也可直接寫(xiě)成如下形式: char c2 = “I am happy” ; 字符數(shù)組c2 的長(zhǎng)度不是10, 而是11, 這點(diǎn)務(wù)請(qǐng)注意.,這里共十個(gè)字符.,24,這是因?yàn)樽址?/p>
11、串常量的最后由系統(tǒng)自動(dòng)加上一個(gè)0. 因此,上面的初始化與下面的初始化等價(jià): char c210=I,a,m,h,a,p,p,y,0;,25,6字符串的操作: 定義數(shù)組: char s1 =“China”; 輸出:使用 “%s”格式輸出: printf(“%s”,s1); 遇到0就停止輸出。,輸入: char s26; scanf(“%s”,s2); 輸入: china ( 回車),不能加 printf(%sn,string); return 0; ,Ch8_8_4.c,27,例 : 利用數(shù)組,計(jì)算Fibonacii(斐波納契)數(shù)列前20項(xiàng)的值,即 1,1,2,3,5,8,, 并按每行打印5個(gè)的
12、格式輸出.,用數(shù)組計(jì)算并存放數(shù)列的前20個(gè)數(shù),并有下列關(guān)系式成立: fib0=fib1=1 ; / n=0,1 fibn=fibn-1 + fibn-2 ; / 2n19,28,main( ) int i; int fib20=1,1; for(i=2;i20;i+) fibi=fibi-1+fibi-2; for(i=0;i20;i+) printf(%6d,fibi); if(i+1)%5=0) printf(n); ,初始化數(shù)組,生成前二個(gè)數(shù): 1,1,計(jì)算該數(shù)列其余的18個(gè)數(shù).,每輸出5 個(gè)數(shù)就換行.,輸出: 1 1 2 3 5 8 13 21 34 55 89 144 233 377
13、 610 987 1597 2584 4181 6765,29,8.1.3 二維數(shù)組的定義與引用: 1二維數(shù)組的定義: 一般形式: 類型名 數(shù)組名行長(zhǎng)度列長(zhǎng)度,例: float a134 , b1510 ; 這里定義: a1數(shù)組為3行,4列。 b1數(shù)組為5行,10列。,第一維(行),第二維(列),30,二維數(shù)組實(shí)際上對(duì)應(yīng)了一個(gè)二維表格,其中第一維表示二維表的行數(shù),第二維表示二維表的列數(shù). 二維數(shù)組按行列矩陣方式在內(nèi)存中連續(xù)存放,第一下標(biāo)(維)指示行,第二下標(biāo)(維)指示列,下標(biāo)都從0開(kāi)始計(jì)數(shù).,如數(shù)組a34的排列: a00 a01 a02 a03 a10 a11 a12 a13 a20 a21
14、a22 a23,數(shù)組的起始地址,31,2. 二維數(shù)組元素的引用: 二維數(shù)組元素的表示形式: 數(shù)組名行下標(biāo)列下標(biāo) 如數(shù)組元素 a13:,數(shù)組元素可以出現(xiàn)在表達(dá)式中,也可以賦值: b12 = a232 ;,a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23,代表第二行,第四列上的那個(gè)元素.,32,注意: a. 要區(qū)分定義數(shù)組時(shí)用的形式:int a34 ; 和使用數(shù)組元素時(shí)的形式:a23 兩種形式的含義是不同的。,b. 引用數(shù)組元素時(shí),要保證下標(biāo)值在定義的范圍之內(nèi). 如定義數(shù)組: int a34; 它的行下標(biāo)值范圍: 0, 它的列下標(biāo)值范圍: 03 .,3
15、3,3二維數(shù)組的初始化 可使用下列幾種方法: a. 可以將所有數(shù)據(jù)寫(xiě)在一對(duì)花括號(hào)內(nèi)。如: int a34= 1, 2 11,12 ; 數(shù)組按順序給各元素賦初值.,b. 可分行給二維數(shù)組賦初值: int a34= 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12 第一個(gè)花括號(hào)內(nèi)賦給第一行,第二個(gè)花括號(hào)內(nèi)的值賦給第二行, , 外加一個(gè)花括號(hào).,34,c. 可以對(duì)部分元素賦初值。 如: static int a34= 1, 5, 9 ; 存放情況: 1 0 0 0 5 0 0 0 9 0 0 0,d. 如果提供全部初始數(shù)據(jù),進(jìn)行賦初值,則定義數(shù)組時(shí), 第一維長(zhǎng)度可省去,第二維不可
16、省. 如: int a 4=1,2, 11,12; 系統(tǒng)根據(jù)每行4列,從而可確定共3行。,即對(duì)各行第一列的元素賦初值,其它元素為0.,也可對(duì)各行中某一元素賦初值: int a34=1,0,6,0,0,11;,35,#include int main() int i,j,a44; printf(請(qǐng)輸入16個(gè)整型數(shù),以空格隔開(kāi)n); for(i=0;i4;i+) for(j=0;j4;j+) scanf(%d, .,例 8.5二維數(shù)組的輸入輸出.,Ch8_8_5.c,36, printf(輸入的數(shù)組為:n); for(i=0;i4;i+) for(j=0;j4;j+) printf(a%d%d=%
17、-4d, i, j, aij ); printf(n); return 0; ,37,例: 寫(xiě)一程序,求一矩陣的主對(duì)角線(左上到右下角)上的 元素之和.,main() int a33=1,3,5,7,9,11,13,15,17; int sum=0, i, j; for(i=0;i3;i+) /*行 for(j=0;j3;j+) /*列 if(j=i) sum=sum+aij; printf(”sum=%d”,sum); ,Ch8_8_5_1.c,38,例:輸入一串字符 , 用反序輸出: #include ”stdio.h” main( ) int i, j=0; char c1 , s100
18、; while( (sj+=getchar( ) ) != n) ; for( i=0, j -=2 ; ij ; i+, j-) c1=sj ; sj=si ; si=c1; for( i=0 ; si != n; i+) printf(“%c”, si); ,Ch8_8_5_2.c,39,從本質(zhì)上來(lái)看,二維數(shù)組也可看作一種特殊的一維數(shù)組(數(shù)組的數(shù)組)。 例如: a34 數(shù)組可看作一個(gè)一維數(shù)組,這個(gè)一維數(shù)組有 3個(gè)元素,而每個(gè)元素又是有4個(gè)元素的一維數(shù)組。,a0 a00 a01 a02 a03 a a1 a10 a11 a12 a13 a2 a20 a21 a22 a23 在C語(yǔ)言中,二維數(shù)
19、組中元素的排列順序先放第一 行元素,后放第二行的元素。,40,4. 數(shù)組基本算法語(yǔ)句的實(shí)現(xiàn): (1). 求數(shù)組的最小元素及下標(biāo): int a710 ; int min , p ; min =a70; p=0; for( i=1; i10; i+) if ( a7imin ) min =a7i; p=i; ,假設(shè)第一個(gè)元素就是最小的元素,41,(2). 交換數(shù)組中各元素: 下列語(yǔ)句進(jìn)行數(shù)組首尾元素的交換: for( i=0 ; i= n2; i+) t=ai; ai=an-i-1; an-i-1=t; ,(3). 在數(shù)組中查找某數(shù)x. 順序查找. for ( i=0 ; i n; i+) if ( x=ai ) break ;,n假設(shè)為數(shù)組a 的長(zhǎng)度。,42,補(bǔ)充題 1: 從鍵盤(pán)輸入5個(gè)字符組成的單詞, 判斷此單詞是不是hello,并顯示結(jié)果 .,43,#include main() static char str =h,e,l,l,o;
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年廣州番禺職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試備考題庫(kù)帶答案解析
- 2026年貴州電子商務(wù)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試模擬試題帶答案解析
- 2026年貴州農(nóng)業(yè)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試備考題庫(kù)帶答案解析
- 單招烹飪營(yíng)養(yǎng)與食品衛(wèi)生測(cè)試卷(含答案解析)(含中毒)
- 2026年礦產(chǎn)權(quán)評(píng)估師考試模擬題和答案解析
- 住院患者飲食宜忌指南
- 護(hù)理課件模板選擇與使用
- 機(jī)械操作工崗前安全培訓(xùn)課件
- 2026年常州工程職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試模擬試題帶答案解析
- 2026年廣西現(xiàn)代職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能筆試參考題庫(kù)帶答案解析
- 2023中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)-老年人誤吸的預(yù)防
- 社區(qū)發(fā)展的核心任務(wù)
- GB/T 29349-2023法庭科學(xué)現(xiàn)場(chǎng)照相、錄像要求
- 人工濕地施工方案【整編】
- 蓋板涵蓋板計(jì)算
- 斜拉索無(wú)應(yīng)力索長(zhǎng)的計(jì)算
- 智慧機(jī)場(chǎng)綜合安防系統(tǒng)解決方案
- 2024年高中英語(yǔ)學(xué)業(yè)水平測(cè)試及答案
- 天塔之光模擬控制PLC課程設(shè)計(jì)
- 初中日語(yǔ)人教版七年級(jí)第一冊(cè)單詞表講義
- GB/T 5847-2004尺寸鏈計(jì)算方法
評(píng)論
0/150
提交評(píng)論