《C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)》課件第6章_第1頁(yè)
《C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)》課件第6章_第2頁(yè)
《C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)》課件第6章_第3頁(yè)
《C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)》課件第6章_第4頁(yè)
《C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)》課件第6章_第5頁(yè)
已閱讀5頁(yè),還剩90頁(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)介

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

評(píng)論

0/150

提交評(píng)論