




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第5章數(shù)組5.1一維數(shù)組
5.2二維數(shù)組
5.3字符數(shù)組
5.1一維數(shù)組
5.1.1一維數(shù)組的定義格式
一維數(shù)組的定義格式如下:
類型說明符
數(shù)組名[常量表達(dá)式];
例如,語句“floata[6],b[10];”表示定義了一個可存放6個float類型數(shù)據(jù)的一維數(shù)組a和一個可存放10個float類型數(shù)據(jù)的一維數(shù)組b。
說明:
(1)數(shù)組名應(yīng)符合標(biāo)識符的命名規(guī)則,例如a12、gain_ratio是合法的數(shù)組名。
(2)方括號內(nèi)的常量表達(dá)式表示數(shù)組元素的個數(shù),即數(shù)組長度。可以是整型常量或整型常量表達(dá)式,也可以是符號常量,但不能包含變量。
(3)數(shù)組的數(shù)據(jù)類型既可以是基本類型,也可以是構(gòu)造類型等。
(4)?C編譯系統(tǒng)為數(shù)組分配連續(xù)的內(nèi)存單元。數(shù)組元素的相對次序由下標(biāo)來表示。數(shù)組元素的下標(biāo)是從0開始的整數(shù)。
上面定義的數(shù)組a的存儲示意圖如圖5.1所示。圖5.1數(shù)組的存儲示意圖5.1.2一維數(shù)組的引用
在C語言中不能引用整個數(shù)組,只能引用單個數(shù)組元素。一個數(shù)組元素相當(dāng)于一個變量,它的使用與同類型的普通變量是相同的。但數(shù)組元素特定的引用形式會給編程帶來很多方便。
一維數(shù)組元素的引用形式為
數(shù)組名[下標(biāo)]
說明:
(1)數(shù)組名后面方括號內(nèi)是數(shù)組下標(biāo),下標(biāo)表示該元素是數(shù)組的第幾個元素。數(shù)組名后面方括號內(nèi)的內(nèi)容只有在數(shù)組定義時才是數(shù)組的長度,其他時候都是數(shù)組下標(biāo)。
(2)數(shù)組元素的下標(biāo)是整型的常量、變量或表達(dá)式。下標(biāo)的取值范圍是0~數(shù)組長度-1的整型值。
(3)?C程序運行時,編譯系統(tǒng)并不檢查數(shù)組元素的下標(biāo)是否越界,需要編程人員自己保證數(shù)組元素的下標(biāo)不要越界。
例如,對于語句“floata[8];intx=2;”,數(shù)組元素a[0]、a[6]、a[5+1]、a[x]、a[3*x]都是合法引用;而a[-5]、a[8]、a[5.2]?是非法的引用。注意,a[8]?雖然非法,但是編譯系統(tǒng)不報錯。對a[8]的操作實際是對內(nèi)存其他空間的操作,因此可能造成嚴(yán)重后果。5.1.3一維數(shù)組的初始化
數(shù)組的初始化就是給數(shù)組元素賦初值。數(shù)組的初始化操作既可以在數(shù)組定義之后進(jìn)行,也可以在數(shù)組定義時進(jìn)行。
如果在數(shù)組定義之后進(jìn)行初始化操作,則只能對每個數(shù)組元素一一賦值。例如:
intarr[10],i;
for(i=0;i<10;i++)arr[i]=i;
如果在定義數(shù)組時完成數(shù)組的初始化操作,則需要將數(shù)組元素的初值依次放在一對花括號中,并用賦值符號與數(shù)組連接。定義數(shù)組時賦初值的形式為
類型說明符數(shù)組名[常量表達(dá)式]={初值列表};說明:
(1)花括號內(nèi)各個初值之間用逗號分隔,數(shù)值類型必須與數(shù)組類型一致。系統(tǒng)將按初值的排列順序給數(shù)組元素賦值。例如,語句“intarr[10]={0,1,2,3,4,5,6,7,8,9};”在定義數(shù)組arr的同時,將0、1、2、3、4、5、6、7、8、9依次賦給數(shù)組元素arr[0]、arr[1]、arr[2]、arr[3]、arr[4]、arr[5]、arr[6]、arr[7]、arr[8]、arr[9]。
(2)花括號中初值的數(shù)量必須小于等于數(shù)組長度。當(dāng)初值數(shù)量小于數(shù)組長度時,數(shù)值型數(shù)組的后面沒有初值的元素由系統(tǒng)自動賦值為0。例如,對于語句“intarr[6]={0,1,2};”arr[0]、arr[1]、arr[2]?的值依次為0、1、2,其他元素即arr[3]、arr[4]、arr[5]?的值均為0。
(3)若給數(shù)組的所有元素賦初值,可以省略數(shù)組的長度。系統(tǒng)會根據(jù)所賦初值的個數(shù)確定數(shù)組的長度。例如,語句“intarr[]={1,2,3,4,5,6,7,8,9,10};”定義數(shù)組arr的長度為10,相當(dāng)于語句“intarr[10]={1,2,3,4,5,6,7,8,9,10};”。
5.1.4一維數(shù)組應(yīng)用舉例
【例5.1】
求10個整數(shù)的平均值。
問題分析:首先輸入10個整數(shù),然后對這10個整數(shù)求和,再求平均值,最后輸出結(jié)果。
程序如下:程序運行結(jié)果如圖5.2所示。圖5.2例5.1的運行結(jié)果
【例5.2】
編寫程序,找出10個整數(shù)中的最小值及其位置。
問題分析:首先輸入10個整數(shù),然后找出其中的最小值及其位置,最后輸出結(jié)果。其中最主要的功能是求最小值及其位置,完成這一功能的主要步驟如下:
(1)定義變量min以記錄最小值的位置,即下標(biāo)號,程序開始時假定第一個數(shù)為最小值,也就是位置min為0;
(2)將min位置的數(shù)和數(shù)組的下一個數(shù)進(jìn)行比較,如果下一個數(shù)更小,則更改min值為更小數(shù)的位置;
(3)比較完數(shù)組中所有的數(shù),位置min上的數(shù)就是最小值,否則轉(zhuǎn)向步驟(2)繼續(xù)執(zhí)行。
假設(shè)數(shù)組x的10個數(shù)依次為3、2、7、1、4、8、5、11、4、9,則尋找最小值及其位置的過程應(yīng)該為
同樣的方式將x[min]?依次與x[5]、x[6]、x[7]、x[8]、x[9]?相比較。每次比較均為x[min]?小,因此min值不變,最終min的值為3。圖5.3例5.2的運行結(jié)果類似地,請思考如何查找一個數(shù)列中最大值的位置。
【例5.3】
在遞減的有序數(shù)列中,插入一個數(shù)x,使得數(shù)列仍然有序(如果有相同的數(shù)則不插入)。
問題分析:本題相當(dāng)于在一個有序的數(shù)組中尋找合適的位置插入一個元素。問題的解決可分為兩個步驟:
(1)尋找插入位置:由于是遞減的序列,所以插入位置應(yīng)該是在第一個小于x的數(shù)組元素的前面(假定找到的位置為k);
(2)如果第k個元素等于x,則不須插入,否則執(zhí)行插入操作:
①第k個元素及其后面的元素都后移一位。
②插入元素在k位置。
程序如下:圖5.4例5.3的運行結(jié)果請思考:移動元素可不可以從前面的元素開始移動(即先移動插入位置的元素,最后移動最后一個元素)?為什么?如果可以有重復(fù)數(shù)據(jù),程序該如何編寫?
【例5.4】
用冒泡法對10個數(shù)進(jìn)行排序(由小到大)。冒泡法思路是:從前到后掃描數(shù)據(jù)序列,比較相鄰兩個數(shù)的大小,將小的數(shù)調(diào)到前頭,大的數(shù)沉底。假設(shè)對6個數(shù)據(jù)進(jìn)行排序的過程如圖5.5所示。圖5.5冒泡法排序原理圖問題分析:假設(shè)有6個數(shù)據(jù),第一次將8和9進(jìn)行比較后對調(diào),第二次將9(下沉了一位)和5進(jìn)行比較后對調(diào)……直到所有的數(shù)均比較完畢后,9已沉到了最底層,這時,最小的數(shù)0上浮了一位,經(jīng)第一趟(共5次)后,已得到最大的數(shù)。然后進(jìn)行第二趟對余下來的數(shù)據(jù)進(jìn)行比較,第二趟要比第一趟少比較1次,即只需4次即可比較出最大的數(shù)。依次類推,比較完畢后得到的就是按順序排列的數(shù)據(jù)。
對10個數(shù)排序的程序如下:運行結(jié)果如圖5.6所示。圖5.6例5.4的運行結(jié)果 5.2二維數(shù)組
含有兩個下標(biāo)的數(shù)組稱為二維數(shù)組,其中的數(shù)據(jù)是按照行列的格式排列的,即數(shù)據(jù)分為若干行、若干列。C語言規(guī)定:二維數(shù)組的行下標(biāo)和列下標(biāo)均是從0開始的。
5.2.1二維數(shù)組的定義格式
二維數(shù)組的定義格式如下:
類型說明符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];
例如,語句“intb[4][3];”表示定義了一個具有4行3列的整型數(shù)據(jù)的二維數(shù)組b。說明:
(1)二維數(shù)組定義中,數(shù)組名、數(shù)據(jù)類型的定義方式和一維數(shù)組相同,不同的只是數(shù)組名后面緊跟兩個方括號;兩個常量表達(dá)式,常量表達(dá)式1表示數(shù)組的行數(shù),常量表達(dá)式2表示每行數(shù)據(jù)的個數(shù),即列數(shù)。數(shù)組的元素個數(shù)就是兩個常量表達(dá)式之積。
(2)二維數(shù)組只是在邏輯上是二維的,從存儲上看,二維數(shù)組仍然存儲在一維線性空間。C語言中,按照行優(yōu)先方式存儲二維數(shù)組,即先存放第0行的元素,再連續(xù)存放第1行的元素……例如,上面定義的b是一個4行3列的數(shù)組,它在內(nèi)存中的存儲示意圖如圖5.7所示,它是一維線性存儲空間。圖5.74行3列的數(shù)組在內(nèi)存中的存儲示意圖5.2.2二維數(shù)組的引用
二維數(shù)組也只能引用單個數(shù)組元素,不能引用整個數(shù)組。二維數(shù)組元素的引用形式為
數(shù)組名[下標(biāo)1][下標(biāo)2]
二維數(shù)組的下標(biāo)可以是整型的變量、常量或表達(dá)式。第一維下標(biāo)的取值范圍是0~第一維長度?-1,第二維下標(biāo)的取值范圍是0~第二維長度?-1。例如,在語句“intb[4][3];”之后引用數(shù)組b的元素b[0][2]、b[1+1][1]、b[i][j](i、j為整型變量)是合法的引用方式,而b[2][3]、b[1.2][2]、b[6][0]、b[1,2]、b[2],[0]、b(1,2)、b(3)(1)是非法的引用方式?;ɡㄌ杻?nèi)各個初值之間用逗號分隔,初值類型必須與數(shù)組類型一致。系統(tǒng)自動按數(shù)組元素在內(nèi)存的順序?qū)⒊踔狄来钨x給相應(yīng)的元素。數(shù)值型數(shù)組的初值數(shù)量不足時,將0賦給其余數(shù)組元素。例如,語句“intx[2][3]={1,2,3,4,5};”之后,系統(tǒng)自動按數(shù)組x的元素在內(nèi)存的順序?qū)⒊踔狄来钨x給相應(yīng)的元素,即x[0][0]=1,x[0][1]=2,x[0][2]=3,x[1][0]=4,x[1][1]=5。其余元素被自動賦值為0,如x[1][2]=0。
(2)賦初值時,每一行的初值放在一個花括號中,所有行的初值再放在一個花括號中。具體格式為
類型說明符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]={{第0行初值列表},{第1行初值列表},…};系統(tǒng)將第一個花括號內(nèi)數(shù)據(jù)依次賦值給數(shù)組的第0行,將第二個花括號內(nèi)數(shù)據(jù)依次賦值給數(shù)組的第1行,依次類推。例如,語句“intx[4][4]={{1,2,3,4},{4,5,6},{},{7}};”之后,系統(tǒng)將1、2、3、4依次賦給x[0][0]、x[0][1]、x[0][2]和x[0][3];4、5、6依次賦給x[1][0]、x[1][1]和x[1][2],沒有列出初值的元素系統(tǒng)自動賦0;對應(yīng)第2行的“{}”,系統(tǒng)給x[2][0]、x[2][1]、x[2][2]和x[2][3]均賦值0;第3行對應(yīng){7},則系統(tǒng)將7賦值給x[3][0],而x[3][1]、x[3][2]和x[3][3]均被系統(tǒng)賦值為0。5.2.4二維數(shù)組應(yīng)用舉例
【例5.5】
將一個二維數(shù)組行和列元素互換后,存到另一個二維數(shù)組中,如圖5.8所示。圖5.8二維數(shù)組元素互換示意圖圖5.9例5.5的運行結(jié)果
【例5.6】
編寫程序:求一個M行N列的矩陣和一個N行W列的矩陣的乘積。
M行N列的矩陣A與N行W列的矩陣B相乘,乘積矩陣C為M行W列,其元素的計算公式為
程序運行結(jié)果如圖5.10所示。圖5.10例5.6的運行結(jié)果
【例5.7】
編程序查找矩陣的鞍點并輸出。所謂矩陣的鞍點,就是其值在所在行最小,而在所在列最大的元素。
問題分析:根據(jù)鞍點的定義,每行都可能有一個鞍點,所以要逐行查找。查找第i行鞍點的過程可分為兩個步驟:
(1)找出第i行最小值的列位置k。
(2)判斷第i行第k列元素在第k列是否最大。如果最大則是鞍點;如果不是,則第i行中無鞍點。判斷是否為最大值的方式是看是否有比a[i][k]大的值。
程序如下:輸入了以下一個有鞍點矩陣后的運行結(jié)果如圖5.11所示。
圖5.11例5.7的運行結(jié)果 5.3字符數(shù)組
5.3.1字符數(shù)組的定義和引用
字符數(shù)組是指數(shù)組元素為字符型的數(shù)組。字符數(shù)組的定義、引用、初始化方式和其他類型數(shù)組非常類似。但是由于字符數(shù)組是文字型數(shù)據(jù),因此其使用方式又有不同之處。
一維字符數(shù)組的定義格式為
char數(shù)組名[常量表達(dá)式];
如果需存放多個字符串,則需要定義二維字符數(shù)組。二維字符數(shù)組的定義格式為
char數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];字符數(shù)組元素也可通過數(shù)組名和下標(biāo)引用。
字符數(shù)組也可以在定義時初始化,方法和其他類型的數(shù)組一樣,例如:
charstr1[3][8]={{'r','e','d'},{'y','e','l','l','o','w'},{'g','r','e','e','n'}};
注意:若沒有對字符數(shù)組全部元素賦值,編譯系統(tǒng)會對剩余的元素自動賦值為空字符??兆址?\0'來表示,它是ASCII碼值為0的字符,表示什么都不做,也不顯示。
在定義字符數(shù)組之后,只能逐個給數(shù)組元素賦值,例如:
charstr2[8];
str2[0]='a';str2[1]='b';str2[2]='c';str2[3]='d';
對字符數(shù)組元素的操作只要符合字符類型的操作規(guī)則即可。圖5.12例5.8的運行結(jié)果如果輸入“AF5ab#$djaxf!”,則程序的運行結(jié)果如圖5.13所示。圖5.13例5.9的運行結(jié)果5.3.2字符串和字符數(shù)組
1.字符串的表示
編程者用字符數(shù)組處理字符串時,關(guān)心的不是數(shù)組的長度,而是有效字符串的長度。C語言中不保存字符串的長度,因此需要在字符串末尾加字符串結(jié)束標(biāo)志
空字符'\0'以表示字符串結(jié)束。對于字符串常量,編譯系統(tǒng)處理時會自動在字符串末尾處加上'\0'。因此,含有n個字符的字符串常量在內(nèi)存中占n+1個字節(jié)的空間,第n+1個字節(jié)存放'\0'。例如,"s"表示含有一個字母s的字符串,在內(nèi)存保存的是字母s和空字符'\0'的ASCII碼值,占兩個字節(jié)。""表示空串,在內(nèi)存中保存的是空字符'\0'的ASCII碼值,占一個字節(jié)。""表示一個含有一個空格的字符串,在內(nèi)存中占兩個字節(jié);''表示空格字符,在內(nèi)存中占一個字節(jié)。圖5.14例5.10的運行結(jié)果
2.字符串常量賦給字符數(shù)組
若在定義字符數(shù)組的同時賦初值,則可將字符串常量賦給該字符數(shù)組。例如:
charc[20]={"Thegreatwall"};
習(xí)慣上可以省略花括號,上面定義寫為
charc[20]="Thegreatwall";
數(shù)組c在內(nèi)存中存儲的示意圖如圖5.15所示。圖5.15數(shù)組c在內(nèi)存中存儲示意圖說明:
(1)若定義字符數(shù)組時完成賦初值,則可以在定義中省略數(shù)組的長度。系統(tǒng)會根據(jù)所賦字符串常量的實際長度來確定字符數(shù)組的長度。如上述定義也可寫為
charc[]="Thegreatwall";
系統(tǒng)會自動確定數(shù)組c的長度為15。
(2)字符串常量末尾處有系統(tǒng)自動加的結(jié)束標(biāo)志'\0',所以要求數(shù)組長度比字符串長度至少大1。例如:
charc[14]="Thegreatwall";
這條語句中數(shù)組c不能滿足字符串長度。
(3)除了數(shù)組定義時可以將字符串直接付給字符數(shù)組外,其他時刻只能對元素進(jìn)行賦值。例如,不能用語句“c="string";”對字符數(shù)組c賦值。圖5.16例5.11的運行結(jié)果
(注意這里Γ??是四個未知字符造成的)
charstr1[]="Thisisastring";和charstr2[]={'T','h','i','s','','i','s','','a','','s','t','r','i','n','g','\0'}是等效的,在內(nèi)存中存儲了字符串?"Thisisastring"?和一個?'\0',數(shù)組長度都為17。但charstr3[]={'T','h','i','s','','i','s','','a','','s','t','r','i','n','g'?}這條語句在內(nèi)存中存放了'T'、'h'、'i'、's'、''、'i'、's'、''、'a'、''、's'、't'、'r'、'i'、'n'、'g'?共16個字符,數(shù)組長度為16。因為輸出str3時沒有找到結(jié)束標(biāo)志,超出了數(shù)組范圍,所以輸出了四個未知字符。5.3.3常用字符串處理函數(shù)
為了簡化程序設(shè)計的復(fù)雜度,C語言提供了大量處理字符串的庫函數(shù)。這里僅介紹幾個常用的函數(shù)。
1.字符串輸入函數(shù)gets
1)格式
gets(字符數(shù)組)
2)功能
接收從鍵盤輸入的一個字符串(可包含空格)并存放在字符數(shù)組中。函數(shù)的返回值是字符數(shù)組的起始地址。
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 辦公設(shè)備耗材采購協(xié)議書
- 商鋪承包出租合同
- 2025年長春貨運從業(yè)資格考試題庫及答案詳解
- 企業(yè)網(wǎng)站建設(shè)與維護(hù)指南含實操字樣
- 瑞香種苗批發(fā)合同6篇
- 2025年高中化學(xué)新教材同步 必修第一冊 模塊綜合試卷(一)
- 養(yǎng)生館合股協(xié)議合同范本
- 醫(yī)院員工勞務(wù)合同范本
- 司機(jī)聘用合同范例范例
- 公司和員工勞動合同范本
- SZSD01 0012-2024智能交通大數(shù)據(jù)底座數(shù)據(jù)采集規(guī)范
- 經(jīng)典廣告歌曲大全(109首)
- 2024年湖南省公務(wù)員考試《行測》真題及答案解析
- 環(huán)保儀器培訓(xùn)
- 2024年全國職業(yè)院校技能大賽中職(大數(shù)據(jù)應(yīng)用與服務(wù)賽項)考試題庫(含答案)
- 2024湖南省水利廳直屬事業(yè)單位招聘擬聘用人員歷年高頻難、易錯點500題模擬試題附帶答案詳解
- 《計算機(jī)網(wǎng)絡(luò)技術(shù)》課程教案(完整版)
- 追覓在線測評題
- 調(diào)崗未到崗解除勞動合同通知書
- 產(chǎn)品標(biāo)準(zhǔn)化大綱
- 西師版小學(xué)數(shù)學(xué)四年級下冊教案
評論
0/150
提交評論