




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 教學(xué)內(nèi)容教學(xué)內(nèi)容: : 10.1 10.1 數(shù)組的概念數(shù)組的概念 10.2 10.2 一維數(shù)組一維數(shù)組 10.3 10.3 多維數(shù)組多維數(shù)組 10.4 10.4 字符數(shù)組與字符串字符數(shù)組與字符串 10.5 10.5 字符串處理函數(shù)字符串處理函數(shù) 10.6 10.6 數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù)第第10 10 章章 數(shù)組與字符串處理數(shù)組與字符串處理 教學(xué)要求教學(xué)要求: : 1 1掌握數(shù)組的定義,及其數(shù)組元素的下標(biāo)掌握數(shù)組的定義,及其數(shù)組元素的下標(biāo)表示方法。表示方法。 2 2掌握數(shù)組的初始化方法。掌握數(shù)組元素掌握數(shù)組的初始化方法。掌握數(shù)組元素的引用,數(shù)組數(shù)據(jù)輸入的引用,數(shù)組數(shù)據(jù)輸入/ /輸出
2、方法。輸出方法。 3 3掌握數(shù)組在程序設(shè)計(jì)中的應(yīng)用,以及有掌握數(shù)組在程序設(shè)計(jì)中的應(yīng)用,以及有關(guān)的算法,例如排序算法等。關(guān)的算法,例如排序算法等。 4 4掌握字符數(shù)組的應(yīng)用方法。掌握字符數(shù)組的應(yīng)用方法。 5 5掌握字符串處理函數(shù)的使用。掌握字符串處理函數(shù)的使用。第第10 10 章章 數(shù)組與字符串處理數(shù)組與字符串處理 數(shù)組數(shù)組是最簡單的一種構(gòu)造類型。是最簡單的一種構(gòu)造類型。 構(gòu)造類型構(gòu)造類型是由基本類型按一定規(guī)則構(gòu)造而成的,一是由基本類型按一定規(guī)則構(gòu)造而成的,一個(gè)構(gòu)造類型數(shù)據(jù)可以分解為多個(gè)構(gòu)造元素,這些元素可個(gè)構(gòu)造類型數(shù)據(jù)可以分解為多個(gè)構(gòu)造元素,這些元素可以是基本類型,也可以是構(gòu)造類型。以是基本類
3、型,也可以是構(gòu)造類型。 一個(gè)數(shù)組可以分解為多個(gè)數(shù)組元素,這些數(shù)組元素一個(gè)數(shù)組可以分解為多個(gè)數(shù)組元素,這些數(shù)組元素可以是基本類型或是構(gòu)造類型??梢允腔绢愋突蚴菢?gòu)造類型。 按數(shù)組元素的類型不同,數(shù)組又可分為按數(shù)組元素的類型不同,數(shù)組又可分為數(shù)值數(shù)組數(shù)值數(shù)組、字符數(shù)組字符數(shù)組、指針數(shù)組指針數(shù)組、結(jié)構(gòu)數(shù)組結(jié)構(gòu)數(shù)組等各種類別。等各種類別。 10.1 10.1 數(shù)數(shù) 組組 的的 概概 念念 在實(shí)際應(yīng)用中,人們不可避免的要遇到在實(shí)際應(yīng)用中,人們不可避免的要遇到“批量數(shù)據(jù)的批量數(shù)據(jù)的存儲和處理存儲和處理”問題。問題。 例如:在學(xué)生成績管理系統(tǒng)中,可能需要對一個(gè)班例如:在學(xué)生成績管理系統(tǒng)中,可能需要對一個(gè)班
4、30 30 名學(xué)生的成績進(jìn)行輸入,計(jì)算出平均分,然后輸出所有高名學(xué)生的成績進(jìn)行輸入,計(jì)算出平均分,然后輸出所有高于平均分的成績。于平均分的成績。 為了便于處理,對于這樣一組有著內(nèi)在聯(lián)系、具有相為了便于處理,對于這樣一組有著內(nèi)在聯(lián)系、具有相同性質(zhì)的數(shù)據(jù),可以按順序組織起來,共用一個(gè)統(tǒng)一的名同性質(zhì)的數(shù)據(jù),可以按順序組織起來,共用一個(gè)統(tǒng)一的名字,即:數(shù)組名。字,即:數(shù)組名。數(shù)組中各個(gè)數(shù)據(jù)的區(qū)分用數(shù)組名帶下標(biāo)數(shù)組中各個(gè)數(shù)據(jù)的區(qū)分用數(shù)組名帶下標(biāo)的形式表示。的形式表示。 我們可以為我們可以為 30 30 名學(xué)生的成績建立一個(gè)名為名學(xué)生的成績建立一個(gè)名為 s s 的數(shù)組,的數(shù)組,30 30 個(gè)成績順序存放在
5、個(gè)成績順序存放在 s0s0s29s29這這 30 30 個(gè)帶下標(biāo)的變量個(gè)帶下標(biāo)的變量中,中, 1 1一維數(shù)組的定義一維數(shù)組的定義 定義的語句形式:定義的語句形式: 類型說明符類型說明符 數(shù)組名數(shù)組名 常量表達(dá)式常量表達(dá)式 (1 1)“數(shù)據(jù)類型數(shù)據(jù)類型”是指數(shù)組元素的數(shù)據(jù)類型。是指數(shù)組元素的數(shù)據(jù)類型。 (2 2) 數(shù)組名定名規(guī)則和變量名相同。數(shù)組名定名規(guī)則和變量名相同。 (3 3) 常量表達(dá)式常量表達(dá)式, , 必須用方括號括起來。它是一必須用方括號括起來。它是一個(gè)整型值個(gè)整型值, , 指定數(shù)組元素的個(gè)數(shù),即數(shù)組的長度。指定數(shù)組元素的個(gè)數(shù),即數(shù)組的長度。 常量表達(dá)式其中可以包含常數(shù)和符號常量,但不
6、能常量表達(dá)式其中可以包含常數(shù)和符號常量,但不能包含變量。包含變量。 10.2 10.2 一一 維維 數(shù)數(shù) 組組 例如例如: : int a10; 上述說明語句,定義了一個(gè)上述說明語句,定義了一個(gè)整型一維數(shù)組。整型一維數(shù)組。 數(shù)組名稱:數(shù)組名稱:a ,有有1010個(gè)數(shù)組元素;系統(tǒng)分配個(gè)數(shù)組元素;系統(tǒng)分配1010個(gè)個(gè)連連續(xù)的存儲單元續(xù)的存儲單元。 數(shù)組的數(shù)組的數(shù)據(jù)類型是:數(shù)據(jù)類型是:int 每一個(gè)數(shù)組元素的存儲單每一個(gè)數(shù)組元素的存儲單元占用元占用2 2個(gè)字節(jié)個(gè)字節(jié), , 存放一個(gè)整型值。存放一個(gè)整型值。 (4)(4) 數(shù)組元素的下標(biāo),是元素相對于數(shù)組起始地址的數(shù)組元素的下標(biāo),是元素相對于數(shù)組起始地
7、址的偏移量,所以從偏移量,所以從0 0開始順序編號。開始順序編號。 上述上述數(shù)組的數(shù)組的數(shù)組元素為:數(shù)組元素為: a0, a1, a2, a9,沒有沒有a10a10。 (5 5)數(shù)組名表示的是一個(gè)地址常量,它代表整個(gè)數(shù)組數(shù)組名表示的是一個(gè)地址常量,它代表整個(gè)數(shù)組的首地址。同一數(shù)組中的所有元素按其下標(biāo)順序占用一段的首地址。同一數(shù)組中的所有元素按其下標(biāo)順序占用一段連續(xù)的存儲單元連續(xù)的存儲單元. . a 表示數(shù)組起始地址表示數(shù)組起始地址 & &a0 表示第表示第1 1個(gè)數(shù)組元素的地址,個(gè)數(shù)組元素的地址, 與數(shù)組起始地址相同與數(shù)組起始地址相同 & &a1 表示第表示第2
8、 2個(gè)數(shù)組元素的地址,個(gè)數(shù)組元素的地址, 等于:第等于:第1 1個(gè)數(shù)組元素的地址個(gè)數(shù)組元素的地址2 2 (6)6) 不允許對數(shù)組進(jìn)行動態(tài)定義。以下作法是錯(cuò)誤的不允許對數(shù)組進(jìn)行動態(tài)定義。以下作法是錯(cuò)誤的。 int n; scanf(“%d”,&n); int an; (7)(7) 數(shù)組數(shù)組說明語句說明語句一次可定義幾個(gè)數(shù)組一次可定義幾個(gè)數(shù)組, , 形式如下:形式如下: 數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)組名數(shù)組名 常量表達(dá)式常量表達(dá)式, , 數(shù)組名數(shù)組名22常量表達(dá)常量表達(dá)式式22 ; 例如:例如: int a1 4 , a2 5 ; 上述說明語句,定義了上述說明語句,定義了兩個(gè)整型一維數(shù)組。兩個(gè)整型
9、一維數(shù)組。 數(shù)組名為數(shù)組名為:, a2 a1 一維數(shù)組有一維數(shù)組有4個(gè)數(shù)組元素個(gè)數(shù)組元素: a10, a11, a12, a13 a2 一維數(shù)組有一維數(shù)組有5個(gè)數(shù)組元素個(gè)數(shù)組元素: a20, a21, a22, a23 , a24 數(shù)組元素的數(shù)值類型均為:數(shù)組元素的數(shù)值類型均為: 整型(整型(int ) a1, a2, 分別代表各自數(shù)組的起始地址分別代表各自數(shù)組的起始地址 &a10 &a11 &a12 &a13 為各數(shù)組元素的地址為各數(shù)組元素的地址 2. 數(shù)組元素的引用數(shù)組元素的引用 引用數(shù)組元素的形式:引用數(shù)組元素的形式: 數(shù)組名數(shù)組名下標(biāo)表達(dá)式下標(biāo)表達(dá)式 (
10、1)(1) “ “下標(biāo)表達(dá)式下標(biāo)表達(dá)式”可以是任何非負(fù)整型數(shù)據(jù),取值范圍可以是任何非負(fù)整型數(shù)據(jù),取值范圍是是0(元素個(gè)數(shù)(元素個(gè)數(shù)-1)。)。 int a8; 數(shù)組元數(shù):數(shù)組元數(shù):a0 a7 (2) (2)在在C語言中,數(shù)組作為語言中,數(shù)組作為1個(gè)整體,不能參加數(shù)據(jù)運(yùn)算,個(gè)整體,不能參加數(shù)據(jù)運(yùn)算,只能對單個(gè)的元素進(jìn)行處理。只能對單個(gè)的元素進(jìn)行處理。 (3)(3)下標(biāo)不能越界。下標(biāo)不能越界。 (4)(4)下標(biāo)變量和我們前面的簡單變量具有相同的地位和作下標(biāo)變量和我們前面的簡單變量具有相同的地位和作用,可以象使用簡單變量一樣使用。用,可以象使用簡單變量一樣使用。例例10.1數(shù)組元素的引用。數(shù)組元素的
11、引用。 main() int i,a10; for(i=0;i=0;i-) printf(%d,ai); 本例中第一個(gè)循環(huán)語句給本例中第一個(gè)循環(huán)語句給a a數(shù)組各元素賦值,然后用第二數(shù)組各元素賦值,然后用第二個(gè)循環(huán)語句,輸出數(shù)組元素個(gè)循環(huán)語句,輸出數(shù)組元素a9 a0的的各個(gè)數(shù)值。各個(gè)數(shù)值。 輸出結(jié)果輸出結(jié)果: 9 8 7 6 5 4 3 2 1 0數(shù)組元素引用數(shù)組元素引用可以用變量可以用變量 定義數(shù)組,定義數(shù)組,元素個(gè)數(shù)不元素個(gè)數(shù)不能用變量能用變量例例10.2 數(shù)組元素引用數(shù)組元素引用main( ) int a4; float b3; a0=3; a1=4; a2=a1*14; a3=23;
12、scanf(“%f%f%f”,&b0,&b1,&b2); printf( “%6d%6d”,a0,a1); printf( “%6d%6n”,a2,a3); printf( “%f%f%fn”,b2,b1,b0); 3 4 56 23a0 a1 a2 a3a 定義數(shù)組,定義數(shù)組, 元素個(gè)數(shù)元素個(gè)數(shù) 不能用變量不能用變量 說明:說明: (1)根據(jù)存儲類型的不同,數(shù)組有根據(jù)存儲類型的不同,數(shù)組有靜態(tài)數(shù)組靜態(tài)數(shù)組(static)和和動態(tài)數(shù)組動態(tài)數(shù)組(auto)之分;)之分; (2)根據(jù)定義的位置不同根據(jù)定義的位置不同:在函數(shù)內(nèi)部定義的數(shù)組,稱為在函數(shù)內(nèi)部定義的數(shù)組,稱為內(nèi)部數(shù)
13、組內(nèi)部數(shù)組。在函數(shù)外部定義的數(shù)組,稱為在函數(shù)外部定義的數(shù)組,稱為外部數(shù)組外部數(shù)組。 (3)賦值語句和輸入語句均可使數(shù)組中的元素賦初值,賦值語句和輸入語句均可使數(shù)組中的元素賦初值,但占用運(yùn)行時(shí)間。但占用運(yùn)行時(shí)間。 簡捷的方法是在程序運(yùn)行之前使數(shù)組初始化。簡捷的方法是在程序運(yùn)行之前使數(shù)組初始化。 3. 一維數(shù)組元素的初始化維數(shù)組元素的初始化格式格式 數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)組名數(shù)組名常量表達(dá)式常量表達(dá)式初值表初值表; (1 1)只給部分元素賦初值。當(dāng)只給部分元素賦初值。當(dāng) 中值的個(gè)數(shù)少于中值的個(gè)數(shù)少于元素個(gè)數(shù)時(shí),只給前面部分元素賦值。元素個(gè)數(shù)時(shí),只給前面部分元素賦值。 例如:例如: int a10=0
14、,1,2,3,4; 表示只給表示只給a0a45個(gè)元素賦值,而后個(gè)元素賦值,而后5個(gè)元素自個(gè)元素自動賦動賦0值。值。 (2 2)只能給元素逐個(gè)賦值,不能給數(shù)組整體賦值。只能給元素逐個(gè)賦值,不能給數(shù)組整體賦值。 例如給十個(gè)元素全部賦例如給十個(gè)元素全部賦1值,只能寫為:值,只能寫為: int a10=1,1,1,1,1,1,1,1,1,1; 而不能寫為:而不能寫為:int a10=1;(3 3)如不給數(shù)組賦初值,則元素值不確定,對于如不給數(shù)組賦初值,則元素值不確定,對于static型的數(shù)組,系統(tǒng)會自動賦以型的數(shù)組,系統(tǒng)會自動賦以0或或0。(4 4)如給全部元素賦值,則在數(shù)組說明中,可以不給如給全部元
15、素賦值,則在數(shù)組說明中,可以不給出數(shù)組元素的個(gè)數(shù),編譯系統(tǒng)根據(jù)初值個(gè)數(shù)確定數(shù)組長出數(shù)組元素的個(gè)數(shù),編譯系統(tǒng)根據(jù)初值個(gè)數(shù)確定數(shù)組長度。度。 例如:例如: int a5=1,2,3,4,5; 可寫為:可寫為: int a=1,2,3,4,5; (5 5)若花括弧中提供的初值個(gè)數(shù)大于數(shù)組長度,則按若花括弧中提供的初值個(gè)數(shù)大于數(shù)組長度,則按語法錯(cuò)誤處理。語法錯(cuò)誤處理。例例10.3 求數(shù)組中求數(shù)組中8個(gè)數(shù)的最大值個(gè)數(shù)的最大值# include main( ) int i, max, a8=2, 5, 9, 6, 35, 7, 67, 49; for ( i=0; i8; i+) printf(“%6d”
16、,ai); printf( “n”); max=a0; for ( i=1; imax ) max=ai; printf( “max=%dn”,max); 例例10.4 求求Fibonaci數(shù)列的前數(shù)列的前20項(xiàng)項(xiàng) #include main() int i, fb20; fb0=1; fb1=1; for( i=1; i19; i+)fbi+1 = fbi+fbi-1; for( i=0; ia2a1a2,則,則交換;然后比較第二個(gè)數(shù)與第三個(gè)數(shù);依次類推,直至第交換;然后比較第二個(gè)數(shù)與第三個(gè)數(shù);依次類推,直至第9 9個(gè)數(shù)和第個(gè)數(shù)和第1010個(gè)數(shù)比較為止個(gè)數(shù)比較為止第一趟冒泡排序,結(jié)果最第一趟
17、冒泡排序,結(jié)果最大的數(shù)被安置在最后一個(gè)元素位置上。大的數(shù)被安置在最后一個(gè)元素位置上。(2 2)對前對前9 9個(gè)數(shù)進(jìn)行第二趟冒泡排序,結(jié)果使次大的數(shù)被個(gè)數(shù)進(jìn)行第二趟冒泡排序,結(jié)果使次大的數(shù)被安置在第安置在第9 9個(gè)元素位置。個(gè)元素位置。(3 3)重復(fù)上述過程,共經(jīng)過重復(fù)上述過程,共經(jīng)過9 9趟冒泡排序后,排序結(jié)束趟冒泡排序后,排序結(jié)束。 例例10.5用冒泡法對個(gè)數(shù)由小到大排序。排序的用冒泡法對個(gè)數(shù)由小到大排序。排序的N-S圖如圖圖如圖10.2所示。所示。輸入輸入1010個(gè)數(shù)給個(gè)數(shù)給a1 a1 到到 a10a10for (j=1; j=9;j+) for(i=1;i ai+1 圖圖 10.2mai
18、n( ) int i, j, t, a11; printf(“input 10 numbers :n”); for ( i=1; i11; i+ ) scanf( “%d”,&ai ); printf(“n”); for ( j=1; j=9; j+) for ( i=1; iai+1 ) t=ai; ai=ai+1; ai+1= t; printf(“the sorted numbers :n”); for (i=1; i11; i+) printf(“%d”,ai);10.3 10.3 多多 維維 數(shù)數(shù) 組組 1. 二維數(shù)組的定義二維數(shù)組的定義 (1 1)語句形式語句形式: : 類
19、型說明符類型說明符 數(shù)組名數(shù)組名 常量表達(dá)式常量表達(dá)式1 1 常量表達(dá)式常量表達(dá)式22 例如:例如:float a34; 定義定義a是一個(gè)是一個(gè)3x4 (3行行4列列)的數(shù)組,即的數(shù)組,即a數(shù)組有數(shù)組有12個(gè)元素。個(gè)元素。但不得寫成:但不得寫成:float a3,4; (2)(2) 二維數(shù)組中元素的排列順序?yàn)榘葱邪戳?。即存放完二維數(shù)組中元素的排列順序?yàn)榘葱邪戳?。即存放完第? 行的元素后再接著存放第行的元素后再接著存放第 2 行的元素,依次類推。行的元素,依次類推。 a00 a01 a03 a03 a10 a11 a12 a13 a20 a21 a22 a23 我們可把二維數(shù)組看作是一種特殊的
20、一維數(shù)組,它的我們可把二維數(shù)組看作是一種特殊的一維數(shù)組,它的元素又是一個(gè)一維數(shù)組。元素又是一個(gè)一維數(shù)組。例如:例如:a34可看成可看成 a0-a00 a01 a02 a03 a a1-a10 a11 a12 a13 a2-a20 a21 a22 a23a0 a2每個(gè)元素又是一個(gè)包含每個(gè)元素又是一個(gè)包含4個(gè)元素的個(gè)元素的一維數(shù)組。維數(shù)組。數(shù)組名數(shù)組名: a 代表整個(gè)數(shù)組的首地址代表整個(gè)數(shù)組的首地址a 0:數(shù)組第:數(shù)組第0行的首地址行的首地址 即第即第1個(gè)元素地址個(gè)元素地址&a00a 1:數(shù)組第數(shù)組第1行的首地址行的首地址 即第即第5個(gè)元素地址個(gè)元素地址&a10a 2:數(shù)組第數(shù)組第
21、2行的首地址行的首地址 即第即第9個(gè)元素地址個(gè)元素地址&a20(3)(3)C C允許定義多維數(shù)組。允許定義多維數(shù)組。例如:例如:float a345; 2. 二維數(shù)組元素的引用形式為:維數(shù)組元素的引用形式為:數(shù)組名數(shù)組名行下標(biāo)表達(dá)式行下標(biāo)表達(dá)式列下標(biāo)表達(dá)式列下標(biāo)表達(dá)式(1) “行下標(biāo)表達(dá)式行下標(biāo)表達(dá)式”和和“列下標(biāo)表達(dá)式列下標(biāo)表達(dá)式”,都應(yīng)是整,都應(yīng)是整型表達(dá)式或符號常量。型表達(dá)式或符號常量。(2) “行下標(biāo)表達(dá)式行下標(biāo)表達(dá)式”和和“列下標(biāo)表達(dá)式列下標(biāo)表達(dá)式”的值,都應(yīng)的值,都應(yīng)在已定義數(shù)組大小的范圍內(nèi)。在已定義數(shù)組大小的范圍內(nèi)。假設(shè)有數(shù)組假設(shè)有數(shù)組x34,則可用的行下標(biāo)范圍為,則可用
22、的行下標(biāo)范圍為02,列下,列下標(biāo)范圍為標(biāo)范圍為03。(3) 對基本數(shù)據(jù)類型的變量所能進(jìn)行的操作,也都適合對基本數(shù)據(jù)類型的變量所能進(jìn)行的操作,也都適合于相同數(shù)據(jù)類型的于相同數(shù)據(jù)類型的二維數(shù)組元素。維數(shù)組元素。 3. 二維數(shù)組的初始化二維數(shù)組的初始化 (1)(1) 按行給二維數(shù)組賦初值。如按行給二維數(shù)組賦初值。如: static int a34 =1,2,3,4,5,6,7,8,9,10,11,12; 這種方法比較直觀,一行對一行,不易遺漏,易于檢查。這種方法比較直觀,一行對一行,不易遺漏,易于檢查。 (2)(2) 順序按行按列給二維數(shù)組賦初值順序按行按列給二維數(shù)組賦初值。如:。如: static
23、 int a34=1,2,3,4,5,6,7,8,9,10,11,12; (3) 可以對部分元素賦初值可以對部分元素賦初值。如:。如: static int a34=1,5,9; static int a34=1,0,6,0,0,11; static int a34=1,5,6; static int a34=1, ,9; 注意:所賦給的值是按行按列對號入座的。注意:所賦給的值是按行按列對號入座的。 (4) 對二維數(shù)組的全部元素賦初值時(shí),可以不指定第對二維數(shù)組的全部元素賦初值時(shí),可以不指定第一維的長度,但不得省去第二維的長度。一維的長度,但不得省去第二維的長度。如:如: static int
24、a34=1,2,3,4,5,6,7,8,9,10,11,12; 可以寫成:可以寫成: static int a 4=1,2,3,4,5,6,7,8,9,10,11,12; 同樣,同樣, static int a 4=0,0,3, ,0,10; 也是正確的。也是正確的。 例例10.6 給一個(gè)給一個(gè)23的的2維數(shù)組各元素賦值,并輸出全部維數(shù)組各元素賦值,并輸出全部元素的值。元素的值。 #include stdio.h main() int i, j, a23;/*定義數(shù)組定義數(shù)組array*/ for( i=0; i2; i+ ) /*外循環(huán)控制行數(shù)外循環(huán)控制行數(shù)*/ for( j=0; j3;
25、j+) /*內(nèi)循環(huán)控制列數(shù)內(nèi)循環(huán)控制列數(shù)*/ scanf( “%d”, &aij ); printf(n); for( i=0;i2;i+ ) for( j=0;j3;j+ ) printf( %dt,arrayij ); printf(n); 例10.7 輸出一個(gè)輸出一個(gè)3 4數(shù)組中每行中的最大元素之值及其位置。數(shù)組中每行中的最大元素之值及其位置。main( ) int i, j, c, max ; static int a34=6,-5,11,3,8,9,4,7,2,13,1,-10; for (i=0; i=2; i+) max=a i0; c=0; for ( j=0; jma
26、x) max=ai j; c=j; printf(“max=%2d,row=%d,colum=%dn”,max,i+1,c+1); 輸出結(jié)果輸出結(jié)果: max=11, row=1, colum=3 max= 9, row=2, colum=2 max=13, row=3, colum=2 1 1字符數(shù)組的定義字符數(shù)組的定義 一維字符數(shù)組一維字符數(shù)組,用于存儲和處理用于存儲和處理1 1個(gè)字符串,其定義個(gè)字符串,其定義格式與格式與1 1維數(shù)值數(shù)組一樣。維數(shù)值數(shù)組一樣。 二維字符數(shù)組二維字符數(shù)組,用于同時(shí)存儲和處理多個(gè)字符串,用于同時(shí)存儲和處理多個(gè)字符串,其定義格式與其定義格式與2 2維數(shù)值數(shù)組一樣
27、。維數(shù)值數(shù)組一樣。 char s18, s2312; 2 2字符數(shù)組的初始化字符數(shù)組的初始化 字符數(shù)組的初始化,可以通過為每個(gè)數(shù)組元素指定字符數(shù)組的初始化,可以通過為每個(gè)數(shù)組元素指定初值字符來實(shí)現(xiàn)。例如:初值字符來實(shí)現(xiàn)。例如: char s38= ” asdfggh ” ; 10.4 10.4 字符數(shù)組與字符串字符數(shù)組與字符串char s48= a, b, c, d, e ; static char d33 = , , , , ,;3字符串及其結(jié)束標(biāo)志字符串及其結(jié)束標(biāo)志 字符串,是指若干有效字符的序列。字符串,是指若干有效字符的序列。 C C語言中的字符串,可以包括字母、數(shù)字、專用語言中的字符
28、串,可以包括字母、數(shù)字、專用字符、轉(zhuǎn)義字符等。字符、轉(zhuǎn)義字符等。 C C語言規(guī)定:以語言規(guī)定:以 0 作為字符串作為字符串結(jié)束標(biāo)志結(jié)束標(biāo)志 。 0 代表代表ASCIIASCII碼為碼為0 0的字符,表示一個(gè)空操作,的字符,表示一個(gè)空操作,只起一個(gè)標(biāo)志作用。只起一個(gè)標(biāo)志作用。 在在 0 前面的字符的個(gè)數(shù)為該字符串的有效長前面的字符的個(gè)數(shù)為該字符串的有效長度。度。 說明:說明: 由于系統(tǒng)在存儲字符串常量時(shí),會在串尾自動由于系統(tǒng)在存儲字符串常量時(shí),會在串尾自動加上加上1 1個(gè)結(jié)束標(biāo)志,所以無需人為地再加個(gè)結(jié)束標(biāo)志,所以無需人為地再加1 1個(gè)。個(gè)。 結(jié)束標(biāo)志在字符數(shù)組中也要結(jié)束標(biāo)志在字符數(shù)組中也要占用
29、一個(gè)元素占用一個(gè)元素的存的存儲空間,因此在說明字符數(shù)組長度時(shí),至少為字符儲空間,因此在說明字符數(shù)組長度時(shí),至少為字符串所需長度加串所需長度加1 1。 字符數(shù)組并不要求它的最后一定要加字符數(shù)組并不要求它的最后一定要加00。是否加是否加00,完全視需要而定。,完全視需要而定。 4.字符數(shù)組的輸入輸出字符數(shù)組的輸入輸出 (1 1)用用“%c”格式符逐個(gè)的輸入或輸出字符數(shù)組的字符。格式符逐個(gè)的輸入或輸出字符數(shù)組的字符。 for(i=0;i11;i+) scanf( %s, ai ); for(i=0;i11;i+) printf( %c,ai ); 輸出數(shù)組單個(gè)元素的數(shù)值,要指出元素的下標(biāo)。輸出數(shù)組單
30、個(gè)元素的數(shù)值,要指出元素的下標(biāo)。 (2 2)用用“%s”格式符將整個(gè)字符串一次輸入或輸出。格式符將整個(gè)字符串一次輸入或輸出。 printf(“%s”,c); 中中c是字符數(shù)組名,不是數(shù)組元素名。是字符數(shù)組名,不是數(shù)組元素名。 scanf( %s, ai ); 輸入或輸出時(shí)輸入或輸出時(shí), ,并不輸入或輸出結(jié)束符并不輸入或輸出結(jié)束符00。 (3)字符數(shù)組的輸出字符數(shù)組的輸出 在用在用printf函數(shù)輸出字符串時(shí),當(dāng)遇到函數(shù)輸出字符串時(shí),當(dāng)遇到00時(shí)就停止輸出,時(shí)就停止輸出,系統(tǒng)不輸出字符的定界符。系統(tǒng)不輸出字符的定界符。 如果字符數(shù)組的長度大于字符串的實(shí)際長度,也只輸出到如果字符數(shù)組的長度大于字符
31、串的實(shí)際長度,也只輸出到0為止。為止。 如果字符數(shù)組中有多個(gè)如果字符數(shù)組中有多個(gè)0 ,則遇到第一個(gè),則遇到第一個(gè)0時(shí)停止輸時(shí)停止輸出。出。 puts( )函數(shù)將一個(gè)以函數(shù)將一個(gè)以0結(jié)束的字符串輸出到終端,結(jié)束的字符串輸出到終端,且字符串中可以包含轉(zhuǎn)義字符。如:且字符串中可以包含轉(zhuǎn)義字符。如: static char str = “ChinanBeijing”; puts(str); 輸出輸出: China Beijing (4 4)字符數(shù)組的輸入字符數(shù)組的輸入 scanf( “%s”,c ); ; c為字符數(shù)組名,輸入一個(gè)字符串,為字符數(shù)組名,輸入一個(gè)字符串,以回車鍵而不必以結(jié)束符以回車鍵而不
32、必以結(jié)束符00結(jié)束輸入,系統(tǒng)會自動加結(jié)束輸入,系統(tǒng)會自動加上一個(gè)結(jié)束符上一個(gè)結(jié)束符00。 同時(shí)字符數(shù)組名同時(shí)字符數(shù)組名 c 前也不再加地址符前也不再加地址符& &。 若用一個(gè)若用一個(gè)scanf 函數(shù)輸入多個(gè)字符串,則以空格作為函數(shù)輸入多個(gè)字符串,則以空格作為字符串之間的分隔。字符串之間的分隔。 函數(shù):函數(shù):gets( (字符數(shù)組字符數(shù)組) ) 功能:從標(biāo)準(zhǔn)輸入設(shè)備功能:從標(biāo)準(zhǔn)輸入設(shè)備( (stdin) )鍵盤上,讀取鍵盤上,讀取1 1個(gè)字符個(gè)字符串(可以包含空格),并將其存儲到字符數(shù)組中串(可以包含空格),并將其存儲到字符數(shù)組中 例例10.8 多種方法輸入輸出字符串多種方法輸入
33、輸出字符串 #includemain() char str112, str212, str312; int i; for(i=0;i12;i+)scanf(%c,&str2i); for(i=0;i12;i+)printf(%c,str2i); scanf(%s,str3); printf(%s,str3); gets(str1); puts(str1); 例例10.9 二維字符數(shù)組的改變二維字符數(shù)組的改變#include #include main() int i; char a74=sun,mon,tue,wed, thu,wen,sat; printf(Result is:n);
34、 a03=& a23=& a53=& for ( i=0; i=a&c=A&c=Z) return(1); else return(0); main() int i,num=0; char str255; printf(Input a string: ); gets(str); for(i=0;stri!=0;i+) if ( isalp(stri) ) num+; puts(str); printf(num=%dn,num); getch(); 3 3拷貝字符串拷貝字符串 strcpy()函數(shù)函數(shù)(1 1)調(diào)用方式:調(diào)用方式:strcpy( (字符數(shù)組
35、字符數(shù)組, , 字符串字符串) ) 其中其中“字符串字符串”可以是串常量或字符數(shù)組。可以是串常量或字符數(shù)組。(2 2)函數(shù)功能:將函數(shù)功能:將“字符串字符串”完整地復(fù)制到完整地復(fù)制到“字符數(shù)字符數(shù)組組”中,字符數(shù)組中原有內(nèi)容被覆蓋。中,字符數(shù)組中原有內(nèi)容被覆蓋。(3 3)使用說明使用說明1 1)字符數(shù)組必須定義得足夠大,以便容納復(fù)制過來的)字符數(shù)組必須定義得足夠大,以便容納復(fù)制過來的字符串。連同結(jié)束標(biāo)志字符串。連同結(jié)束標(biāo)志00一起復(fù)制。一起復(fù)制。2 2)不能用賦值運(yùn)算符)不能用賦值運(yùn)算符“”將一個(gè)字符串直接賦值給將一個(gè)字符串直接賦值給一個(gè)字符數(shù)組,只能用一個(gè)字符數(shù)組,只能用strcpy()函數(shù)
36、來處理。函數(shù)來處理。#include main( ) int i; char name16=pear; char name213=Apple&Banana; printf(Result is:n); printf(1:name1-%sn, name1); printf(2:name2-%sn, name2); strcpy(name2,name1); printf (“3:name1-%sn, name1); printf (“4:name2-%sn, name2); printf (“5:name1-); for (i=0;i=11;i+) printf(%c,name2i); 例例
37、10.11 10.11 字符拷貝函數(shù)字符拷貝函數(shù) strcpy ()進(jìn)行字符串復(fù)制進(jìn)行字符串復(fù)制 將將name1中的中的字符串連同字符串連同0一一 起復(fù)制到起復(fù)制到name2 復(fù)復(fù)制制后后Name1 p e ar 0Name2 P e ar& B a n an a 00Name1 p e ar 0Name2A p pl& B a n an a 0e復(fù)復(fù)制制前前運(yùn)行結(jié)果如下運(yùn)行結(jié)果如下:Result is:1:name1-pear2:name2-Apple&Banana3:name1-pear4:name2-pear5:name1- pear &Banana 4連
38、接字符串連接字符串strcat()()函數(shù)函數(shù)(1 1)調(diào)用方式:調(diào)用方式:strcat(字符數(shù)組字符數(shù)組, , 字符串字符串) )(2 2)函數(shù)功能:函數(shù)功能: 把把“字符串字符串”連接到連接到“字符數(shù)組字符數(shù)組”中的字符串尾端,中的字符串尾端,并存儲于并存儲于“字符數(shù)組字符數(shù)組”中。中?!白址麛?shù)組字符數(shù)組”中原來的結(jié)束標(biāo)中原來的結(jié)束標(biāo)志,被志,被“字符串字符串”的第一個(gè)字符覆蓋,而的第一個(gè)字符覆蓋,而“字符串字符串”在操在操作中未被修改。作中未被修改。(3 3)使用說明使用說明: : 1 1)由于沒有邊界檢查,要保證)由于沒有邊界檢查,要保證“字符數(shù)組字符數(shù)組”定義得定義得足夠大,以便容納
39、連接后的目標(biāo)字符串足夠大,以便容納連接后的目標(biāo)字符串 2 2)連接前兩個(gè)字符串都有結(jié)束標(biāo)志)連接前兩個(gè)字符串都有結(jié)束標(biāo)志00,連接后,連接后“字符數(shù)組字符數(shù)組”中存儲的字符串的結(jié)束標(biāo)志中存儲的字符串的結(jié)束標(biāo)志00被舍棄,只被舍棄,只在目標(biāo)串的最后保留一個(gè)在目標(biāo)串的最后保留一個(gè)00。例例10.12 字符串連接。字符串連接。#include main() int i; char name113=pear; char name26=apple; printf(Result is:n); printf(1-%sn,name1); strcat(name1,name2); printf(2-%sn,na
40、me1); for (i=0; name1i!=0 ;i+)printf(%c,name1i); Name1 P e a r0l0 Name2 A p pe Name1 P e a rp p l e 0A運(yùn)行結(jié)果:運(yùn)行結(jié)果:Result is:1-pear2-PearApplePearApple5字符串比較字符串比較strcmp()()函數(shù)函數(shù)(1 1)調(diào)用方式:調(diào)用方式:strcmp( (字符串字符串1 ,1 ,字符串字符串2)2)其中其中“字符串字符串”可以是串常量,也可以是可以是串常量,也可以是1 1維字符數(shù)組。維字符數(shù)組。(2 2)函數(shù)功能:比較兩個(gè)字符串的大小。函數(shù)功能:比較兩個(gè)字符
41、串的大小。如果:字符串如果:字符串1= =1= =字符串字符串2 2,函數(shù)返回值等于,函數(shù)返回值等于0 0; 字符串字符串111字符串字符串2 2,函數(shù)返回值正整數(shù)。,函數(shù)返回值正整數(shù)。(3 3)使用說明使用說明1 1)如果一個(gè)字符串是另一個(gè)字符串從頭開始的子串,則)如果一個(gè)字符串是另一個(gè)字符串從頭開始的子串,則母串為大。母串為大。2 2)不能使用關(guān)系運(yùn)算符)不能使用關(guān)系運(yùn)算符“”來比較兩個(gè)字符串,只來比較兩個(gè)字符串,只能用能用strcmp() 函數(shù)來處理。函數(shù)來處理。例例10.13 gets 函數(shù)和函數(shù)和 strcmp 函數(shù)的應(yīng)用。函數(shù)的應(yīng)用。#include stdio.hmain() c
42、har passstr80; int i=0; while(1) clrscr(); printf(請輸入密碼請輸入密碼n); gets(passstr); /*輸入密碼輸入密碼*/ if (strcmp(passstr,“password”)!=0) printf(口令錯(cuò)誤,按任意鍵繼續(xù)口令錯(cuò)誤,按任意鍵繼續(xù)); else break; /*輸入正確的密碼,中止循環(huán)輸入正確的密碼,中止循環(huán)*/ getch(); i+; if(i=3) exit(0); /*輸入三次錯(cuò)誤密碼退出程序輸入三次錯(cuò)誤密碼退出程序*/ fun(); /*輸入正確密碼所進(jìn)入的程序段輸入正確密碼所進(jìn)入的程序段*/ 字符串
43、長度函數(shù)字符串長度函數(shù)strlen 格式格式:strlen(字符數(shù)組字符數(shù)組) 作用:測試字符串長度作用:測試字符串長度 函數(shù)值:為字符串的實(shí)際長度,不包括函數(shù)值:為字符串的實(shí)際長度,不包括00在內(nèi)。在內(nèi)。 例如例如: strlen(“china”); 結(jié)果是結(jié)果是5。 若改成若改成: char str10=“china”; strlen(str); 結(jié)果也是結(jié)果也是5,不要誤認(rèn)為是,不要誤認(rèn)為是10或是或是6。 字符串小寫函數(shù)字符串小寫函數(shù)strlwr 格式:格式:strlwr(字符串字符串) 作用:將字符串的大寫字母轉(zhuǎn)換成小寫字母。作用:將字符串的大寫字母轉(zhuǎn)換成小寫字母。 請給出下面程序結(jié)
44、果。請給出下面程序結(jié)果。 main() char str1=CHINA; printf(n%s,strlwr(str1); 運(yùn)行結(jié)果運(yùn)行結(jié)果:china 字符串大寫函數(shù)字符串大寫函數(shù)strupr 格式格式:strupr(字符串字符串) 作用:將字符串中的小寫字母轉(zhuǎn)換成大寫字母。作用:將字符串中的小寫字母轉(zhuǎn)換成大寫字母。 1. 1.數(shù)組元素作函數(shù)參數(shù)數(shù)組元素作函數(shù)參數(shù) 用數(shù)組元素作實(shí)參時(shí),由于數(shù)組元素與普通變用數(shù)組元素作實(shí)參時(shí),由于數(shù)組元素與普通變量具有相同的地位和作用量具有相同的地位和作用; ; 對數(shù)組元素的處理是和普通變量一樣的對數(shù)組元素的處理是和普通變量一樣的。 10.6 10.6 數(shù)組作
45、為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù) 例例10.14c 數(shù)組元素作為實(shí)參數(shù)組元素作為實(shí)參 #include float fun( float a,float b,float c); main() float b3; float ave; b0=21.3; b1=b0/3; b2=8.2; printf(b0=%4.1fn b1=%4.1fn” ,b0, b1); printf( b2=%4.1fn”, b2 ); ave=fun( b0, b1, b2 ); printf( ave=%4.1fn,ave); printf(b0=%4.1fnb1=%4.1fn”,b0,b1); printf( b2=%4
46、.1fn”,b2); getch(); 實(shí)參為數(shù)實(shí)參為數(shù) 組元素作組元素作 float fun(float a,float b,float c) float sum, aver; sum=a+b+c; a=a+5.5 b=b+5.5; c=c+5.5; aver=sum/3.0; printf( a=%4.1fn” ,a ); printf( b=%4.1fn” ,b ); printf( c=%4.1fn” ,c ); return (aver); 用數(shù)組元素作實(shí)用數(shù)組元素作實(shí)參時(shí),只要數(shù)組類型參時(shí),只要數(shù)組類型和函數(shù)的形參類型一和函數(shù)的形參類型一致即可,并不要求函致即可,并不要求函數(shù)的形參
47、也是下標(biāo)變數(shù)的形參也是下標(biāo)變量。量。 換句話說,對換句話說,對數(shù)組元素的處理是按數(shù)組元素的處理是按普通變量對待普通變量對待的。的。 2. 2. 數(shù)組名作函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù) 在用在用數(shù)組名作函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù)時(shí),不是把實(shí)參數(shù)組的時(shí),不是把實(shí)參數(shù)組的每一個(gè)元素的值都賦予形參數(shù)組的各個(gè)元素。每一個(gè)元素的值都賦予形參數(shù)組的各個(gè)元素。 因?yàn)閷?shí)際上形參數(shù)組并不存在,編譯系統(tǒng)不為因?yàn)閷?shí)際上形參數(shù)組并不存在,編譯系統(tǒng)不為形參數(shù)組分配內(nèi)存。形參數(shù)組分配內(nèi)存。因?yàn)閿?shù)組名就是數(shù)組的首地址,所以在數(shù)組名因?yàn)閿?shù)組名就是數(shù)組的首地址,所以在數(shù)組名作函數(shù)參數(shù)時(shí)是把實(shí)作函數(shù)參數(shù)時(shí)是把實(shí)參數(shù)組的首地址賦予形參數(shù)組參數(shù)組的首地址賦予形參數(shù)組名名(即地址傳遞)。(即地址傳遞)。使用說明:使用說明:(1 1)數(shù)組名作為函數(shù)的形參和實(shí)參數(shù)組名作為函數(shù)的形參和實(shí)參,應(yīng)該在調(diào)用,應(yīng)該在調(diào)用函數(shù)和被調(diào)用函數(shù)中分別定義數(shù)組,函數(shù)和被調(diào)用函數(shù)中分別定義數(shù)組,要求形參和相對應(yīng)要求形參和相對應(yīng)的實(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 紡織品設(shè)計(jì)師的職業(yè)發(fā)展道路與挑戰(zhàn)研究試題及答案
- 餐飲合同協(xié)議書范本
- 雜工合同協(xié)議書
- 施工合同協(xié)議書合同編號
- 項(xiàng)目協(xié)議書合同
- 快遞合資合同協(xié)議書
- 馬口鐵合同協(xié)議書
- 購買肥牛合同協(xié)議書
- 拆除圍墻合同協(xié)議書
- 合伙開公司合同協(xié)議書
- 00510秘書實(shí)務(wù)-自考整合版
- 護(hù)理研究中的偏倚及控制
- 小學(xué)生的齲齒預(yù)防ppt課件
- [復(fù)習(xí)]邊坡客土吹附施工方案
- 門禁一卡通系統(tǒng)解決方案
- 沖壓試題庫及答案文檔
- 煤礦機(jī)電運(yùn)輸專業(yè)質(zhì)量標(biāo)準(zhǔn)化管理制度
- 華為保密制度范文
- 凍庫溫度記錄表
- 工程款支付審核記錄表
- 成套開關(guān)柜GGD樣本
評論
0/150
提交評論