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

下載本文檔

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

文檔簡介

1、 程序設(shè)計(jì)技術(shù)基礎(chǔ)第6章 數(shù)組2022/7/232前幾章使用的變量都屬于基本類型,例如整型、字符型、浮點(diǎn)型數(shù)據(jù),這些都是基本的數(shù)據(jù)類型。對于有些數(shù)據(jù),只用簡單的數(shù)據(jù)類型是不夠的,難以反映出數(shù)據(jù)的特點(diǎn),也難以有效地進(jìn)行處理。如果有10000名學(xué)生,每個學(xué)生有一個成績,需要求這10000名學(xué)生的平均成績。原有的基本數(shù)據(jù)類型就很難高效地完成這個任務(wù)。需要一種新的數(shù)據(jù)類型2022/7/233一維數(shù)組定義、初始化、引用、使用定義、初始化、引用、使用字符數(shù)組定義、初始化、引用、處理字符串、字符串處理函數(shù)、使用多維數(shù)組2022/7/2346.1 一維數(shù)組6.1.1一維數(shù)組的定義6.1.2 一維數(shù)組的初始化6

2、.1.3 一維數(shù)組成員的引用6.1.4 一維數(shù)組的使用6.1一維數(shù)組2022/7/2356.1.1一維數(shù)組的定義1. 一維數(shù)組的定義一維數(shù)組的定義格式如下:類型說明符 數(shù)組名數(shù)組長度例如,定義一個一維數(shù)組:int array6;6.1一維數(shù)組2022/7/2366.1.2 一維數(shù)組的初始化如同變量的初始化一樣,一維數(shù)組的初始化也是在定義一維數(shù)組時直接給其成員賦初值。否則數(shù)組中各成員的值將是隨機(jī)的,不可預(yù)料的。1. 一維數(shù)組初始化格式一維數(shù)組初始化的格式為:類型說明符 數(shù)組名數(shù)組長度=初值列表;例如對一個一維數(shù)組初始化:int array6=1, 2, 3, 4, 5, 6;經(jīng)過上面的定義和初始

3、化之后該數(shù)組的成員分別為:array0=1、 array1=2、 array2=3、 array3=4、 array4=5、array5=6。6.1一維數(shù)組2022/7/2376.1.2 一維數(shù)組的初始化2. 一維數(shù)組初始化的幾種情況(1) 對一維數(shù)組全部成員都賦初值時,數(shù)組長度可以缺省。系統(tǒng)將按照初值列表中的數(shù)值個數(shù)自動確定數(shù)組長度。例如:int array =1, 2, 3, 4, 5, 6;在上述過程中缺省了數(shù)組長度,但初值列表中有6個成員,因此系統(tǒng)自動確定該數(shù)組長度為6。(2) 當(dāng)給出一維數(shù)組的數(shù)組長度時,可以在初值列表里列出部分成員的值。例如:int array6=1, 2, 3;在

4、初值列表中只列出了3個值,與其對應(yīng)的是:array0=1、array1=2、array2=3。對于剩余的成員array3array5,系統(tǒng)將自動為其填充初值為0。因此在定義數(shù)值類型的一維數(shù)組時只要在初值列表中給出一個初值,其后的成員就全部賦0值。例如:int array6=0;6.1一維數(shù)組2022/7/2386.1.3 一維數(shù)組成員的引用一維數(shù)組定義后就可以使用了。由于C語言規(guī)定不能整體引用數(shù)組,所以只能逐個引用數(shù)組的成員。數(shù)組成員的表示的形式如下:數(shù)組名下標(biāo)與數(shù)組定義中的數(shù)組長度不同,在對數(shù)組成員引用時,下標(biāo)可以是整型常量、整型變量或整型表達(dá)式。例如:array0、array i、arra

5、y 2*i+1 在對數(shù)組成員進(jìn)行引用時要注意下標(biāo)從0開始,同時要避免混淆數(shù)組長度和下標(biāo)區(qū)別而產(chǎn)生的越界問題。例如: float score 10; /*定義一維數(shù)組長度為10*/ b=score5; /*引用score數(shù)組中下標(biāo)為5的成員,既數(shù)組中的第6個成員*/ w=score10; /*引用score10越界,因?yàn)閿?shù)組成員為score0 score9 */6.1一維數(shù)組2022/7/239#includeint main() int i=0; /*初始化變量*/ int array7=0; /*初始化一維數(shù)組*/ printf(Please input 7 integers:n); for

6、(;i7;i+) /*用循環(huán)結(jié)構(gòu)給一維數(shù)組賦值*/ scanf(%d, &arrayi); printf(nThe sequence in computer is: ); for(i=0;i7;i+) /*屏幕輸出一維數(shù)組*/ printf(%d , arrayi); return 0;【例6-1】 將數(shù)列1, 3, 6, 10, 15, 21, 28用一維數(shù)組存放,并在屏幕上顯示。分析:數(shù)列由7個三角形數(shù)構(gòu)成,因此可以用一個數(shù)組長度為7的一維數(shù)組存放。程序如下:程序運(yùn)行的結(jié)果為:Please input 7 integers:1 3 5 10 15 21 28The sequence in

7、computer is: 1 3 5 10 15 21 286.1一維數(shù)組2022/7/23106.1.4 一維數(shù)組的使用【例6-2】求Fibonacci數(shù)列的前20項(xiàng),并將結(jié)果用一維數(shù)組存儲。分析:按照Fibonacci數(shù)列的定義,首先使數(shù)組的前兩項(xiàng)Fib0= Fib1=1,然后用公式Fibi= Fibi-1+ Fibi-2求出數(shù)列的后續(xù)各項(xiàng)。算法如圖6-2所示:6.1一維數(shù)組2022/7/23116.1一維數(shù)組2022/7/2312【例6-3】向一個有序序列中插入一個數(shù),并保持序列有序。例如向序列1,3,6,9,11中插入5得到序列1,3,5,6,9,11。分析:首先需要定義一個足夠大的一

8、維數(shù)組用于存放插入后的序列。其次,插入數(shù)值后,一維數(shù)組中,在插入位置后面的成員需要依次后移。算法如圖6-3所示:6.1一維數(shù)組2022/7/23136.1一維數(shù)組2022/7/2314【例6-4】對給定的數(shù)列5, 2, 3, 4, 1用冒泡法按升序排序并在屏幕上輸出結(jié)果。分析:冒泡法的思路是:將相鄰數(shù)據(jù)兩兩依次比較,按從小到大或從大到小順序交換,一趟過去之后,最大或最小的數(shù)字被交換到了最后一位。再從頭開始比較,直到倒數(shù)第二位。這里是把最大的數(shù)字往后交換,如圖6-4所示:6.1一維數(shù)組2022/7/23156.1一維數(shù)組2022/7/2316【例6-5】從鍵盤接受5個整數(shù),用選擇排序法按升序排列

9、并輸出結(jié)果。分析:選擇排序法的思路是:每一次從無序組的數(shù)據(jù)成員中選出最小(或最大)的一個成員,把它和無序組的第一個成員交換,無序組成員減少,有序組成員增加,直到全部待排序的數(shù)據(jù)成員排完,如圖6-6所示:6.1一維數(shù)組2022/7/23172022/7/23186.2 多維數(shù)組6.2.1 多維數(shù)組的定義6.2.2 多維數(shù)組的初始化6.2.3 多維數(shù)組成員的引用6.2.4 多維數(shù)組的使用6.2 多維數(shù)組2022/7/23196.2.1 多維數(shù)組的定義1. 多維數(shù)組的定義多維數(shù)組的定義格式如下:類型說明符 數(shù)組名第1維長度 第2維長度 第n維長度;例:定義一個34的二維數(shù)組如下:int arr234

10、; arr200arr201arr202arr203arr210arr211arr212arr213arr220arr221arr222arr2236.2 多維數(shù)組2022/7/2320 6.2.2 多維數(shù)組的初始化賦值時按“行優(yōu)先”的順序?qū)?shù)組成員依次賦值。其初始化的形式為:類型說明符 數(shù)組名第1維長度 第2維長度 第n維長度=初值列表;在初始化時有如下兩種情況,以二維數(shù)組arr234為例。1. 將初值寫在一個大括號內(nèi)(1)對全部成員顯式賦初值int arr234 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12;此時,可省略行下標(biāo),而不能省略列下標(biāo)。如:int

11、 arr2 4 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12;根據(jù)初值列表中所有數(shù)據(jù)為12個,而arr2每行為4列,系統(tǒng)會自動確定數(shù)組為3行。(2)對部分成員顯式賦初值int arr234 = 1, 2, 3;此初始化的結(jié)果是arr200=1,arr201=2,arr202=3。后面未被顯式賦初值的9個成員,會被系統(tǒng)自動賦予0。6.2 多維數(shù)組2022/7/23212. 把初值按行分組(1)對全部成員顯式賦初值int arr234 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12;(2)對部分成員顯式賦初值int arr234 =

12、 1, 2, 5, 6, 9, 10, 11, 12;此初始化的結(jié)果是arr200=1,arr201=2,arr202=0,arr203=0,arr210=5,arr211=6,arr212=0,arr213=0,arr220=9,arr221=10,arr222=11,arr223=12。由于按行分組已經(jīng)明確了行數(shù),因此在此情況下可以缺省行下標(biāo),如:int arr2 4 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12;int arr2 4 = 1, 2, 5, 6, 9, 10, 11, 12;這兩個都是合法的。6.2 多維數(shù)組2022/7/23223. 二維

13、以上數(shù)組的初始化可將二維數(shù)組的初始化方法推廣到更高維的數(shù)組,如:(1)int arr3234=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24;(2)int arr3 34= 1, 2, 5, 9, 10, 11, 13, 17, 18, 21, 22;(3)int arr3234=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24;(4)int arr3

14、 34=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24;6.2 多維數(shù)組2022/7/23236.2.3 多維數(shù)組成員的引用1. 多維數(shù)組成員的引用格式多維數(shù)組成員的引用在原則上與一維數(shù)組是相同的,主要區(qū)別在下標(biāo)的個數(shù)。如果定義的是一個n維數(shù)組,則此n維數(shù)組中成員的引用格式如下:數(shù)組名下標(biāo)1下標(biāo)2下標(biāo)n;需要注意的是在數(shù)組定義時,方括號中給出的是某一維的長度。而數(shù)組引用時,成員中的下標(biāo)是該成員在數(shù)組中的位置標(biāo)識。2. 二維數(shù)組成員的引用還是以二維數(shù)組為例對多維數(shù)組的引用做

15、說明,如arr213。在引用時需要注意以下幾點(diǎn):(1)數(shù)組成員在引用前必須先定義,例如:float arr223; /*引用前必須定義*/arr202=1.2; /*在定義后可以引用*/6.2 多維數(shù)組2022/7/2324(2)在引用數(shù)組成員時注意不要越界,例如:float arr223; /*引用前必須定義*/arr223=1.2; /*引用越界*/因?yàn)閿?shù)組成員引用的下標(biāo)是從0開始的,所以該數(shù)組中最后一個成員應(yīng)該是arr212。C語言在編譯時不檢查越界錯誤,但在運(yùn)行時會引起程序出錯或?qū)е洛e誤結(jié)果。(3)成員的下標(biāo)可以是整型變量或表達(dá)式。數(shù)組定義時的數(shù)組長度,只能是整型常量或整型常量表達(dá)式。

16、而引用時,成員下標(biāo)可以是整型常量、整型變量或整型表達(dá)式。例如,當(dāng)i和j已定義為整型變量且已賦值,則可用arr2i-1j+2表達(dá)成員。注意:需要檢查i-1和j+2的結(jié)果是否越界。6.2 多維數(shù)組2022/7/23253. 二維以上數(shù)組成員的引用二維以上數(shù)組成員的引用與二維數(shù)組類似,例如:定義了一個三維數(shù)組:int arr3345;則引用其成員arr3102并賦值的語句為:arr3102=89;6.2 多維數(shù)組2022/7/2326 6.2.4 多維數(shù)組的使用【例6-6】有一個33的整數(shù)矩陣A,分別求其主、副對角線成員之和。6.2 多維數(shù)組2022/7/23276.2 多維數(shù)組2022/7/232

17、86.2 多維數(shù)組2022/7/2329【例6-8】三角陣是一種重要的矩陣。試把一個55的矩陣A,轉(zhuǎn)換成一個下三角陣。6.2 多維數(shù)組2022/7/23306.2 多維數(shù)組2022/7/2331【例6-9】試輸出以下圖形: 6.2 多維數(shù)組2022/7/23322022/7/23336.3 字符數(shù)組6.3.1 字符數(shù)組的定義6.3.2 字符數(shù)組的初始化6.3.3 字符數(shù)組成員的引用6.3.4 字符數(shù)組處理字符串6.3.5 字符串處理函數(shù)6.3.6 字符數(shù)組的使用6.3 字符數(shù)組2022/7/23346.3.1 字符數(shù)組的定義1. 一維字符數(shù)組的定義char 數(shù)組名數(shù)組長度;例如:char la

18、stname10;2. 二維字符數(shù)組的定義char 數(shù)組名數(shù)組長度1數(shù)組長度2;例如:char name238;如果要用到更高維度的數(shù)組形式,其定義與二維字符數(shù)組類似。字符型數(shù)據(jù)也可以使用整型數(shù)組來存儲。但是,字符型數(shù)據(jù)只占用1個字節(jié),顯然使用整型型數(shù)組存儲字符數(shù)據(jù)會浪費(fèi)空間,因此很少這樣使用。6.3 字符數(shù)組2022/7/2335 6.3.2 字符數(shù)組的初始化1. 對一維字符數(shù)組的初始化格式對一維字符數(shù)組的初始化采用如下格式:char lastname5= L, i, a, n, g ;上述語句把5個字符分別賦給lastname 0lastname 4這5個成員。字符數(shù)組定義的規(guī)則:(1)

19、如果在定義字符數(shù)組時不進(jìn)行初始化,則數(shù)組中各成員的值將是隨機(jī)的,不可預(yù)料的。(2) 如果花括號中提供的初值個數(shù)(即字符個數(shù))大于數(shù)組長度,則按語法錯誤處理。(3) 如果初值個數(shù)小于數(shù)組長度,則只將這些字符賦給數(shù)組中前面那些成員,其余的成員自動定為空字符(即0)。例如:char lastname 5= L, i , u;6.3 字符數(shù)組2022/7/2336(4) 如果提供的初值個數(shù)與預(yù)定的數(shù)組長度相同,在定義時可以省略數(shù)組長度,系統(tǒng)會自動根據(jù)初值個數(shù)確定數(shù)組長度。例如:char lastname =Z, h, e, n, g ;數(shù)組lastname的長度自動定為5。2. 對二維字符數(shù)組的初始化

20、格式對二維字符數(shù)組的初始化采用如下格式:(1)char name235= Z, h, o, u, W, u , Z, h, e , n, g ;(2)char name2 5= Z, h, o, u, W, u , Z, h, e, n, g ;(3)char name235= Z, h, o, u, 0, W, u, 0, 0, 0, Z, h, e, n, g ;(4)char name2 5= Z, h, o, u, 0, W, u, 0, 0, 0, Z, h, e, n, g ;其邏輯形式如圖6-12所示。顯然(3)、(4)不推薦。6.3 字符數(shù)組2022/7/2337 6.3.3

21、字符數(shù)組成員的引用定義完一個字符數(shù)組后就可以對其成員進(jìn)行引用,例如:(1)char lastname5; lastname1=N;(2)char name235; name212=m;【例6-11】 替換姓氏(姓氏的拼音)并輸出。6.3 字符數(shù)組2022/7/23386.3 字符數(shù)組2022/7/2339【例6-12】 用二維數(shù)組表示一組姓氏的拼音,并輸出。6.3 字符數(shù)組2022/7/2340 6.3.4 字符數(shù)組處理字符串1. 字符串在字符數(shù)組中的形式字符串是指用雙引號引起來的若干有效字符的序列。在C語言中下面都是合法的字符串:Happy new year;C program!;y=Ax+

22、B;sum*16;%d%fn例如:char lastname6= Zheng; /*等價于 char lastname6= Zheng */則數(shù)組成員的值為: lastname0=Z、lastname 1=h、lastname 2=e、lastname 3=n、lastname 4=g、lastname 5=06.3 字符數(shù)組2022/7/23412. 字符串結(jié)束符由于字符串后面隱含了字符0。因此用字符串初始化字符數(shù)組時,要特別注意數(shù)組長度的定義。如果char lastname5= Zheng;則會出現(xiàn)錯誤。字符0在字符串中叫串結(jié)束符是“字符串結(jié)束標(biāo)志”。有了這個標(biāo)志系統(tǒng)就可以自動計(jì)算字符串的

23、長度。當(dāng)然,在定義字符數(shù)組時還是需要估計(jì)所要存放字符串的長度,保證數(shù)組長度始終大于等于字符串實(shí)際長度。如果在一個字符數(shù)組中存放的字符個數(shù)是變化的,應(yīng)考慮最多字符的情況,數(shù)組長度在定義時選擇一個最大值。如:char name236= Zhou , Wu , Zheng ; 在三個字符串中Zheng 有6個字符,比其他兩個長,所以數(shù)組第二維下標(biāo)長度為6。數(shù)組形式如圖6-13所示:6.3 字符數(shù)組2022/7/23423字符串的輸入/輸出對字符串的輸入/輸出,除了用 “%c” 外,還可以用 “%s”,配合格式輸出函數(shù)printf和格式輸入函數(shù)scanf對字符串有效字符整體輸入/輸出。 (1) 用pr

24、intf函數(shù)和“%s”格式輸出字符串。例如:將整個字符串一次輸出:char lastname = Zheng ;printf(%s, lastname);(2) 用scanf函數(shù)和“%s”格式輸入一個字符串。例如:從鍵盤輸入字符串并賦給字符數(shù)組。char lastname6;scanf(%s, lastname);如果要用一個scanf函數(shù)輸入多個字符串,則在輸入時以空格或回車分隔。例如:char lastname16, lastname26, lastname36;scanf(%s%s%s, lastNamel, lastName2, lastName3);6.3 字符數(shù)組2022/7/23

25、43【例6-13】用格式%s的scanf函數(shù)給一個字符數(shù)組賦值。6.3 字符數(shù)組2022/7/2344(3)字符串輸出函數(shù)putsputs函數(shù)的作用是將一個字符串輸出到屏幕上。與printf不同,puts在輸出字符串時,遇到0后會自動加上換行。其調(diào)用形式為:puts(字符數(shù)組名)【例6-14】用puts函數(shù)輸出的字符串中可以包含轉(zhuǎn)義字符。6.3 字符數(shù)組2022/7/2345(4)字符串輸入函數(shù)gets不同于讀取一個字符的函數(shù)getchar(),gets( )函數(shù)用于從鍵盤緩沖區(qū)中讀取字符串,直到出現(xiàn)換行符,最后加上0作為字符串結(jié)束。其調(diào)用形式為:gets(字符數(shù)組名)由于gets函數(shù)可以輸入

26、含有空格的字符串,所以這一點(diǎn)上比scanf函數(shù)要方便一些。例如:從鍵盤輸入的字符串“LP,Qing”,并賦給字符數(shù)組name2?;剀囀莋ets函數(shù)的輸入結(jié)束標(biāo)志。【例6-15】用gets和puts函數(shù)輸入、輸出字符數(shù)組中的字符串。6.3 字符數(shù)組2022/7/2346 6.3.5 字符串處理函數(shù)#include1字符串復(fù)制函數(shù)strcpystrcpy函數(shù)用于字符串復(fù)制的函數(shù),其調(diào)用形式為:strcpy(字符數(shù)組1, 字符串/字符數(shù)組2)該函數(shù)的作用是將字符串復(fù)制到字符數(shù)組1中去。需要注意的是strcpy中字符數(shù)組1的長度不應(yīng)小于被復(fù)制的字符串的長度。此外,字符數(shù)組1必須寫成數(shù)組名形式。例如:c

27、har sl10, s2 = “Zheng”;strcpy(sl, s2);復(fù)制前后sl的狀態(tài)如圖6-14所示:6.3 字符數(shù)組2022/7/23472. 兩個字符串的連接函數(shù)strcatstrcat是用于連接兩個字符串的函數(shù)。其調(diào)用形式為:strcat(字符數(shù)組1, 字符串/字符數(shù)組2)該函數(shù)的作用是把字符數(shù)組2中存放的字符串連接到字符數(shù)組l中存放的字符串的后面,連接的結(jié)果依然放在字符數(shù)組1中,連接前,兩個字符串的后面都有0,連接時將字符數(shù)組1中的字符串后面的0取消,然后進(jìn)行連接。最后在連接組成的新串末尾保留0。函數(shù)調(diào)用后返回的是字符數(shù)組1的地址,也就是新串保存在數(shù)組1中。例如:char s

28、l40= The teachers name is ;char s220=Han Lidou;printf(%s, strcat(sl, s2);輸出結(jié)果為The teachers name is Han Lidou。6.3 字符數(shù)組2022/7/23483. 字符串比較函數(shù)strcmpstrcmp作用是比較字符串1和字符串2。其調(diào)用形式為:strcmp(字符串1/字符數(shù)組1, 字符串2/字符數(shù)組2)strcmp(sl, s2);strcmp(United States, P.R. China);運(yùn)行結(jié)果為1。strcmp(s, Han);strcmp(Dou, s);其中,s、s1和s2是存放字符串的字符數(shù)組名。字符串比較的規(guī)則是按自左至右的順序?qū)蓚€字符串的字符逐對比較字符的ASCII碼值,直到出現(xiàn)不同的字符或遇到0為止。當(dāng)字符串1等于字符串2時,strcmp函數(shù)的返回值為0;當(dāng)字符串1大于字符串2時,strcmp函數(shù)的返回值為正整數(shù);當(dāng)字符串1小于字符串2時,st

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論