




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第5章數(shù)組5.1一維數(shù)組5.2二維數(shù)組與多維數(shù)組5.3字符數(shù)組5.4數(shù)組的綜合示例本章小結(jié)
C語言提供了多種數(shù)據(jù)類型,除了前面介紹的整型、實(shí)型和字符型等基本數(shù)據(jù)類型外,還有一些擴(kuò)展的數(shù)據(jù)類型,如數(shù)組、指針、結(jié)構(gòu)等。由于它們是由基本數(shù)據(jù)類型按一定規(guī)則組成的,所以被稱為復(fù)合數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型。
5.1一維數(shù)組
一維數(shù)組是最簡單的數(shù)組,數(shù)組元素只有一個(gè)下標(biāo)。5.1.1一維數(shù)組的定義及引用1.一維數(shù)組的定義在C語言中,與變量的定義一樣,數(shù)組也遵循“先定義后使用”的原則。一維數(shù)組的定義格式為類型說明符數(shù)組名[常量表達(dá)式];
例如:
shortscore[8];
表示定義一個(gè)數(shù)組,數(shù)組名為score,共有8個(gè)元素,每個(gè)元素的數(shù)據(jù)類型均為短整型。
當(dāng)定義了一個(gè)數(shù)組之后,C編譯程序會(huì)為所定義的數(shù)組在內(nèi)存中開辟一串連續(xù)的存儲(chǔ)單元,本例定義的score數(shù)組在內(nèi)存中的排列如圖5-1所示。
圖5-1數(shù)組在內(nèi)存中的排列
在定義一維數(shù)組時(shí),應(yīng)注意以下幾點(diǎn):
(1)類型說明符用來說明數(shù)組元素屬于何種數(shù)據(jù)類型,如int、char、float或double等。
(2)數(shù)組名由用戶自定義,與變量名的命名一樣,遵循標(biāo)識(shí)符命名規(guī)則。
(3)數(shù)組名后必須用“方括號(hào)”括起常量表達(dá)式,不能用其他括號(hào)。
(4)常量表達(dá)式定義數(shù)組的長度,表示數(shù)組的元素個(gè)數(shù)。
(5)常量表達(dá)式中一般包括整型常量、字符常量或符號(hào)常量,但不能包括實(shí)型(符號(hào))常量或字符串(符號(hào))常量。
(6)常量表達(dá)式中不能包括變量。
(7)數(shù)組元素的下標(biāo)從0開始,上例定義的數(shù)組的8個(gè)元素分別是score[0]、score[1]、score[2]、score[3]、score[4]、score[5]、score[6]和score[7]。注意最大下標(biāo)是7而不是8。
(8)相同類型的數(shù)組、變量可放在一起定義,中間用逗號(hào)隔開。
2.一維數(shù)組的引用
C語言規(guī)定數(shù)組不能以整體形式參與各種運(yùn)算。參與各種運(yùn)算的只能是數(shù)組元素,即
在程序中不能一次引用整個(gè)數(shù)組而只能逐個(gè)引用數(shù)組元素。一維數(shù)組元素的引用形式為
數(shù)組名[下標(biāo)]
其中,下標(biāo)可以是整型常量、整型變量或整型表達(dá)式。
數(shù)組元素與普通變量的表現(xiàn)形式不同,但實(shí)質(zhì)是相同的,它也是一種變量。因此,一個(gè)數(shù)組元素可以像普通變量那樣參與賦值、算術(shù)運(yùn)算、輸入和輸出等操作。下面介紹一維數(shù)組的輸入、輸出操作,以便讀者熟練掌握一維數(shù)組元素的引用。
1)一維數(shù)組的輸入
我們可以在程序運(yùn)行期間用賦值語句或從鍵盤輸入語句scanf()為數(shù)組元素賦值。一般用一個(gè)循環(huán)語句來賦值。例如:
2)一維數(shù)組的輸出
一維數(shù)組的輸出是指用輸出語句printf()將數(shù)組的元素逐個(gè)輸出。例如:
從這些示例可以看出,數(shù)組元素是一種帶下標(biāo)的變量,它跟普通變量一樣參與賦值、輸入和輸出等操作。但是,絕對(duì)不能把“數(shù)組名”當(dāng)成變量一樣使用。例如,定義
inta[100];
intb[10]={1,2,3,4,5,6,7,8,9,10};
后,采用如下語句進(jìn)行數(shù)據(jù)輸入輸出操作:
scanf("%d",&a);
printf("%d",b);
則是錯(cuò)誤的,無法輸入或輸出整個(gè)數(shù)組。
例5-1從鍵盤輸入10個(gè)數(shù),將這10個(gè)數(shù)逆序輸出,然后求出這10個(gè)數(shù)的和并輸出。
5.1.2一維數(shù)組的初始化
數(shù)組的初始化是指在定義數(shù)組的同時(shí)為數(shù)組元素賦初始值。一維數(shù)組在定義時(shí)進(jìn)行初始化的格式為
類型說明符數(shù)組名[常量表達(dá)式]={值1,值2,…,值n};
其中,大括號(hào)中的各個(gè)值依次對(duì)應(yīng)數(shù)組中的各個(gè)元素。各個(gè)值之間用逗號(hào)隔開。例如,數(shù)組定義及初始化語句為
intx[5]={1,2,3,4,5};
則有x[0]=1,x[1]=2,x[2]=3,x[3]=4,x[4]=5。
在初始化一維數(shù)組時(shí),應(yīng)注意以下幾點(diǎn):
(1)若“{}”中初值的個(gè)數(shù)小于數(shù)組元素個(gè)數(shù),則只有數(shù)組的前部分元素對(duì)應(yīng)獲得初值,后部分沒有獲得初值的元素則置相應(yīng)類型的默認(rèn)值(如int型置整數(shù)0,char型置字符'\0',float型置實(shí)數(shù)0.000?000等)。例如,定義
intx[5]={1,2,3};
則有x[0]=1,x[1]=2,x[2]=3,x[3]=0,x[4]=0。
(2)若“{}”中初值的個(gè)數(shù)等于數(shù)組元素個(gè)數(shù),則在數(shù)組定義時(shí)可省略元素個(gè)數(shù),此時(shí)數(shù)組長度由{}中值的個(gè)數(shù)來決定。例如,定義
intx[]={1,2,3,4,5};
就相當(dāng)于intx[5]={1,2,3,4,5}。
(3)若“{}”中初值的個(gè)數(shù)大于數(shù)組元素個(gè)數(shù),則編譯時(shí)會(huì)出現(xiàn)“toomanyinitializers”之類的錯(cuò)誤,表示初值個(gè)數(shù)太多。例如,定義
intx[5]={1,2,3,4,5,6};
是不對(duì)的。因?yàn)槌踔祩€(gè)數(shù)6超過了定義的數(shù)組長度5。
5.1.3一維數(shù)組的應(yīng)用
例5-2查找最大值。
解題思路第一個(gè)for語句逐個(gè)輸入10個(gè)數(shù)到數(shù)組a中。然后把a(bǔ)[0]送到max中。在第二個(gè)for語句中,將a[1]~a[9]逐個(gè)與max中的數(shù)進(jìn)行比較,若比max的值大,則把該數(shù)組元素送入max中,因此max的值在已比較過的數(shù)組元素中總是最大的。比較結(jié)束,輸出max的值。
例5-3從鍵盤上任意輸入10個(gè)整數(shù),要求按從小到大的順序顯示出來。排序的方法有很多種,本例采用冒泡法。
解題思路冒泡法的基本思想:通過將相鄰兩個(gè)數(shù)進(jìn)行比較和交換,使排序碼(數(shù)值)較小的數(shù)逐漸從底部移向頂部,排序碼較大的數(shù)逐漸從頂部移向底部。這就像水底的氣泡一樣逐漸向上冒,故而得名冒泡法。
由A[0]~A[n?-?1]組成的n個(gè)數(shù)據(jù),進(jìn)行冒泡排序的過程描述如下:
首先將相鄰的A[n?-?1]與A[n?-?2]進(jìn)行比較,如果A[n?-?1]的值小于A[n?-?2]的值,則交換兩者的位置,使較小的數(shù)上浮,較大的數(shù)下沉;接著比較A[n?-?2]與A[n?-?3],同樣使小的數(shù)上浮,大的數(shù)下沉;依次類推,直到比較完A[1]和A[0]后,A[0]為具有最小排序碼(數(shù)值)的元素,此時(shí)第一趟排序結(jié)束。
然后在A[1]~A[n?-?1]區(qū)間內(nèi),進(jìn)行第二趟排序,使剩余元素中排序碼最小的元素上浮到A[1]。重復(fù)進(jìn)行n-1趟排序后,整個(gè)排序過程結(jié)束。
5.2二維數(shù)組與多維數(shù)組
前面介紹的一維數(shù)組,它的數(shù)組元素只有一個(gè)下標(biāo),說明只用一個(gè)表示數(shù)組長度的常量表達(dá)式即可。如果一維數(shù)組的每個(gè)元素本身也是一個(gè)一維數(shù)組,則形成了一個(gè)二維數(shù)組。這時(shí)就要用兩個(gè)下標(biāo)來表示它的每個(gè)數(shù)組元素。多維數(shù)組是指二維及以上的數(shù)組,通常被表示為數(shù)組的數(shù)組,即一個(gè)數(shù)組的元素是其他數(shù)組。
5.2.1二維數(shù)組的定義及引用
1.二維數(shù)組的定義
二維數(shù)組的定義格式為
類型說明符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];
例如:
inta[3][4];
定義了一個(gè)二維數(shù)組,數(shù)組名為a,數(shù)組元素有3行4列,每個(gè)數(shù)組元素都是一個(gè)整型數(shù)據(jù)。
在定義二維數(shù)組時(shí),應(yīng)注意以下幾點(diǎn):
(1)類型說明符、數(shù)組名及常量表達(dá)式的要求與一維數(shù)組的相同。
(2)常量表達(dá)式1和常量表達(dá)式2各在一個(gè)方括號(hào)內(nèi),例如,定義不能寫成
inta[3,4];
(3)二維數(shù)組可以看成一種特殊的一維數(shù)組,其特殊之處就在于它的元素又是一個(gè)一維數(shù)組。例如,二維數(shù)組a[3][4]可以理解為它有3個(gè)元素a[0]、a[1]、a[2],每一個(gè)元素卻又是一個(gè)包含4個(gè)元素的一維數(shù)組,如圖5-2所示。
圖5-2二維數(shù)組a[3][4]的“組成”
(4)二維數(shù)組的元素在內(nèi)存中的存放順序?yàn)椤鞍葱写娣拧?,即先順序存放第一行的元素,再存放第二行的元素,依次類推,如圖5-3所示。從圖中可以看出,最右邊的下標(biāo)變化最快,最左邊的下標(biāo)變化最慢。這一特點(diǎn)也適用于二維以上的多維數(shù)組。圖5-3二維數(shù)組在內(nèi)存中的存放方式
2.二維數(shù)組的引用
二維數(shù)組元素的引用格式為
數(shù)組名[下標(biāo)1][下標(biāo)2]
5.2.2二維數(shù)組的初始化
二維數(shù)組的初始化跟一維數(shù)組初始化一樣,也有3種方法。
(1)在定義數(shù)組的同時(shí)為數(shù)組元素賦初值。
①按行對(duì)二維數(shù)組賦初值。例如:
inta[3][4]={{88,78,98,85},{86,92,76,71},{82,96,84,77}};
其初始化結(jié)果可用一個(gè)二維表表示,如圖5-4所示。這種賦初值方法比較直觀,即把內(nèi)層的第一個(gè)大括號(hào)內(nèi)的數(shù)據(jù)賦給第一行的元素,第二個(gè)大括號(hào)內(nèi)的數(shù)據(jù)賦給第二行的元素,依次類推即可。圖5-4二維數(shù)組的初始化
也可以用這種方法只給數(shù)組中部分元素賦初值。例如:
inta[3][4]={{88}{0,0,76}};
其初始化結(jié)果可用一個(gè)二維表表示,如圖5-5所示。圖5-5二維數(shù)組的部分賦值
②把所有的數(shù)據(jù)寫在一個(gè)花括號(hào)里,系統(tǒng)按數(shù)組的“按行存放”排列次序?qū)Ω鱾€(gè)元素賦初值。例如:
inta[3][4]={88,78,98,85,86,92,76,71,82,96,84,77};
其效果也如圖5-4所示。
③如果對(duì)全部元素賦初值,則在定義中可省略第一維的長度,但第二維長度不可省,例如:定義
inta[3][4]={88,78,98,85,86,92,76,71,82,96,84,77};
與定義
inta[][4]={88,78,98,85,86,92,76,71,82,96,84,77};
是等價(jià)的。這是因?yàn)橄到y(tǒng)編譯器可以根據(jù)數(shù)據(jù)總個(gè)數(shù)和列數(shù)來確定行數(shù),故行數(shù)可以缺省。
(2)在程序運(yùn)行時(shí),用賦值語句為數(shù)組元素賦值。例如:
for(i=0;i<100;i++)
for(j=0;j<200;j++)
a[i][j]=0; //常用于對(duì)所有的數(shù)組元素賦一個(gè)初始狀態(tài)值
(3)在程序運(yùn)行時(shí),用輸入語句為數(shù)組元素賦值。例如:
for(i=0;i<100;i++)
for(j=0;j<200;j++)
scanf("%d",&a[i][j]);
例5-4用二維數(shù)組保存3個(gè)班的英語成績(每個(gè)班20人),并求每個(gè)班的平均成績。
5.2.3二維數(shù)組的應(yīng)用
例5-5上三角矩陣是指主對(duì)角線以下的元素都為0的矩陣;主對(duì)角線為從矩陣的左上角至右下角的連線。試編寫程序,判斷一個(gè)給定的方陣是否為上三角矩陣。
例5-6應(yīng)用數(shù)組構(gòu)造n為6的楊輝三角形,并輸出。楊輝三角形如圖5-6所示。圖5-6楊輝三角形
解題思路楊輝三角形是一種在數(shù)學(xué)中非常著名的三角形排列形式。它是一個(gè)用于表示二項(xiàng)式系數(shù)的數(shù)列。楊輝三角形的結(jié)構(gòu)特點(diǎn)和生成方式如下:
(1)楊輝三角形是一個(gè)下三角矩陣。
(2)第一行和第二行只有元素1。
(3)從第三行開始,每行的第一個(gè)和最后一個(gè)元素都是1。
(4)對(duì)于中間的元素,它等于上一行中兩個(gè)相鄰元素之和。例如,第n行的第k個(gè)元素等于上一行的第k-1和第k個(gè)元素之和。
數(shù)學(xué)表達(dá)式是:C(n,k)?=?C(n?-?1,k?-?1)?+?C(n?-?1,k)。
5.2.4多維數(shù)組
二維數(shù)組實(shí)際上是一種最簡單的多維數(shù)組。C語言允許使用高于二維的多維數(shù)組,如三維數(shù)組、四維數(shù)組甚至更高維數(shù)的數(shù)組,允許使用的數(shù)組的最大維數(shù)由不同的C編譯器
決定。在實(shí)際應(yīng)用中,經(jīng)常用到的是一維、二維和三維數(shù)組,四維以上的數(shù)組極少使用。
多維數(shù)組的定義格式為
類型說明符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]……[常量表達(dá)式n];
其中,維數(shù)由常量表達(dá)式的個(gè)數(shù)n來決定。若n為3,則是一個(gè)三維數(shù)組。例如:
floata[2][3][4];
定義了一個(gè)三維數(shù)組,它可以理解為,三維數(shù)組a包含2個(gè)二維數(shù)組(a[0]和a[1]),每個(gè)二維數(shù)組包含3個(gè)一維數(shù)組,而每個(gè)一維數(shù)組包含4個(gè)float型的數(shù)組元素(如a[0][0]包含a[0][0][0]、a[0][0][1]、a[0][0][2]和a[0][0][3]),如圖5-7所示。圖5-7三維數(shù)組a[2][3][4]的“組成”
a[2][3][4]在內(nèi)存中的存放順序,如圖5-8所示。圖5-8三維數(shù)組在內(nèi)存的存放順序
在多維數(shù)組中,引用數(shù)組元素時(shí)其下標(biāo)個(gè)數(shù)要與維數(shù)相等。由圖5-7可知,對(duì)于三維數(shù)組,引用數(shù)組元素時(shí)其下標(biāo)個(gè)數(shù)應(yīng)當(dāng)為3,形如a[i][j][k]。若下標(biāo)個(gè)數(shù)小于維數(shù),則不能代表數(shù)組元素,而只相當(dāng)于數(shù)組名,如a、a[i]和a[i][j]分別代表三維、二維和一維數(shù)組名。
引入多維數(shù)組可以使編程更為靈活,因?yàn)槎嗑S數(shù)組的每一維都可以根據(jù)實(shí)際情況的不同而賦予不同的含義,從而使多維數(shù)組能描述比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
例5-7某年級(jí)共有4個(gè)班,每班各有30名學(xué)生,有6個(gè)科目的考試成績。求各班每個(gè)學(xué)生的平均成績并輸出。
5.3字符數(shù)組
在字符數(shù)組中,每個(gè)元素為一個(gè)字符。例如,用一個(gè)一維的字符數(shù)組來存放字符串“Iamastudent”,字符串中的字符是逐個(gè)被存放到數(shù)組元素中的。由于字符是以ASCII碼的形式存儲(chǔ),因此理解了數(shù)值數(shù)組后,字符數(shù)組也就很容易理解了。
5.3.1字符數(shù)組的定義及引用
1.字符數(shù)組的定義
用來存放字符型(char)數(shù)據(jù)的數(shù)組是字符數(shù)組。字符數(shù)組中的每一個(gè)元素都可以存放一個(gè)字符,因此一個(gè)字符數(shù)組不僅可以存放多個(gè)字符,也可存放字符串(字符串是含有結(jié)束標(biāo)志的字符數(shù)組)。因?yàn)樽址麛?shù)組在存放字符串時(shí),字符串末尾的結(jié)束符'\0'也一并存放,所以,一個(gè)字符串用一維數(shù)組來存放時(shí),數(shù)組元素個(gè)數(shù)一定要比字符數(shù)多一個(gè)。
例如:
charc[13]="Howareyou!";
定義了一個(gè)字符數(shù)組c,存放的字符串中字符數(shù)為12,考慮還有1個(gè)字符串結(jié)束符?'\0',因此定義的數(shù)組長度不能少于13。
一維字符數(shù)組的定義格式如下:
char數(shù)組名[數(shù)組長度];
例如:
charc[7];
定義了一個(gè)名為c的長度為7的一維字符數(shù)組,c的每個(gè)元素可存儲(chǔ)一個(gè)字符,整個(gè)字符數(shù)組可存儲(chǔ)一個(gè)字符個(gè)數(shù)少于7的字符串。
二維字符數(shù)組的定義格式如下:
char數(shù)組名[行長度][列長度];
例如:
charstr[4][9];
定義了一個(gè)名為str的4行9列的二維字符數(shù)組,每行可存儲(chǔ)一個(gè)字符個(gè)數(shù)少于9的字符串,一共可存儲(chǔ)4個(gè)字符串。
二維字符數(shù)組元素存儲(chǔ)的順序與二維數(shù)值數(shù)組完全相同,在此不再贅述。
此外,也可用整型數(shù)組存儲(chǔ)字符串,但會(huì)有一半的存儲(chǔ)空間被浪費(fèi)。
2.字符數(shù)組元素的引用
字符數(shù)組可以與數(shù)值數(shù)組一樣,按元素引用和賦值,此時(shí)的下標(biāo)形式、取值范圍也與數(shù)值數(shù)組相同。
5.3.2字符數(shù)組的初始化
為字符數(shù)組元素指定初值,稱為字符數(shù)組的初始化。字符數(shù)組的初始化也有兩種方法:
(1)在定義的同時(shí)給數(shù)組賦初值。若提供的初值(字符)個(gè)數(shù)大于數(shù)組長度,則按語法錯(cuò)誤處理(如編譯時(shí)會(huì)出現(xiàn)諸如Error:Toomanyinitializersinfunctionmain之類的錯(cuò)誤信息);若初值個(gè)數(shù)等于數(shù)組長度,則數(shù)組長度值可以省略不寫;若初值個(gè)數(shù)小于數(shù)組長度,則只將這些初值字符賦給前面的數(shù)組元素,其余的元素自動(dòng)置為空字符(即?'\0')。
例如,定義:
charc[8]={'G','O','O','D'};
后,數(shù)組在內(nèi)存中的存放如圖5-9所示(圖中假設(shè)首地址為2000)。圖5-9數(shù)組在內(nèi)存中的存放
(2)用字符串常量對(duì)字符數(shù)組進(jìn)行初始化。例如:
例5-8請(qǐng)編寫一個(gè)程序,其功能是:將一個(gè)數(shù)字字符串轉(zhuǎn)換為一個(gè)整數(shù)(不得調(diào)用C語言提供的將字符串轉(zhuǎn)換為整數(shù)的函數(shù))。例如,若輸入字符串"-1688",則程序要能把它轉(zhuǎn)換為整數(shù)值-1688并輸出。
5.3.3字符串
在前面我們提到了字符串常量。所謂字符串常量就是用雙引號(hào)括起來的一組字符。但實(shí)際上,字符串是一種字符型數(shù)組,并且這個(gè)數(shù)組的最后一個(gè)單元的值是?'\0'?。也就是說,字符串是一種以?'\0'?結(jié)尾的字符數(shù)組。這個(gè)結(jié)尾的字符?'\0'?唯一的作用就是標(biāo)識(shí)字符串的結(jié)束。比如,字符串常量?"china"?地內(nèi)存中的存放如圖5-10所示。圖5-10字符串在內(nèi)存中的存放
5.3.4字符數(shù)組和字符串的輸入與輸出
1.字符數(shù)組的輸入與輸出
1)用%c格式輸入/輸出
用%c格式輸入時(shí),每個(gè)字符都有效。
例5-9從鍵盤輸入一個(gè)學(xué)生姓名的全拼字母,并輸出。
例5-10用%s格式改寫例5-9的程序。
例5-11輸入一個(gè)英文單詞,若字母為小寫,則將其轉(zhuǎn)換為大寫字母并輸出。
2.字符串的輸入與輸出
1)字符串的輸入
除了可以通過初始化使字符數(shù)組各元素得到初值外,也可以使用getchar()函數(shù)、scanf()
函數(shù)或gets()函數(shù)輸入字符串(或字符數(shù)組)。
(1)逐個(gè)字符輸入。
(2)整個(gè)字符串一次輸入。
2)字符串的輸出
字符串(或字符數(shù)組)的輸出可以使用putchar()函數(shù)、printf()函數(shù)或puts()函數(shù)來實(shí)現(xiàn)。
(1)逐個(gè)字符輸出。
(2)整個(gè)字符串一次輸出。
5.3.5常用字符串處理函數(shù)
C語言提供了豐富的字符串操作函數(shù),除了上面介紹的用于字符串輸入輸出的gets()和puts()函數(shù)外,還有很多其他專門的字符串操作函數(shù),這些函數(shù)包含在頭文件“string.h”中。因此,若需使用這些函數(shù),應(yīng)在程序之前加上語句:
#include<string.h>
下面介紹幾種常用的字符串操作函數(shù),這里寫出這些函數(shù)實(shí)現(xiàn)的參考程序作為字符串操作的例子。
1.strlen(字符數(shù)組)
strlen(字符數(shù)組)的功能是測(cè)試字符串的長度。函數(shù)值為字符串的實(shí)際長度,不包括結(jié)束符?'\0'。
2.strcpy(字符數(shù)組1,字符數(shù)組2)
strcpy(字符數(shù)組1,字符數(shù)組2)的功能是把字符數(shù)組2中的字符串復(fù)制到字符數(shù)組1中去(即給一個(gè)字符數(shù)組賦值)。例如:
chars1[8],s2[]="GOOD";
strcpy(s1,s2);
執(zhí)行后,s1數(shù)組的狀態(tài)如圖5-11所示。圖5-11s1數(shù)組的狀態(tài)
3.strcat(字符數(shù)組1,字符數(shù)組2)
strcat(字符數(shù)組1,字符數(shù)組2)的功能是把字符數(shù)組2中的字符串連接到字符數(shù)組1的字符串后面。
連接前后數(shù)組的狀態(tài)如圖5-12所示。
圖5-12連接前后的數(shù)組狀態(tài)
4.strcmp(字符數(shù)組1,字符數(shù)組2)
strcmp(字符數(shù)組1,字符數(shù)組2)的功能是對(duì)字符數(shù)組1中的字符串和字符數(shù)組2中的字符串進(jìn)行比較。比較規(guī)則為:按字符ASCII的大小自左至右逐個(gè)比較兩個(gè)字符串的字符,直到出現(xiàn)不同的字符或遇到?'\0'?為止。若全部字符相同,返回值為0;若字符串1>字符串2,則返回值為一個(gè)正數(shù);若字符串1<字符串2,則返回值為一個(gè)負(fù)數(shù)。
5.3.6字符數(shù)組的應(yīng)用
例5-12有3個(gè)字符串,要求找出其中“最大”者。
解題思路如果將兩個(gè)字符進(jìn)行比較,所謂“大”者是指字符的ASCII碼較大的那個(gè)字符。例如,字符?'a'大于字符?'A'。如果是字符串,則從第一個(gè)字符開始一一進(jìn)行比較,如果第一個(gè)字符相同,就比較下一個(gè)字符,直到出現(xiàn)不同為止。如果字符串中都是英文字母,有一個(gè)簡單的判定方法:按英文字典的順序,字典中位置在后的較大,例如?"girl">"boy","then"<"they"。
題目要求處理3個(gè)字符串,需要定義一個(gè)二維的字符數(shù)組(取名str),假定每個(gè)字符串不超過19個(gè)字符,則可定義二維字符數(shù)組的大小為3?×?20,即有3行20列,每一行可以容納20個(gè)字符(包括最后的結(jié)束符?'0')??梢园裺tr[0]、str[1]、str[2]看作3個(gè)一維字符數(shù)組,它們各有20個(gè)元素?,F(xiàn)用gets()函數(shù)分別讀取3個(gè)字符串。經(jīng)過兩次比較,就可得到最大者,把它放在一維字符數(shù)組string中。為敘述方便,把str[0]、str[1]、str[2]分別簡稱為串0、串1、串2。
例5-13輸入一行字符,統(tǒng)計(jì)其中的單詞總數(shù),單詞之間用空格分隔開
解題思路要統(tǒng)計(jì)輸入行中的單詞總數(shù),可以定義單詞為連續(xù)的非空格字符序列,并將連續(xù)的空格看作單詞的分隔符。程序中,首先讀取整行字符串,然后遍歷每個(gè)字符。為了區(qū)分新單詞的開始,可使用兩個(gè)變量num和word。num(初始化為0)用來統(tǒng)計(jì)單詞的個(gè)數(shù),word(也初始化為0)作為標(biāo)志位,指示當(dāng)前是否在單詞內(nèi)。
遍歷字符串時(shí),若遇到空格,則將word置0,表示目前不在單詞中。若當(dāng)前字符不是空格并且word為0(表示上一個(gè)字符是空格或者是字符串的開始),則將word置1,并將num增加1,因?yàn)檫@意味著遇到一個(gè)新單詞。如果當(dāng)前字符不是空格且word已經(jīng)為1,則繼續(xù)遍歷,因?yàn)檫@仍然是當(dāng)前單詞的一部分。遍歷到字符串的結(jié)尾則遍歷結(jié)束。最后,num變量就表示了輸入字符串中的單詞總數(shù)。
5.4數(shù)組的綜合示例
例5-14求任意兩個(gè)正整數(shù)(不超過8位)之間所有整數(shù)所包含的數(shù)字0~9出現(xiàn)的次數(shù)。解題思路因?yàn)檩斎氲膬蓚€(gè)整數(shù)均不超過八位數(shù),所以可以定義兩個(gè)長整型變量來存儲(chǔ)。通過循環(huán)將每次得到的整型數(shù)用sprintf()函數(shù)將其轉(zhuǎn)換成8個(gè)字符的字符串并存放到字符數(shù)組str中,字符串不足8位時(shí)高位部分補(bǔ)空格字符,再對(duì)str中每個(gè)字符進(jìn)行統(tǒng)計(jì)。數(shù)字出現(xiàn)的次數(shù)可以定義一個(gè)長整型數(shù)組count來表示,其大小為10,count[0]存放0出現(xiàn)的次數(shù),count[1]存放1出現(xiàn)的次數(shù),…,count[9]存放9出現(xiàn)的次數(shù)。
例5-15輸入一行字符,統(tǒng)計(jì)其中各個(gè)大寫字母出現(xiàn)的次數(shù)。
解題思路定義一個(gè)擁有26個(gè)int類型數(shù)組元素組成的一維數(shù)組num,用于存放26個(gè)大寫字母出現(xiàn)的次數(shù),num[0]存放字母?'A'?的次數(shù),num[1]存放字母?'B'?的次數(shù),…,num[25]存放字母?'Z'?的次數(shù)。調(diào)用庫函數(shù)memset()將數(shù)組num清0。通過getchar()函數(shù)讀入當(dāng)前字符到ch變量中,如果是回車換行符?
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥品標(biāo)準(zhǔn)分類講解
- 膝關(guān)節(jié)骨性關(guān)節(jié)炎階梯治療
- 物理治療磁療技術(shù)研究與應(yīng)用
- 細(xì)胞的滲透實(shí)驗(yàn)
- 橈動(dòng)脈穿刺技術(shù)
- 細(xì)胞儀器技術(shù)解析
- 福建省福州三校聯(lián)盟2026屆化學(xué)高一第一學(xué)期期末學(xué)業(yè)水平測(cè)試試題含解析
- 汽水條形碼體系解析
- 蘇繡教學(xué)講解課件
- 現(xiàn)代安全防范技術(shù)
- 兵團(tuán)兩委考試試題及答案
- JG/T 2-2018鋼制板型散熱器
- 種植牙和解協(xié)議書
- 《大腦中動(dòng)脈解剖結(jié)構(gòu)》課件
- z08小升初數(shù)學(xué)試卷及答案
- 2025-2030焦炭行業(yè)市場(chǎng)深度調(diào)研及發(fā)展規(guī)劃與投資前景研究報(bào)告
- 舊房整修工程施工組織設(shè)計(jì)
- 建筑工程安全文明標(biāo)準(zhǔn)化示范工地管理辦法
- 藥品不良反應(yīng)的臨床應(yīng)對(duì)措施考試試題及答案
- 鼻飼的注意事項(xiàng)及護(hù)理要點(diǎn)
- 2024慢性鼻竇炎診斷和治療指南解讀課件
評(píng)論
0/150
提交評(píng)論