C語(yǔ)言數(shù)組結(jié)構(gòu)介紹ppt課件_第1頁(yè)
C語(yǔ)言數(shù)組結(jié)構(gòu)介紹ppt課件_第2頁(yè)
C語(yǔ)言數(shù)組結(jié)構(gòu)介紹ppt課件_第3頁(yè)
C語(yǔ)言數(shù)組結(jié)構(gòu)介紹ppt課件_第4頁(yè)
C語(yǔ)言數(shù)組結(jié)構(gòu)介紹ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第6章數(shù)組l數(shù)組的概念數(shù)組的概念l數(shù)組:若干相同類型的數(shù)據(jù)項(xiàng)的有序集合。數(shù)組:若干相同類型的數(shù)據(jù)項(xiàng)的有序集合。l數(shù)組的用途:用于存儲(chǔ)相同類型的多個(gè)數(shù)據(jù),數(shù)組的用途:用于存儲(chǔ)相同類型的多個(gè)數(shù)據(jù),可以減少命名上的麻煩,并且方便統(tǒng)一運(yùn)算??梢詼p少命名上的麻煩,并且方便統(tǒng)一運(yùn)算。一維數(shù)組的定義、引用和初始化一維數(shù)組的定義、引用和初始化一維數(shù)組的定義、引用和初始化一維數(shù)組的定義、引用和初始化一維數(shù)組的定義一維數(shù)組的定義格式:類型說(shuō)明符格式:類型說(shuō)明符 數(shù)組名數(shù)組名常量表達(dá)式常量表達(dá)式;例如,例如,int score50;定義了一個(gè)一維數(shù)組,共有定義了一個(gè)一維數(shù)組,共有50個(gè)數(shù)組元素,每個(gè)都是個(gè)數(shù)組元素,

2、每個(gè)都是int類型,序號(hào)從類型,序號(hào)從score0score49,其中,其中score為數(shù)組名,為數(shù)組名,內(nèi)的數(shù)值必須為整形常量,內(nèi)的數(shù)值必須為整形常量,或整形常量表達(dá)式,如或整形常量表達(dá)式,如30+20,不允許為變量,不允許為變量,也不允許為浮點(diǎn)數(shù)。也不允許為浮點(diǎn)數(shù)。常量表達(dá)式稱為數(shù)組的長(zhǎng)度,也就是數(shù)組元素的個(gè)數(shù)。常量表達(dá)式稱為數(shù)組的長(zhǎng)度,也就是數(shù)組元素的個(gè)數(shù)。一維數(shù)組的引用一維數(shù)組的引用格式:數(shù)組名格式:數(shù)組名下標(biāo)下標(biāo)下標(biāo)可以是常數(shù)或者常數(shù)表達(dá)式,也可以是變量或者下標(biāo)可以是常數(shù)或者常數(shù)表達(dá)式,也可以是變量或者變量表達(dá)式,但必須是整數(shù)。變量表達(dá)式,但必須是整數(shù)。數(shù)組不可整體引用,不可整體賦值

3、,想給一維數(shù)組數(shù)組不可整體引用,不可整體賦值,想給一維數(shù)組score里面的里面的50個(gè)數(shù)組元素都賦值為個(gè)數(shù)組元素都賦值為0,使用,使用score=0是錯(cuò)誤的,可以使用循環(huán)結(jié)構(gòu)來(lái)賦值:是錯(cuò)誤的,可以使用循環(huán)結(jié)構(gòu)來(lái)賦值:for(i=0;i50;i+)scorei=0; 使用數(shù)使用數(shù)組不但簡(jiǎn)化了變量的命名,還簡(jiǎn)化了變量的使用。組不但簡(jiǎn)化了變量的命名,還簡(jiǎn)化了變量的使用。數(shù)組元素用下標(biāo)去引用相當(dāng)于一個(gè)普通變量,可數(shù)組元素用下標(biāo)去引用相當(dāng)于一個(gè)普通變量,可以出現(xiàn)在該類變量可以出現(xiàn)的所有場(chǎng)合。以出現(xiàn)在該類變量可以出現(xiàn)的所有場(chǎng)合。數(shù)組名不是一個(gè)普通的變量名,而是第一個(gè)數(shù)組元素?cái)?shù)組名不是一個(gè)普通的變量名,而是

4、第一個(gè)數(shù)組元素的地址。的地址。一維數(shù)組的初始化一維數(shù)組的初始化l數(shù)組可以在定義的時(shí)候就進(jìn)行初始化賦初值)數(shù)組可以在定義的時(shí)候就進(jìn)行初始化賦初值)l例如:例如:int score10=0,1,2,3,4,5,6,7,8,9;如果括號(hào)如果括號(hào)內(nèi)的數(shù)小于內(nèi)的數(shù)小于10個(gè),那么只是從個(gè),那么只是從score0開(kāi)始賦值,開(kāi)始賦值,剩下的沒(méi)有賦值的數(shù)組元素的值初始化為剩下的沒(méi)有賦值的數(shù)組元素的值初始化為0。如果只。如果只是定義而沒(méi)有初始化一個(gè)都沒(méi)賦初值),則所有是定義而沒(méi)有初始化一個(gè)都沒(méi)賦初值),則所有的數(shù)組元素的值都是不可預(yù)測(cè)的。的數(shù)組元素的值都是不可預(yù)測(cè)的。l如果在定義數(shù)組時(shí)候,已經(jīng)對(duì)所有的數(shù)組元素進(jìn)

5、行如果在定義數(shù)組時(shí)候,已經(jīng)對(duì)所有的數(shù)組元素進(jìn)行賦初值,數(shù)組的長(zhǎng)度可以省略賦初值,數(shù)組的長(zhǎng)度可以省略int score10=0,1,2,3,4,5,6,7,8,9;等價(jià)于等價(jià)于int score=0,1,2,3,4,5,6,7,8,9;l如果沒(méi)有對(duì)所有的數(shù)組元素進(jìn)行賦初值,例如int score=0,1,2,3,4,5,6,7,8;編譯系統(tǒng)測(cè)出賦初值的個(gè)數(shù)為9,就認(rèn)為數(shù)組的長(zhǎng)度是9而不是10。l【例6.3】輸入10個(gè)數(shù),用冒泡法排序從小到大)l冒泡排序是相鄰的兩個(gè)數(shù)進(jìn)行比較,如果前一個(gè)比后一個(gè)大,就交換,每一輪都會(huì)把本輪要比較的所有的數(shù)中最大的那個(gè)數(shù)放到最后,小的數(shù)往前面移動(dòng),就像水里的氣泡逐漸

6、往上浮一樣。l第1輪,把第0跟第1個(gè)數(shù)比較,第1跟第2個(gè)數(shù)比較第n-2個(gè)數(shù)跟第n-1個(gè)數(shù)比較,如果前一個(gè)數(shù)比后一個(gè)大,就交換。那么第1輪交換結(jié)束后,就把第0個(gè)至第n-1個(gè)數(shù)中最大者放到第n-1的位置;l第2輪,把第0跟第1個(gè)數(shù)比較,第1跟第2個(gè)數(shù)比較第n-3個(gè)數(shù)跟第n-2個(gè)數(shù)比較,如果前一個(gè)數(shù)比后一個(gè)大,就交換。那么第2輪比較結(jié)束后,就可以把第0至第n-2個(gè)數(shù)中最大者放到第n-2的位置;l依次類推,直到第0個(gè)跟第1個(gè)數(shù)比較,把最大者放到第1的位置,這樣就可以把整個(gè)數(shù)組排好序。l冒泡法每輪都把該輪要比較的數(shù)的最大者放到最后#include#define N 10main( ) int aN;in

7、t i,j,temp;for(i=0;iN;i+)scanf(%d,&ai);printf(befor sorting:n);for(i=0;iN;i+)printf(%-5d,ai);printf(n);for(i=0;iN-1;i+)for(j=0;jaj+1)temp=aj;aj=aj+1;aj+1=temp;printf(after sorting:n);for(i=0;iN;i+)printf(%-5d,ai);printf(n); 運(yùn)行結(jié)果如下:1 3 5 7 9 2 4 6 8 10befor sorting:1 3 5 7 9 2 4 6 8 10after sorting:1

8、 2 3 4 5 6 7 8 9 10Press any key to continue二維數(shù)組的定義、引用及初始化二維數(shù)組的定義、引用及初始化二維數(shù)組的定義二維數(shù)組的定義格式:類型說(shuō)明符格式:類型說(shuō)明符 數(shù)組名數(shù)組名常量表達(dá)常量表達(dá)1 常量表達(dá)常量表達(dá)2;例如,例如,int b34;定義了一個(gè)定義了一個(gè)3行行4列的二維列的二維數(shù)組,一共有數(shù)組,一共有12個(gè)數(shù)組元素,每個(gè)都是個(gè)數(shù)組元素,每個(gè)都是int類型,類型,序號(hào)從序號(hào)從b00b23。邏輯順序如下:。邏輯順序如下:b00b01b02b03b10b11b12b13b20b21b22b23二維數(shù)組是按行存儲(chǔ)二維數(shù)組是按行存儲(chǔ)先存完第1行,再存第

9、2行,第3行,直到最后一行。在內(nèi)存中存儲(chǔ)順序如下:第0行第1行第2行第3行b00b01b02b03b10b11b12b13b20b21b22b23二維數(shù)組的引用二維數(shù)組的引用格式:數(shù)組名格式:數(shù)組名下標(biāo)下標(biāo)1下標(biāo)下標(biāo)2與一維數(shù)組相同,下標(biāo)可以是常數(shù)或者常數(shù)表達(dá)式,也可以是變量與一維數(shù)組相同,下標(biāo)可以是常數(shù)或者常數(shù)表達(dá)式,也可以是變量或者變量表達(dá)式,但必須是整數(shù)?;蛘咦兞勘磉_(dá)式,但必須是整數(shù)。二維數(shù)組的初始化二維數(shù)組的初始化二維數(shù)組在定義的時(shí)候就可以進(jìn)行初始化,例如二維數(shù)組在定義的時(shí)候就可以進(jìn)行初始化,例如int b34=0,1,2,3,4,5,6,7,8,9,10,11;等價(jià)于等價(jià)于int b

10、34=0,1,2,3,4,5,6,7,8,9,10,11;(分行賦初值,更直觀,建議使用)(分行賦初值,更直觀,建議使用)在這里已經(jīng)給數(shù)組所有元素賦初值了,第一維的長(zhǎng)度可以省略,但是不建議省略。第二維的長(zhǎng)度不可省略。賦值效果如下:01234567891011二維數(shù)組或者多維數(shù)組省略寫(xiě)第一維的情況二維數(shù)組或者多維數(shù)組省略寫(xiě)第一維的情況int b4=0,1,2,3,4,5,6,7,8,9 ;沒(méi)沒(méi)有問(wèn)題,最后一行沒(méi)有賦值的兩個(gè)數(shù)組元素會(huì)初始有問(wèn)題,最后一行沒(méi)有賦值的兩個(gè)數(shù)組元素會(huì)初始化為化為0。012345678900int b4=0,1,2,3,4,5,8,9;也沒(méi)有問(wèn)題,最后兩行有兩個(gè)沒(méi)有賦值的

11、數(shù)組元素也會(huì)初始化為0。012345008900l但是int b4=0,1,2,3,4,5,6,7;還可以嗎?l編譯器會(huì)認(rèn)為第一維的長(zhǎng)度是2,而不是3lb20b23的值是不確定的,引用b20b23的值沒(méi)有意義,l對(duì)b20b23進(jìn)行寫(xiě)操作可能會(huì)造成系統(tǒng)嚴(yán)重錯(cuò)誤數(shù)組越界訪問(wèn))。【例6.5】有一個(gè)34的二維數(shù)組a,求出值最大的數(shù)組元素的值及所在的行號(hào)和列號(hào)。程序如下:#includevoid main( ) int i,j,row=0,colum=0,max;int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;max=a00;for(i=0;i3;i+)for(j=0;jmax)

12、max=aij;row=i;colum=j;printf(max=%d,row=%d,colum=%dn,max,row,colum); 運(yùn)行結(jié)果為:max=10,row=2,colum=1Press any key to continue字符數(shù)組字符數(shù)組l數(shù)組不但可以用來(lái)存儲(chǔ)數(shù)值,也可以用來(lái)存儲(chǔ)字符。用來(lái)存儲(chǔ)字符的數(shù)組是字符數(shù)組。l定義字符數(shù)組 例如:char c10;l字符數(shù)組的初始化l例如,char c5=h,e,l,l,o;初始化后,c0=h, c1=e, c2=l, c3=l, c4=ol如果花括號(hào)提供的字符個(gè)數(shù)超過(guò)數(shù)組長(zhǎng)度則語(yǔ)法錯(cuò)誤,少于則后面補(bǔ)空字符0l例如char c5=h,e

13、,l;則c0=h, c1=e, c2=l, c3=0, c4=0l如果花括號(hào)提供的字符個(gè)數(shù)跟數(shù)組長(zhǎng)度相等,可以省略數(shù)組長(zhǎng)度,例如lchar c=h,e,l,l,o;l也可以定義二維字符數(shù)組,例如char c510;l引用字符數(shù)組的元素l引用字符數(shù)組的元素跟其他數(shù)組操作方式類似,例如c0= h;【例6.7】輸出一個(gè)菱形圖#includevoid main()int i,j;char c55= , ,*, , , ,*, ,*, ,*, , , ,*, ,*, ,*, , , ,*, , ;for(i=0;i5;i+)for(j=0;j5;j+)printf(%c,cij);printf(n);運(yùn)

14、行結(jié)果為:字符串和字符串結(jié)束標(biāo)志l字符串是若干字符的序列,并且以特殊字符0結(jié)尾。0就是ascii碼值為0的字符。l字符串常量,編譯器會(huì)在末尾自動(dòng)添加一個(gè)0。例如abcd,用sizeof(abcd)測(cè)算,值為5,sizeof()運(yùn)算符會(huì)把結(jié)束標(biāo)志算上作為字符串長(zhǎng)度。 lC語(yǔ)言不提供字符串變量,字符串只能用字符數(shù)組來(lái)存儲(chǔ)。注意字符數(shù)組長(zhǎng)度。l字符數(shù)組的初始化:例如char str5=a,b,c,d,0;也可以寫(xiě)成lchar str=a,b,c,d,0;編譯器會(huì)測(cè)算字符串長(zhǎng)度,并按長(zhǎng)度為5來(lái)為數(shù)組開(kāi)辟存儲(chǔ)空間。l當(dāng)然可以定義并初始化字符數(shù)組char str4= a,b,c,d;但由于沒(méi)有0作為結(jié)束標(biāo)

15、志,并不認(rèn)為是一個(gè)字符串,不能用庫(kù)函數(shù)里的字符串處理函數(shù)來(lái)進(jìn)行處理,在自己編程中,由于缺少結(jié)束標(biāo)志,會(huì)給編程帶來(lái)很大的麻煩。l可以用字符串常量來(lái)對(duì)字符數(shù)組進(jìn)行初始化,例如char str= abcd;或者char str= abcd;都可以。不能寫(xiě)成char str4= abcd;,由于數(shù)組長(zhǎng)度不夠,編譯錯(cuò)誤。 l一個(gè)字符串用一維數(shù)組存儲(chǔ),多個(gè)字符串用二維數(shù)組存儲(chǔ)。例如:char weekday710=Sunday,lMonday,Tuesday,Wednesday,lThursday,Friday,Saturday;注意第二維的長(zhǎng)度應(yīng)該根據(jù)最長(zhǎng)的字符串來(lái)設(shè)置。字符數(shù)組的輸入輸出字符數(shù)組的輸入

16、輸出l對(duì)字符數(shù)組中的字符,可以按單個(gè)字符進(jìn)行輸入或輸出,例如:lfor(i=0;i10;i+)scanf(%c,&stri);lfor(i=0;istr2則函數(shù)值為則函數(shù)值為1;str1str2則函數(shù)值則函數(shù)值為為-1;相等則函數(shù)值為;相等則函數(shù)值為0。例如,。例如,li=strcmp(hello,hello );,i的值為的值為-1,i=strcmp(hello,hello);,i的值為的值為0,i=strcmp(hello ,hello);,i的值為的值為1。字符串不可直接比較大小,字符串不可直接比較大小,if(str1str2)是錯(cuò)是錯(cuò)誤的。誤的。lstrcat(str1,str2):把

17、:把str2連接到連接到str1末尾,末尾,也就是也就是str1數(shù)組中第一個(gè)數(shù)組中第一個(gè)0出現(xiàn)的位置,出現(xiàn)的位置,str2的字符依次存放包括的字符依次存放包括str2中的中的0),成為一),成為一個(gè)新的字符串個(gè)新的字符串如果如果str1,str2原來(lái)的存儲(chǔ)情況如下,那么連接后結(jié)原來(lái)的存儲(chǔ)情況如下,那么連接后結(jié)果為果為str1abcd0000 xystr2efgh000000連接后abcdefgh0yl闡明:第一個(gè)字符串的長(zhǎng)度應(yīng)該足夠大,能容納得下連接后的字符串。lstrlwr(str):把字符串從第1個(gè)數(shù)組元素開(kāi)始,到第一個(gè)0位置大寫(xiě)字母改為小寫(xiě)字母。strupr(str):與strlur(s

18、tr)剛好相反,把小寫(xiě)字母改為大寫(xiě)字母。例如,char str 10=a,b,c,d,0,e,f,g,x,y;,則strupr()函數(shù)只處理a,b,c,d4個(gè)字母,e,f,g,x,y不進(jìn)行處理。字符數(shù)組應(yīng)用舉例字符數(shù)組應(yīng)用舉例l【例6.8】統(tǒng)計(jì)一行輸入中有多少個(gè)單詞,已知單詞之間用空格隔開(kāi)。l判斷出現(xiàn)一個(gè)單詞方法:從第1個(gè)輸入的字符開(kāi)始掃描,直至輸入結(jié)束,如果出現(xiàn):當(dāng)前字符為非空格,而后一個(gè)字符為空格或者0,就可以判斷為出現(xiàn)一個(gè)單詞。l#includel#includelvoid main()llint i,count=0;lchar str100; gets(str); for(i=0;stri!=0;i+)if(stri=a& stri=A

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論