版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章
數(shù)組——批量數(shù)據(jù)的表示與處理6.1一維數(shù)組6.2二維數(shù)組6.3字符數(shù)組實(shí)訓(xùn)任務(wù)十一
熟悉數(shù)組的使用實(shí)訓(xùn)任務(wù)十二
學(xué)習(xí)使用數(shù)組的程序設(shè)計(jì)方法 6.1一維數(shù)組
6.1.1一維數(shù)組的定義與存儲(chǔ)結(jié)構(gòu)
一維數(shù)組定義的一般形式為
基類型符數(shù)組名[常量表達(dá)式];
其中,基類型符可以是基本類型中任一種類型的關(guān)鍵字,如int、char、float、double等,說(shuō)明了構(gòu)成數(shù)組各元素的數(shù)據(jù)類型。
數(shù)組名是數(shù)組引用的標(biāo)識(shí)符。命名規(guī)則同變量。
方括號(hào)中的常量表達(dá)式表示數(shù)組元素的個(gè)數(shù),也稱為數(shù)組的長(zhǎng)度。常量表達(dá)式是指只能包含常量和符號(hào)常量,不能包含變量的表達(dá)式,即表達(dá)式具有確定的值。
定義數(shù)組就定義了數(shù)組的引用符號(hào)、元素的類型和元素的個(gè)數(shù)及元素的順序關(guān)系。數(shù)組元素的序號(hào)是從0開始的,所以最大序號(hào)應(yīng)是常量表達(dá)式的值減1。如a[5]表示數(shù)組a有5個(gè)元素,分別為a[0]、a[1]、a[2]、a[3]、a[4]。
在數(shù)組定義中需注意以下幾點(diǎn):
(1)常量表達(dá)式中可以使用符號(hào)常量,但不能出現(xiàn)變量。例如:
(2)數(shù)組長(zhǎng)度說(shuō)明只能用方括號(hào),不能使用其他形式的括號(hào)。
(3)在一個(gè)定義語(yǔ)句中,可以定義一個(gè)數(shù)組,也可定義多個(gè)同一類型的數(shù)組,還可以和同一類型的變量一起定義,但各變量和數(shù)組之間要用逗號(hào)分隔。例如:
inti,j,k,a[10],b[20];
在程序中定義的數(shù)組,C語(yǔ)言編譯系統(tǒng)會(huì)給數(shù)組元素分配一段連續(xù)的存儲(chǔ)空間,每個(gè)元素按數(shù)據(jù)類型占用相同的字節(jié)數(shù)。6.1.2一維數(shù)組的初始化
定義了數(shù)組,編譯系統(tǒng)給其分配了存儲(chǔ)空間,但數(shù)組元素還不具有值。數(shù)組的初始化就是給數(shù)組元素提供初值。數(shù)組的初始化有以下幾種情況:
(1)給全部元素賦初值。例如:
inta[5]={5,8,9,12,3};
給數(shù)組元素提供的初值要用花括號(hào)括起來(lái),數(shù)據(jù)之間用逗號(hào)分隔。編譯時(shí),把數(shù)據(jù)依次賦給數(shù)組元素,即5賦給a[0],8賦給a[1],9賦給a[2],12賦給a[3],3賦給a[4]。
給全部元素賦值時(shí),在數(shù)組定義中,數(shù)組元素的個(gè)數(shù)可以缺省,元素個(gè)數(shù)默認(rèn)為數(shù)據(jù)的個(gè)數(shù)。定義語(yǔ)句可以寫成
inta[]={5,8,9,12,3};
(2)只給部分元素賦初值。例如:
inta[10]={0,1,2,3};
系統(tǒng)將提供的數(shù)據(jù)從a[0]開始,按順序賦給前面的元素,剩余元素?zé)o初值,即將0賦給a[0],將1賦給a[1],將2賦給a[2],將3賦給a[3],a[4]~a[9]無(wú)初值。
(3)若給全部元素賦相同初值,也只能給元素逐個(gè)賦值,不能給數(shù)組整體賦值。
例如:給5個(gè)元素全部賦1值,只能寫為
inta[5]={1,1,1,1,1};
而不能寫為
inta[5]=1;
6.1.3一維數(shù)組元素的引用
雖然數(shù)組是作為一個(gè)數(shù)據(jù)對(duì)象的,但只能引用數(shù)組的元素,而不能整體引用。對(duì)一個(gè)數(shù)組元素的引用相當(dāng)于對(duì)一個(gè)變量的引用。
數(shù)組元素引用的一般形式為
數(shù)組名[下標(biāo)]
其中,下標(biāo)只能為整型常量或整型表達(dá)式,如為小數(shù),系統(tǒng)自動(dòng)取整。
例如:a[5]、a[i+j]、a[i++]都是合法的數(shù)組元素引用形式。注意:引用數(shù)組元素時(shí),其下標(biāo)表示元素在數(shù)組中的位置信息,而數(shù)組定義時(shí)方括號(hào)中的整型常量或整型表達(dá)式表示的是元素個(gè)數(shù)。
例6.1
定義數(shù)組,依次分別給10元素賦值0~9,并逆序輸出。
編程思路:這是一個(gè)數(shù)組元素引用的例子。因?yàn)閿?shù)組只能按元素引用,所以賦值和輸出都只能逐個(gè)元素依次來(lái)進(jìn)行。
運(yùn)行結(jié)果:
分析:從程序可以看出,利用循環(huán)實(shí)現(xiàn)了數(shù)組逐個(gè)元素賦初值和輸出。數(shù)組的下標(biāo)變量與循環(huán)的控制變量使用一個(gè)變量i,利用循環(huán)規(guī)律能方便地實(shí)現(xiàn)數(shù)組元素的引用。6.1.4一維數(shù)組的應(yīng)用程序設(shè)計(jì)
例6.2
定義一個(gè)具有10個(gè)元素的一維數(shù)組,輸入元素的值,并輸出其中最大值。
編程思路:利用循環(huán)輸入10個(gè)數(shù),一次賦給數(shù)組元素。求10個(gè)元素中的最大數(shù),可定義一個(gè)存放最大數(shù)的變量max,先將a[0]賦給max(暫設(shè)a[0]中的值為最大數(shù)),然后max與a[1]~a[9]比較,遇到max小于某一元素,則將該元素值賦給max,作為當(dāng)前的最大數(shù)。逐個(gè)元素比較完,max中的值就是10個(gè)元素中的最大數(shù)。
運(yùn)行結(jié)果:
分析:程序中第一個(gè)循環(huán)控制變量i初值為0,循環(huán)終值為9,循環(huán)10次,從鍵盤輸入10個(gè)整數(shù),依次賦給a[0]~a[9]。第二個(gè)循環(huán)控制變量i初值為1,循環(huán)終值為9,循環(huán)9次,從a[1]開始,與max值比較,找出最大元素。在數(shù)組處理循環(huán)中一定要注意下標(biāo)越界的問(wèn)題。如果將for(i=1;i<10;i++)改為for(i=1;i<=10;i++),將會(huì)出現(xiàn)什么情況?
例6.3
編寫程序,實(shí)現(xiàn)用數(shù)組來(lái)產(chǎn)生Fibonacci數(shù)列。
編程思路:Fibonacci數(shù)列是1,1,2,3,5,8,13,…。用迭代關(guān)系式表示的數(shù)列規(guī)律為
F1=1
F2=1
Fn=Fn-2+Fn-1 (n>2)
即從第3項(xiàng)開始,每一項(xiàng)是前兩項(xiàng)之和。
迭代處理是一類常見(jiàn)的數(shù)據(jù)處理問(wèn)題。利用數(shù)組和循環(huán)結(jié)構(gòu)能有效地實(shí)現(xiàn)這類問(wèn)題的處理。
運(yùn)行結(jié)果:
分析:數(shù)組定義時(shí),按Fibonacci數(shù)列的形成規(guī)律,給數(shù)組前兩個(gè)元素賦初值1,從第3個(gè)元素開始,由循環(huán)根據(jù)迭代公式求出。
例6.4
使用冒泡法將10個(gè)數(shù)據(jù)按由小到大的次序排序并輸出。
編程思路:排序問(wèn)題是數(shù)據(jù)處理的常見(jiàn)問(wèn)題之一。冒泡法排序是最基本的排序方法。在程序中實(shí)現(xiàn)對(duì)n個(gè)數(shù)排序,應(yīng)定義一個(gè)有n個(gè)元素的一維數(shù)組。對(duì)數(shù)組元素兩兩進(jìn)行比較,如果符合序(前一個(gè)小于后一個(gè)),則不交換;如果不符合序(前一個(gè)大于后一個(gè)),則進(jìn)行交換。如此進(jìn)行n-1次比較,能找出最大的數(shù),被交換到最后一個(gè)元素(a[n-1])中。這樣的比較過(guò)程稱為一輪比較。經(jīng)過(guò)第1輪比較,前面n-1個(gè)元素仍是無(wú)序狀態(tài),需要進(jìn)行第2輪比較。在第2輪中,對(duì)n-1個(gè)元素進(jìn)行n-2次比較,可將最大的數(shù)交換到a[n-2]中。如此需要進(jìn)行n-1輪比較。最后一輪變?yōu)閍[1]與a[2]的比較。最后在數(shù)組中就存放了排好序的數(shù)。冒泡法排序過(guò)程如圖6.1所示(圖中雙向箭頭線表示兩數(shù)比較操作)。
從算法分析可知,冒泡法排序要用兩重循環(huán)來(lái)實(shí)現(xiàn),外循環(huán)控制輪次,內(nèi)循環(huán)實(shí)現(xiàn)每一輪中數(shù)組元素的兩兩比較。若n個(gè)數(shù)排序,設(shè)外循環(huán)控制變量為i,內(nèi)循環(huán)控制變量為j,則其取值范圍分別為0≤i≤n-1和0≤j≤j-i。
#include<stdio.h>
voidmain()
圖6.1冒泡法排序過(guò)程運(yùn)行結(jié)果:
分析:程序中用了4個(gè)for循環(huán)。第一個(gè)for循環(huán)實(shí)現(xiàn)輸入10個(gè)待排序的數(shù),依次賦給數(shù)組元素。第二個(gè)for循環(huán)實(shí)現(xiàn)輸出排序前的10個(gè)數(shù)。第三個(gè)for雙重循環(huán)實(shí)現(xiàn)對(duì)10個(gè)數(shù)排序。外層循環(huán)語(yǔ)句實(shí)現(xiàn)排序數(shù)的9輪比較,內(nèi)層循環(huán)語(yǔ)句實(shí)現(xiàn)本輪排序數(shù)的兩兩比較,不符合序則交換。最后一個(gè)for循環(huán)語(yǔ)實(shí)現(xiàn)排序后的10個(gè)數(shù)的輸出。以上排序方法如要實(shí)現(xiàn)數(shù)據(jù)由大到小排列,只需將第三個(gè)for中循環(huán)嵌套比較條件改為a[j]<a[j+1]即可。
例6.5
使用選擇法對(duì)10個(gè)數(shù)據(jù)按由小到大排序并輸出。
編程思路:選擇法是對(duì)冒泡法排序的改進(jìn)。冒泡法對(duì)n個(gè)數(shù)排序,相鄰兩數(shù)比較,只要不符合序都要進(jìn)行交換。在例6.4中,每輪比較,找出一個(gè)最大數(shù),放在最后一個(gè)數(shù)組元素中。這種方式可稱為“下沉法”。換一個(gè)思路,每輪比較找出一個(gè)最小數(shù),放在最前一個(gè)數(shù)組元素中,這種方式可稱為“上浮法”。選擇法排序采用“上浮法”。在內(nèi)循環(huán)中,每輪比較中只將最小值元素的下標(biāo)記錄在一個(gè)變量中,每輪比較結(jié)束只將所記錄的最小值元素與首元素進(jìn)行一次交換,以減少冒泡法排序中的交換次數(shù),提高排序效率。
分析:輸入與例6.4相同的數(shù),運(yùn)行結(jié)果也相同。程序中定義變量k,記錄本輪比較最小值元素的下標(biāo)號(hào)。在內(nèi)循環(huán)外,k賦值i,即設(shè)a[i]為最小數(shù)元素,也是本輪比較的首元素。在內(nèi)循環(huán)中,a[k]與其后的元素兩兩比較,如有一元素a[j]比a[k]的值小,就將j記錄在k中。結(jié)束內(nèi)循環(huán)時(shí),a[k]是最小元素,與a[i]進(jìn)行一次交換。內(nèi)循環(huán)控制變量j的初值是i+1,表示前i個(gè)元素已排好序,本輪只進(jìn)行第i個(gè)元素后的n-i個(gè)元素的比較排序。
只需對(duì)程序稍作改進(jìn),即可實(shí)現(xiàn)數(shù)據(jù)由大到小排序的功能,讀者可自行修改驗(yàn)證。
6.2二維數(shù)組
6.2.1二維數(shù)組的定義與存儲(chǔ)結(jié)構(gòu)
二維數(shù)組定義的一般形式為
基類型符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]
其中,基類型符和數(shù)組名的表示與作用同一維數(shù)組的定義。數(shù)組名后跟兩個(gè)方括號(hào),其中常量表達(dá)式1表示二維數(shù)組的行數(shù),常量表達(dá)式2表示二維數(shù)組的列數(shù)。例如:
inta[3][4];
定義了一個(gè)三行四列的二維數(shù)組a,包含3×4=12個(gè)整型數(shù)據(jù)元素,即
a[0][0],a[0][1],a[0][2],a[0][3]
a[1][0],a[1][1],a[1][2],a[1][3]
a[2][0],a[2][1],a[2][2],a[2][3]
二維數(shù)組的行號(hào)和列號(hào)都是從0開始的,最大行號(hào)是常量表達(dá)式1的值減1,最大列號(hào)是常量表達(dá)式2的值減1。
在程序中定義的二維數(shù)組,C語(yǔ)言編譯系統(tǒng)給各元素按所定義的數(shù)據(jù)類型分配一段連續(xù)的存儲(chǔ)空間。與一維數(shù)組不同的是,二維數(shù)組是二維邏輯結(jié)構(gòu),但存儲(chǔ)器是線性存儲(chǔ)結(jié)構(gòu),二維數(shù)組是按行線性存儲(chǔ)的,即按第1行、第2行、第3行,直到最后一行的順序存儲(chǔ)。
6.2.2二維數(shù)組的初始化
定義了二維數(shù)組,只說(shuō)明了二維數(shù)組的符號(hào)名稱、所包含元素的個(gè)數(shù)及類型,數(shù)組元素不具有值。要使數(shù)組元素具有值,需對(duì)二維數(shù)組初始化。二維數(shù)組的初始化也可以分為如下幾種情況。
(1)按行分段給全部元素賦初值。例如:
inta[4][3]={{11,12,13},{21,22,23},{31,32,33},{41,42,43}};
在初值數(shù)據(jù)花括號(hào)中,把每一行的初值數(shù)據(jù)用花括號(hào)括起來(lái),括號(hào)間也要用逗號(hào)分隔?;ɡㄌ?hào)的順序?qū)?yīng)行順序,花括號(hào)內(nèi)數(shù)據(jù)的順序?qū)?yīng)列順序。系統(tǒng)按行序,再按列序,把初值數(shù)據(jù)依次賦給各元素。
(2)線性連續(xù)給全部元素賦初值。例如:
inta[4][3]={11,12,13,21,22,23,31,32,33,41,42,43};
系統(tǒng)按二維數(shù)組的線性存儲(chǔ)順序把初值數(shù)據(jù)依次賦給各元素。
若定義數(shù)組時(shí),給全部元素賦初值,則第一方括號(hào)中的行數(shù)可以缺省。例如:
inta[][3]={{11,12,13},{21,22,23},{31,32,33},{41,42,43}};
或
inta[][3]={11,12,13,21,22,23,31,32,33,41,42,43};
(3)按行分段給部分元素賦初值。例如:
inta[4][3]={{1},{2},{3},{4}};
系統(tǒng)只給4行的首元素分別賦所提供的初值,其余元素不具有初值。
若只給部分行的部分元素賦初值應(yīng)采用這種方式,而且第1個(gè)方括號(hào)中的行數(shù)可以缺省,由尖括號(hào)的個(gè)數(shù)可得到行數(shù)。例如:
inta[][3]={{1},{},{3},{4}};
(4)線性連續(xù)給部分元素賦初值。例如:
inta[4][3]={1,2,3,4,5};
系統(tǒng)按二維數(shù)組的線性存儲(chǔ)順序把提供的數(shù)據(jù)依次賦給前面的元素,剩余元素不具有初值。即第0行3個(gè)元素分別具有初值1、2、3,第1行的a[1][0]和a[1][1]分別具有初值4、5,其余元素不具有初值。
6.2.3二維數(shù)組元素的引用
對(duì)二維數(shù)組的數(shù)據(jù)處理中,也只能對(duì)其元素進(jìn)行引用,不能進(jìn)行整體引用。二維數(shù)組元素引用的一般形式為
數(shù)組名[行下標(biāo)][列下標(biāo)]
行下標(biāo)和列下標(biāo)只能為整型常量或整型表達(dá)式,如為小數(shù),系統(tǒng)自動(dòng)取整。行下標(biāo)和列下標(biāo)分別表示元素在數(shù)組中的行位置和列位置信息。對(duì)二維數(shù)組中一個(gè)元素的引用也如同對(duì)一個(gè)變量的引用一樣。
例6.6
從鍵盤輸入一個(gè)二維數(shù)組各元素的值,并輸出。
編程思路:同一維數(shù)組一樣,二維數(shù)組也只能按元素引用,給數(shù)組元素輸入值和輸出數(shù)組元素值都只能逐個(gè)元素依次來(lái)進(jìn)行。
運(yùn)行結(jié)果:
分析:從程序可以看出,利用雙重循環(huán)實(shí)現(xiàn)了數(shù)組逐個(gè)元素值的輸入和輸出。數(shù)組的行下標(biāo)變量、列下標(biāo)變量與外內(nèi)循環(huán)的控制變量結(jié)合,利用雙重循環(huán)能方便地實(shí)現(xiàn)數(shù)組元素的引用。
6.2.4二維數(shù)組的應(yīng)用程序設(shè)計(jì)
例6.7
編寫程序,求4個(gè)同學(xué)3門課程的單科成績(jī)的平均分和所有科目總的平均分,并輸出。
編程思路:4個(gè)學(xué)生、3門課程成績(jī)表屬于二維數(shù)組結(jié)構(gòu)數(shù)據(jù)。定義學(xué)生數(shù)據(jù)為行、課程成績(jī)?yōu)榱械亩S數(shù)組,則求單科成績(jī)平均分需按列求和。為求所有科目總的平均分,需將單科平均分保存,可將二維數(shù)組多定義一行,最后一行用于保存單科平均分。
運(yùn)行結(jié)果:
分析:外循環(huán)控制變量i代表第i門課程,內(nèi)循環(huán)控制變量j代表第j個(gè)學(xué)生。外循環(huán)一次,內(nèi)循環(huán)執(zhí)行一遍,就求出4個(gè)學(xué)生一門課程的總分。內(nèi)循環(huán)結(jié)束時(shí),求出第i門課程的平均分,存入a[4][i]中。結(jié)束外循環(huán)后,又對(duì)數(shù)組第4行元素求和除以課程門數(shù)得平均分。
運(yùn)行結(jié)果:
分析:程序中用了3個(gè)雙重循環(huán)。第1個(gè)雙重循環(huán)實(shí)現(xiàn)原矩陣輸出;第2個(gè)雙重循環(huán)實(shí)現(xiàn)求轉(zhuǎn)置矩陣;第3個(gè)雙重循環(huán)實(shí)現(xiàn)轉(zhuǎn)置矩陣輸出。
例6.9
編寫程序,在一個(gè)3?×?3矩陣中找出最大的元素,輸出元素值及所在的行號(hào)和列號(hào),并求主對(duì)角線元素值之和。
編程思路:定義一個(gè)存放最大數(shù)變量max,以及行號(hào)、列號(hào)存放變量row、colum,先將矩陣二維數(shù)組的首元素賦給max,在雙重循環(huán)中,使每一元素與max比較,遇到大于max的元素,則將其值置換到max中,并將行號(hào)、列號(hào)記錄在row、colum中。求對(duì)角線元素值之和是行號(hào)與列號(hào)相等的元素累加。
運(yùn)行結(jié)果:
分析:對(duì)角線元素值之和,使用一個(gè)單層循環(huán)即可實(shí)現(xiàn),放在外循環(huán)中。找最大元素值可在內(nèi)循環(huán)中實(shí)現(xiàn)。在內(nèi)循環(huán)外先設(shè)定首元素為最大元素。實(shí)際上,設(shè)定比矩陣中最大元素值小的一個(gè)數(shù)值就可以。
例6.10
利用二維數(shù)組打印楊輝三角形。
編程思路:定義一個(gè)二維數(shù)組,存放楊輝三角形數(shù)據(jù)。利用楊輝三角形規(guī)律形成數(shù)據(jù),存入二維數(shù)組。楊輝三角形數(shù)組元素形成的算法是,數(shù)組的第0列和對(duì)角線元素值為1;其余各行元素是其上一行同列元素和上一行前一列元素之和。下面以5行數(shù)據(jù)為例編寫程序。
運(yùn)行結(jié)果:
分析:程序中第1個(gè)單層循環(huán)使第1列和對(duì)角線元素為1。第2個(gè)雙重循環(huán)生成楊輝三角形的其他元素。第3個(gè)雙重循環(huán)輸出生成的楊輝三角形元素值。定義了常量N作數(shù)組行列數(shù),只要修改N的定義值,可生成任意行數(shù)的楊輝三角形。
6.3字符數(shù)組
6.3.1字符數(shù)組的定義與初始化
字符數(shù)組的定義形式與數(shù)值數(shù)組的定義形式相同,只是基類型說(shuō)明符用char。例如:
charc[10];
由于字符型和整型可以通用,也可以定義intc[10]來(lái)存儲(chǔ)字符串,但這時(shí)每個(gè)數(shù)組元素在VC中占用4個(gè)字節(jié)的內(nèi)存單元,會(huì)造成空間的浪費(fèi)。
字符數(shù)組也可以是二維的。例如:
charc[5][10];
即為二維字符數(shù)組。字符數(shù)組也允許在定義時(shí),對(duì)部分或全部元素進(jìn)行初始化賦值。字符數(shù)組初始化是給元素提供字符常量。例如:
charc[10]={'c','','p','r','o','g','r','a','m'};
該字符數(shù)組的存儲(chǔ)結(jié)構(gòu)如圖6.2所示。
圖6.2字符數(shù)組的存儲(chǔ)結(jié)構(gòu)因?yàn)樽址前醋址麛?shù)組存儲(chǔ)的,所以可以用字符串對(duì)字符數(shù)組初始化,而且字符數(shù)組定義時(shí),方括號(hào)中的長(zhǎng)度可以缺省。用字符串初始化的字符數(shù)組可稱為字符串?dāng)?shù)組。
例如:
charc[]="Cprogram";
C語(yǔ)言規(guī)定,一個(gè)字符串有一個(gè)字符串結(jié)束符“\0”。所以,用字符串給字符數(shù)組提供初值,系統(tǒng)自動(dòng)在字符串最后一個(gè)字符后增加一個(gè)字節(jié),用于存儲(chǔ)“\0”。如c[9]中即存“\0”。字符數(shù)組與字符串?dāng)?shù)組的不同之處是,字符串?dāng)?shù)組的存儲(chǔ)字節(jié)數(shù)比實(shí)際字符多一個(gè)。也可以定義、初始化二維字符數(shù)組。初始化的方法同數(shù)值數(shù)組,只是提供的數(shù)據(jù)為字符數(shù)據(jù)。例如:定義一個(gè)表示5行5列的“*”菱形圖案的二維字符數(shù)組。
charc[5][5]={{'','','*'},{'','*','','*'},{'*','','','','*'},{'','*','','*'},{'','','*'}};
6.3.2字符數(shù)組的引用
C語(yǔ)言中各種類型的數(shù)組都只能按元素來(lái)引用。但字符串?dāng)?shù)組的輸入/輸出可以是整體方式。字符串?dāng)?shù)組用printf函數(shù)和scanf函數(shù),使用“%s”格式符,可一次性輸入/輸出一個(gè)字符數(shù)組中的字符串。例如:
charc[]="CPrograme";
printf("%s",c);
scanf("%s",c);
注意,scanf中使用的是數(shù)組名。這與數(shù)組元素的引用不同,數(shù)組元素引用是地址方式。字符串輸入結(jié)束后,系統(tǒng)也自動(dòng)加存一個(gè)字符串結(jié)束符“0\”。
例6.11
輸入一個(gè)字符串,然后輸出,測(cè)試字符串長(zhǎng)度。
編程思路:C語(yǔ)言庫(kù)函數(shù)中提供了一個(gè)測(cè)試字符串函數(shù)intstrlen(str)。使用時(shí),在程序開頭要用預(yù)處理命令#include<string.h>。下面采用字符串輸入/輸出方式。
運(yùn)行結(jié)果:
分析:程序中定義的字符數(shù)組要比輸入的字符串長(zhǎng)度大,在輸入字符串時(shí),系統(tǒng)自動(dòng)加字符串結(jié)束符“\0”。輸出時(shí),識(shí)別到“\0”就認(rèn)為字符串結(jié)束,僅輸出有效字符。字符串長(zhǎng)度測(cè)試函數(shù)也只計(jì)數(shù)有效字符。
例6.12
編寫程序,輸出一個(gè)鉆石圖形。
編程思路:鉆石圖形用“*”表示。定義一個(gè)二維字符數(shù)組,存放圖形字符數(shù)據(jù),采用字符數(shù)組元素輸出方式。運(yùn)行結(jié)果:
分析:定義字符數(shù)組,用字符初始化,字符串后沒(méi)有字符串結(jié)束符“\0”,需用字符數(shù)組元素的方式輸出,使用“%c”格式符。
6.3.3字符串處理函數(shù)
1.字符串輸出函數(shù)puts
格式:
puts(字符數(shù)組);
功能:輸出字符數(shù)組中的字符串。
2.字符串輸入函數(shù)gets
格式:
gets(字符數(shù)組);
功能:從鍵盤輸入一個(gè)字符串,存入到指定的字符數(shù)組中。當(dāng)輸入的字符串中含有空格時(shí),空格也作為有效字符,只以回車作為輸入結(jié)束。這是與scanf函數(shù)不同的。
3.字符串連接函數(shù)strcat
格式:
strcat(字符數(shù)組1,字符數(shù)組2);
功能:把字符數(shù)組2中的字符串連接到字符數(shù)組1中字符串的后面,并刪去字符串1后的串結(jié)束標(biāo)志“\0”,組成新的字符串。本函數(shù)返回值是字符數(shù)組1的首地址。應(yīng)注意:字符數(shù)組1應(yīng)定義足夠的長(zhǎng)度,否則不能全部裝入被連接的字符串。
4.字符串拷貝函數(shù)strcpy
格式:
strcpy(字符數(shù)組1,字符串2);
功能:把字符串2拷貝到字符數(shù)組1中,字符串2可以是字符串,也可以是字符數(shù)組。串結(jié)束標(biāo)志“\0”也一同拷貝。
在使用函數(shù)strcpy時(shí)應(yīng)注意以下幾點(diǎn):
(1)字符數(shù)組1必須定義得足夠大,以便容納被復(fù)制的字符串。字符數(shù)組1至少不應(yīng)小于字符串2的長(zhǎng)度,否則不能全部裝入所拷貝的字符串。
(2)字符數(shù)組1必須寫成數(shù)組名形式,而字符串2可以是字符數(shù)組,也可以是字符串常量。
(3)有時(shí)也可以只復(fù)制字符串2中的前若干個(gè)字符,其具體使用格式為
strcpy(字符數(shù)組1,字符串2,m)
表示將字符串2中的前m個(gè)字符復(fù)制到字符數(shù)組1中,取代字符數(shù)組1中的前m個(gè)字符。
5.字符串比較函數(shù)strcmp
格式:
strcmp(字符串1,字符串2);
功能:對(duì)兩個(gè)字符串字母逐個(gè)比較,比較對(duì)應(yīng)字符的ASCII碼值,函數(shù)返回比較結(jié)果。
返回值情況如下:
(1)字符串1=字符串2,返回值為0,表示兩字符串每個(gè)字符都相同,字符個(gè)數(shù)也相同。
(2)字符串1>字符串2,返回大于0的正整數(shù)值,只要遇到串1的一個(gè)字符大于串2的字符,就是串1大于串2。
(3)字符串1<字符串2,返回小于0的負(fù)整數(shù)值,只要遇到串1的一個(gè)字符小于串2的字符,就是串1小于串2。
6.求字符串長(zhǎng)度函數(shù)strlen
格式:
strlen(字符數(shù)組名);
功能:測(cè)字符串的實(shí)際長(zhǎng)度(不含字符串結(jié)束標(biāo)志“\0”)并作為函數(shù)返回值。
7.小寫轉(zhuǎn)大寫函數(shù)strupr
格式:
strupr(字符串);
功能:將字符串中的小寫字母轉(zhuǎn)換為大寫字母,其他字符不轉(zhuǎn)換(包括大寫字母和非字母)。其中“字符串”可以是字符數(shù)組名或字符串常量,函數(shù)的返回值為轉(zhuǎn)換后的字符串
地址。
8.大寫轉(zhuǎn)小寫函數(shù)strlwr
格式:
strlwr(字符串);
功能:將字符串中的大寫字母轉(zhuǎn)換為小寫字母,其他字符不轉(zhuǎn)換(包括小寫字母和非字母)。其中“字符串”可以是字符數(shù)組名或字符串常量,函數(shù)的返回值為轉(zhuǎn)換后的字符串地址。
6.3.4字符數(shù)組的應(yīng)用程序設(shè)計(jì)
字符數(shù)組中字符數(shù)據(jù)的處理程序設(shè)計(jì),其思路方法與數(shù)值數(shù)組相同。只是輸入/輸出可有兩種方式:一是字符數(shù)組元素的引用方式,二是串的整體方式。要注意字符數(shù)組賦初值的方式,它是通過(guò)字符賦初值的,字符串沒(méi)有結(jié)束符“\0”,應(yīng)按字符元素輸入/輸出。在字符串的處理中,要善于使用串處理庫(kù)函數(shù)。
例6.13
從鍵盤輸入一串字符,實(shí)現(xiàn)其中大小寫字母的轉(zhuǎn)換并輸出。
編程思路:通過(guò)字符串輸入給字符數(shù)組提供值,系統(tǒng)自動(dòng)添加字符串結(jié)束符“\0”,可用字符串方式輸入/輸出。從附錄A可知,字母大小寫的ASCII碼值相差32,將大寫字母的ASCII碼值加32就轉(zhuǎn)換成小寫字母,將小寫字母的ASCII碼值減32就轉(zhuǎn)換成大寫字母。
運(yùn)行結(jié)果:
分析:程序中使用了字符串長(zhǎng)度檢測(cè)函數(shù),程序頭部有“#include"strin
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 住宅小區(qū)鉆孔樁施工協(xié)議
- 水庫(kù)水質(zhì)凈化施工合同
- 物流行業(yè)工作與休息安排
- 廈門市民宿衛(wèi)生防疫措施
- 學(xué)?;顒?dòng)巴士租賃服務(wù)合同
- 影視作品授權(quán)合同
- 互聯(lián)網(wǎng)行業(yè)產(chǎn)品經(jīng)理培訓(xùn)大綱
- 住宅小區(qū)配電房施工協(xié)議
- 運(yùn)動(dòng)器材公司著作權(quán)保護(hù)
- 2025年安防設(shè)備進(jìn)出口貿(mào)易合同范本6篇
- DLT 5434-2021 電力建設(shè)工程監(jiān)理規(guī)范表格
- 房屋退還協(xié)議書范本
- 天皰瘡臨床分期與治療方案研究
- 江蘇省南京市選調(diào)生考試(行政職業(yè)能力測(cè)驗(yàn))綜合能力題庫(kù)含答案
- 幼兒園勞動(dòng)教育國(guó)內(nèi)外研究現(xiàn)狀
- 2021-2022學(xué)年江蘇省無(wú)錫市惠山區(qū)蘇教版四年級(jí)上冊(cè)期末測(cè)試數(shù)學(xué)試卷
- 軍事理論-綜合版-知到答案、智慧樹答案
- 綜合技能訓(xùn)練實(shí)訓(xùn)報(bào)告學(xué)前教育
- 光伏發(fā)電技術(shù)項(xiàng)目投標(biāo)書(技術(shù)標(biāo))
- 2024年上海海洋大學(xué)馬克思主義基本原理概論(期末考試題+答案)
- 社會(huì)實(shí)踐-形考任務(wù)四-國(guó)開(CQ)-參考資料
評(píng)論
0/150
提交評(píng)論