版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 教學內容教學內容: : 10.1 10.1 數組的概念數組的概念 10.2 10.2 一維數組一維數組 10.3 10.3 多維數組多維數組 10.4 10.4 字符數組與字符串字符數組與字符串 10.5 10.5 字符串處理函數字符串處理函數 10.6 10.6 數組作為函數參數數組作為函數參數第第10 10 章章 數組與字符串處理數組與字符串處理 教學要求教學要求: : 1 1掌握數組的定義,及其數組元素的下標掌握數組的定義,及其數組元素的下標表示方法。表示方法。 2 2掌握數組的初始化方法。掌握數組元素掌握數組的初始化方法。掌握數組元素的引用,數組數據輸入的引用,數組數據輸入/ /輸出
2、方法。輸出方法。 3 3掌握數組在程序設計中的應用,以及有掌握數組在程序設計中的應用,以及有關的算法,例如排序算法等。關的算法,例如排序算法等。 4 4掌握字符數組的應用方法。掌握字符數組的應用方法。 5 5掌握字符串處理函數的使用。掌握字符串處理函數的使用。第第10 10 章章 數組與字符串處理數組與字符串處理 數組數組是最簡單的一種構造類型。是最簡單的一種構造類型。 構造類型構造類型是由基本類型按一定規(guī)則構造而成的,一是由基本類型按一定規(guī)則構造而成的,一個構造類型數據可以分解為多個構造元素,這些元素可個構造類型數據可以分解為多個構造元素,這些元素可以是基本類型,也可以是構造類型。以是基本類
3、型,也可以是構造類型。 一個數組可以分解為多個數組元素,這些數組元素一個數組可以分解為多個數組元素,這些數組元素可以是基本類型或是構造類型??梢允腔绢愋突蚴菢嬙祛愋?。 按數組元素的類型不同,數組又可分為按數組元素的類型不同,數組又可分為數值數組數值數組、字符數組字符數組、指針數組指針數組、結構數組結構數組等各種類別。等各種類別。 10.1 10.1 數數 組組 的的 概概 念念 在實際應用中,人們不可避免的要遇到在實際應用中,人們不可避免的要遇到“批量數據的批量數據的存儲和處理存儲和處理”問題。問題。 例如:在學生成績管理系統(tǒng)中,可能需要對一個班例如:在學生成績管理系統(tǒng)中,可能需要對一個班
4、30 30 名學生的成績進行輸入,計算出平均分,然后輸出所有高名學生的成績進行輸入,計算出平均分,然后輸出所有高于平均分的成績。于平均分的成績。 為了便于處理,對于這樣一組有著內在聯(lián)系、具有相為了便于處理,對于這樣一組有著內在聯(lián)系、具有相同性質的數據,可以按順序組織起來,共用一個統(tǒng)一的名同性質的數據,可以按順序組織起來,共用一個統(tǒng)一的名字,即:數組名。字,即:數組名。數組中各個數據的區(qū)分用數組名帶下標數組中各個數據的區(qū)分用數組名帶下標的形式表示。的形式表示。 我們可以為我們可以為 30 30 名學生的成績建立一個名為名學生的成績建立一個名為 s s 的數組,的數組,30 30 個成績順序存放在
5、個成績順序存放在 s0s0s29s29這這 30 30 個帶下標的變量個帶下標的變量中,中, 1 1一維數組的定義一維數組的定義 定義的語句形式:定義的語句形式: 類型說明符類型說明符 數組名數組名 常量表達式常量表達式 (1 1)“數據類型數據類型”是指數組元素的數據類型。是指數組元素的數據類型。 (2 2) 數組名定名規(guī)則和變量名相同。數組名定名規(guī)則和變量名相同。 (3 3) 常量表達式常量表達式, , 必須用方括號括起來。它是一必須用方括號括起來。它是一個整型值個整型值, , 指定數組元素的個數,即數組的長度。指定數組元素的個數,即數組的長度。 常量表達式其中可以包含常數和符號常量,但不
6、能常量表達式其中可以包含常數和符號常量,但不能包含變量。包含變量。 10.2 10.2 一一 維維 數數 組組 例如例如: : int a10; 上述說明語句,定義了一個上述說明語句,定義了一個整型一維數組。整型一維數組。 數組名稱:數組名稱:a ,有有1010個數組元素;系統(tǒng)分配個數組元素;系統(tǒng)分配1010個個連連續(xù)的存儲單元續(xù)的存儲單元。 數組的數組的數據類型是:數據類型是:int 每一個數組元素的存儲單每一個數組元素的存儲單元占用元占用2 2個字節(jié)個字節(jié), , 存放一個整型值。存放一個整型值。 (4)(4) 數組元素的下標,是元素相對于數組起始地址的數組元素的下標,是元素相對于數組起始地
7、址的偏移量,所以從偏移量,所以從0 0開始順序編號。開始順序編號。 上述上述數組的數組的數組元素為:數組元素為: a0, a1, a2, a9,沒有沒有a10a10。 (5 5)數組名表示的是一個地址常量,它代表整個數組數組名表示的是一個地址常量,它代表整個數組的首地址。同一數組中的所有元素按其下標順序占用一段的首地址。同一數組中的所有元素按其下標順序占用一段連續(xù)的存儲單元連續(xù)的存儲單元. . a 表示數組起始地址表示數組起始地址 & &a0 表示第表示第1 1個數組元素的地址,個數組元素的地址, 與數組起始地址相同與數組起始地址相同 & &a1 表示第表示第2
8、 2個數組元素的地址,個數組元素的地址, 等于:第等于:第1 1個數組元素的地址個數組元素的地址2 2 (6)6) 不允許對數組進行動態(tài)定義。以下作法是錯誤的不允許對數組進行動態(tài)定義。以下作法是錯誤的。 int n; scanf(“%d”,&n); int an; (7)(7) 數組數組說明語句說明語句一次可定義幾個數組一次可定義幾個數組, , 形式如下:形式如下: 數據類型數據類型 數組名數組名 常量表達式常量表達式, , 數組名數組名22常量表達常量表達式式22 ; 例如:例如: int a1 4 , a2 5 ; 上述說明語句,定義了上述說明語句,定義了兩個整型一維數組。兩個整型
9、一維數組。 數組名為數組名為:, a2 a1 一維數組有一維數組有4個數組元素個數組元素: a10, a11, a12, a13 a2 一維數組有一維數組有5個數組元素個數組元素: a20, a21, a22, a23 , a24 數組元素的數值類型均為:數組元素的數值類型均為: 整型(整型(int ) a1, a2, 分別代表各自數組的起始地址分別代表各自數組的起始地址 &a10 &a11 &a12 &a13 為各數組元素的地址為各數組元素的地址 2. 數組元素的引用數組元素的引用 引用數組元素的形式:引用數組元素的形式: 數組名數組名下標表達式下標表達式 (
10、1)(1) “ “下標表達式下標表達式”可以是任何非負整型數據,取值范圍可以是任何非負整型數據,取值范圍是是0(元素個數(元素個數-1)。)。 int a8; 數組元數:數組元數:a0 a7 (2) (2)在在C語言中,數組作為語言中,數組作為1個整體,不能參加數據運算,個整體,不能參加數據運算,只能對單個的元素進行處理。只能對單個的元素進行處理。 (3)(3)下標不能越界。下標不能越界。 (4)(4)下標變量和我們前面的簡單變量具有相同的地位和作下標變量和我們前面的簡單變量具有相同的地位和作用,可以象使用簡單變量一樣使用。用,可以象使用簡單變量一樣使用。例例10.1數組元素的引用。數組元素的
11、引用。 main() int i,a10; for(i=0;i=0;i-) printf(%d,ai); 本例中第一個循環(huán)語句給本例中第一個循環(huán)語句給a a數組各元素賦值,然后用第二數組各元素賦值,然后用第二個循環(huán)語句,輸出數組元素個循環(huán)語句,輸出數組元素a9 a0的的各個數值。各個數值。 輸出結果輸出結果: 9 8 7 6 5 4 3 2 1 0數組元素引用數組元素引用可以用變量可以用變量 定義數組,定義數組,元素個數不元素個數不能用變量能用變量例例10.2 數組元素引用數組元素引用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 定義數組,定義數組, 元素個數元素個數 不能用變量不能用變量 說明:說明: (1)根據存儲類型的不同,數組有根據存儲類型的不同,數組有靜態(tài)數組靜態(tài)數組(static)和和動態(tài)數組動態(tài)數組(auto)之分;)之分; (2)根據定義的位置不同根據定義的位置不同:在函數內部定義的數組,稱為在函數內部定義的數組,稱為內部數
13、組內部數組。在函數外部定義的數組,稱為在函數外部定義的數組,稱為外部數組外部數組。 (3)賦值語句和輸入語句均可使數組中的元素賦初值,賦值語句和輸入語句均可使數組中的元素賦初值,但占用運行時間。但占用運行時間。 簡捷的方法是在程序運行之前使數組初始化。簡捷的方法是在程序運行之前使數組初始化。 3. 一維數組元素的初始化維數組元素的初始化格式格式 數據類型數據類型 數組名數組名常量表達式常量表達式初值表初值表; (1 1)只給部分元素賦初值。當只給部分元素賦初值。當 中值的個數少于中值的個數少于元素個數時,只給前面部分元素賦值。元素個數時,只給前面部分元素賦值。 例如:例如: int a10=0
14、,1,2,3,4; 表示只給表示只給a0a45個元素賦值,而后個元素賦值,而后5個元素自個元素自動賦動賦0值。值。 (2 2)只能給元素逐個賦值,不能給數組整體賦值。只能給元素逐個賦值,不能給數組整體賦值。 例如給十個元素全部賦例如給十個元素全部賦1值,只能寫為:值,只能寫為: int a10=1,1,1,1,1,1,1,1,1,1; 而不能寫為:而不能寫為:int a10=1;(3 3)如不給數組賦初值,則元素值不確定,對于如不給數組賦初值,則元素值不確定,對于static型的數組,系統(tǒng)會自動賦以型的數組,系統(tǒng)會自動賦以0或或0。(4 4)如給全部元素賦值,則在數組說明中,可以不給如給全部元
15、素賦值,則在數組說明中,可以不給出數組元素的個數,編譯系統(tǒng)根據初值個數確定數組長出數組元素的個數,編譯系統(tǒng)根據初值個數確定數組長度。度。 例如:例如: int a5=1,2,3,4,5; 可寫為:可寫為: int a=1,2,3,4,5; (5 5)若花括弧中提供的初值個數大于數組長度,則按若花括弧中提供的初值個數大于數組長度,則按語法錯誤處理。語法錯誤處理。例例10.3 求數組中求數組中8個數的最大值個數的最大值# 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數列的前數列的前20項項 #include main() int i, fb20; fb0=1; fb1=1; for( i=1; i19; i+)fbi+1 = fbi+fbi-1; for( i=0; ia2a1a2,則,則交換;然后比較第二個數與第三個數;依次類推,直至第交換;然后比較第二個數與第三個數;依次類推,直至第9 9個數和第個數和第1010個數比較為止個數比較為止第一趟冒泡排序,結果最第一趟
17、冒泡排序,結果最大的數被安置在最后一個元素位置上。大的數被安置在最后一個元素位置上。(2 2)對前對前9 9個數進行第二趟冒泡排序,結果使次大的數被個數進行第二趟冒泡排序,結果使次大的數被安置在第安置在第9 9個元素位置。個元素位置。(3 3)重復上述過程,共經過重復上述過程,共經過9 9趟冒泡排序后,排序結束趟冒泡排序后,排序結束。 例例10.5用冒泡法對個數由小到大排序。排序的用冒泡法對個數由小到大排序。排序的N-S圖如圖圖如圖10.2所示。所示。輸入輸入1010個數給個數給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 多多 維維 數數 組組 1. 二維數組的定義二維數組的定義 (1 1)語句形式語句形式: : 類
19、型說明符類型說明符 數組名數組名 常量表達式常量表達式1 1 常量表達式常量表達式22 例如:例如:float a34; 定義定義a是一個是一個3x4 (3行行4列列)的數組,即的數組,即a數組有數組有12個元素。個元素。但不得寫成:但不得寫成:float a3,4; (2)(2) 二維數組中元素的排列順序為按行按列。即存放完二維數組中元素的排列順序為按行按列。即存放完第第1 行的元素后再接著存放第行的元素后再接著存放第 2 行的元素,依次類推。行的元素,依次類推。 a00 a01 a03 a03 a10 a11 a12 a13 a20 a21 a22 a23 我們可把二維數組看作是一種特殊的
20、一維數組,它的我們可把二維數組看作是一種特殊的一維數組,它的元素又是一個一維數組。元素又是一個一維數組。例如:例如:a34可看成可看成 a0-a00 a01 a02 a03 a a1-a10 a11 a12 a13 a2-a20 a21 a22 a23a0 a2每個元素又是一個包含每個元素又是一個包含4個元素的個元素的一維數組。維數組。數組名數組名: a 代表整個數組的首地址代表整個數組的首地址a 0:數組第:數組第0行的首地址行的首地址 即第即第1個元素地址個元素地址&a00a 1:數組第數組第1行的首地址行的首地址 即第即第5個元素地址個元素地址&a10a 2:數組第數組第
21、2行的首地址行的首地址 即第即第9個元素地址個元素地址&a20(3)(3)C C允許定義多維數組。允許定義多維數組。例如:例如:float a345; 2. 二維數組元素的引用形式為:維數組元素的引用形式為:數組名數組名行下標表達式行下標表達式列下標表達式列下標表達式(1) “行下標表達式行下標表達式”和和“列下標表達式列下標表達式”,都應是整,都應是整型表達式或符號常量。型表達式或符號常量。(2) “行下標表達式行下標表達式”和和“列下標表達式列下標表達式”的值,都應的值,都應在已定義數組大小的范圍內。在已定義數組大小的范圍內。假設有數組假設有數組x34,則可用的行下標范圍為,則可用
22、的行下標范圍為02,列下,列下標范圍為標范圍為03。(3) 對基本數據類型的變量所能進行的操作,也都適合對基本數據類型的變量所能進行的操作,也都適合于相同數據類型的于相同數據類型的二維數組元素。維數組元素。 3. 二維數組的初始化二維數組的初始化 (1)(1) 按行給二維數組賦初值。如按行給二維數組賦初值。如: static int a34 =1,2,3,4,5,6,7,8,9,10,11,12; 這種方法比較直觀,一行對一行,不易遺漏,易于檢查。這種方法比較直觀,一行對一行,不易遺漏,易于檢查。 (2)(2) 順序按行按列給二維數組賦初值順序按行按列給二維數組賦初值。如:。如: 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) 對二維數組的全部元素賦初值時,可以不指定第對二維數組的全部元素賦初值時,可以不指定第一維的長度,但不得省去第二維的長度。一維的長度,但不得省去第二維的長度。如:如: 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 給一個給一個23的的2維數組各元素賦值,并輸出全部維數組各元素賦值,并輸出全部元素的值。元素的值。 #include stdio.h main() int i, j, a23;/*定義數組定義數組array*/ for( i=0; i2; i+ ) /*外循環(huán)控制行數外循環(huán)控制行數*/ for( j=0; j3;
25、j+) /*內循環(huán)控制列數內循環(huán)控制列數*/ scanf( “%d”, &aij ); printf(n); for( i=0;i2;i+ ) for( j=0;j3;j+ ) printf( %dt,arrayij ); printf(n); 例10.7 輸出一個輸出一個3 4數組中每行中的最大元素之值及其位置。數組中每行中的最大元素之值及其位置。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); 輸出結果輸出結果: max=11, row=1, colum=3 max= 9, row=2, colum=2 max=13, row=3, colum=2 1 1字符數組的定義字符數組的定義 一維字符數組一維字符數組,用于存儲和處理用于存儲和處理1 1個字符串,其定義個字符串,其定義格式與格式與1 1維數值數組一樣。維數值數組一樣。 二維字符數組二維字符數組,用于同時存儲和處理多個字符串,用于同時存儲和處理多個字符串,其定義格式與其定義格式與2 2維數值數組一樣
27、。維數值數組一樣。 char s18, s2312; 2 2字符數組的初始化字符數組的初始化 字符數組的初始化,可以通過為每個數組元素指定字符數組的初始化,可以通過為每個數組元素指定初值字符來實現。例如:初值字符來實現。例如: char s38= ” asdfggh ” ; 10.4 10.4 字符數組與字符串字符數組與字符串char s48= a, b, c, d, e ; static char d33 = , , , , ,;3字符串及其結束標志字符串及其結束標志 字符串,是指若干有效字符的序列。字符串,是指若干有效字符的序列。 C C語言中的字符串,可以包括字母、數字、專用語言中的字符
28、串,可以包括字母、數字、專用字符、轉義字符等。字符、轉義字符等。 C C語言規(guī)定:以語言規(guī)定:以 0 作為字符串作為字符串結束標志結束標志 。 0 代表代表ASCIIASCII碼為碼為0 0的字符,表示一個空操作,的字符,表示一個空操作,只起一個標志作用。只起一個標志作用。 在在 0 前面的字符的個數為該字符串的有效長前面的字符的個數為該字符串的有效長度。度。 說明:說明: 由于系統(tǒng)在存儲字符串常量時,會在串尾自動由于系統(tǒng)在存儲字符串常量時,會在串尾自動加上加上1 1個結束標志,所以無需人為地再加個結束標志,所以無需人為地再加1 1個。個。 結束標志在字符數組中也要結束標志在字符數組中也要占用
29、一個元素占用一個元素的存的存儲空間,因此在說明字符數組長度時,至少為字符儲空間,因此在說明字符數組長度時,至少為字符串所需長度加串所需長度加1 1。 字符數組并不要求它的最后一定要加字符數組并不要求它的最后一定要加00。是否加是否加00,完全視需要而定。,完全視需要而定。 4.字符數組的輸入輸出字符數組的輸入輸出 (1 1)用用“%c”格式符逐個的輸入或輸出字符數組的字符。格式符逐個的輸入或輸出字符數組的字符。 for(i=0;i11;i+) scanf( %s, ai ); for(i=0;i11;i+) printf( %c,ai ); 輸出數組單個元素的數值,要指出元素的下標。輸出數組單
30、個元素的數值,要指出元素的下標。 (2 2)用用“%s”格式符將整個字符串一次輸入或輸出。格式符將整個字符串一次輸入或輸出。 printf(“%s”,c); 中中c是字符數組名,不是數組元素名。是字符數組名,不是數組元素名。 scanf( %s, ai ); 輸入或輸出時輸入或輸出時, ,并不輸入或輸出結束符并不輸入或輸出結束符00。 (3)字符數組的輸出字符數組的輸出 在用在用printf函數輸出字符串時,當遇到函數輸出字符串時,當遇到00時就停止輸出,時就停止輸出,系統(tǒng)不輸出字符的定界符。系統(tǒng)不輸出字符的定界符。 如果字符數組的長度大于字符串的實際長度,也只輸出到如果字符數組的長度大于字符
31、串的實際長度,也只輸出到0為止。為止。 如果字符數組中有多個如果字符數組中有多個0 ,則遇到第一個,則遇到第一個0時停止輸時停止輸出。出。 puts( )函數將一個以函數將一個以0結束的字符串輸出到終端,結束的字符串輸出到終端,且字符串中可以包含轉義字符。如:且字符串中可以包含轉義字符。如: static char str = “ChinanBeijing”; puts(str); 輸出輸出: China Beijing (4 4)字符數組的輸入字符數組的輸入 scanf( “%s”,c ); ; c為字符數組名,輸入一個字符串,為字符數組名,輸入一個字符串,以回車鍵而不必以結束符以回車鍵而不
32、必以結束符00結束輸入,系統(tǒng)會自動加結束輸入,系統(tǒng)會自動加上一個結束符上一個結束符00。 同時字符數組名同時字符數組名 c 前也不再加地址符前也不再加地址符& &。 若用一個若用一個scanf 函數輸入多個字符串,則以空格作為函數輸入多個字符串,則以空格作為字符串之間的分隔。字符串之間的分隔。 函數:函數:gets( (字符數組字符數組) ) 功能:從標準輸入設備功能:從標準輸入設備( (stdin) )鍵盤上,讀取鍵盤上,讀取1 1個字符個字符串(可以包含空格),并將其存儲到字符數組中串(可以包含空格),并將其存儲到字符數組中 例例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 二維字符數組的改變二維字符數組的改變#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()函數函數(1 1)調用方式:調用方式:strcpy( (字符數組
35、字符數組, , 字符串字符串) ) 其中其中“字符串字符串”可以是串常量或字符數組??梢允谴A炕蜃址麛到M。(2 2)函數功能:將函數功能:將“字符串字符串”完整地復制到完整地復制到“字符數字符數組組”中,字符數組中原有內容被覆蓋。中,字符數組中原有內容被覆蓋。(3 3)使用說明使用說明1 1)字符數組必須定義得足夠大,以便容納復制過來的)字符數組必須定義得足夠大,以便容納復制過來的字符串。連同結束標志字符串。連同結束標志00一起復制。一起復制。2 2)不能用賦值運算符)不能用賦值運算符“”將一個字符串直接賦值給將一個字符串直接賦值給一個字符數組,只能用一個字符數組,只能用strcpy()函數
36、來處理。函數來處理。#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 字符拷貝函數字符拷貝函數 strcpy ()進行字符串復制進行字符串復制 將將name1中的中的字符串連同字符串連同0一一 起復制到起復制到name2 復復制制后后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復復制制前前運行結果如下運行結果如下:Result is:1:name1-pear2:name2-Apple&Banana3:name1-pear4:name2-pear5:name1- pear &Banana 4連
38、接字符串連接字符串strcat()()函數函數(1 1)調用方式:調用方式:strcat(字符數組字符數組, , 字符串字符串) )(2 2)函數功能:函數功能: 把把“字符串字符串”連接到連接到“字符數組字符數組”中的字符串尾端,中的字符串尾端,并存儲于并存儲于“字符數組字符數組”中。中?!白址麛到M字符數組”中原來的結束標中原來的結束標志,被志,被“字符串字符串”的第一個字符覆蓋,而的第一個字符覆蓋,而“字符串字符串”在操在操作中未被修改。作中未被修改。(3 3)使用說明使用說明: : 1 1)由于沒有邊界檢查,要保證)由于沒有邊界檢查,要保證“字符數組字符數組”定義得定義得足夠大,以便容納
39、連接后的目標字符串足夠大,以便容納連接后的目標字符串 2 2)連接前兩個字符串都有結束標志)連接前兩個字符串都有結束標志00,連接后,連接后“字符數組字符數組”中存儲的字符串的結束標志中存儲的字符串的結束標志00被舍棄,只被舍棄,只在目標串的最后保留一個在目標串的最后保留一個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運行結果:運行結果:Result is:1-pear2-PearApplePearApple5字符串比較字符串比較strcmp()()函數函數(1 1)調用方式:調用方式:strcmp( (字符串字符串1 ,1 ,字符串字符串2)2)其中其中“字符串字符串”可以是串常量,也可以是可以是串常量,也可以是1 1維字符數組。維字符數組。(2 2)函數功能:比較兩個字符串的大小。函數功能:比較兩個字符
41、串的大小。如果:字符串如果:字符串1= =1= =字符串字符串2 2,函數返回值等于,函數返回值等于0 0; 字符串字符串111字符串字符串2 2,函數返回值正整數。,函數返回值正整數。(3 3)使用說明使用說明1 1)如果一個字符串是另一個字符串從頭開始的子串,則)如果一個字符串是另一個字符串從頭開始的子串,則母串為大。母串為大。2 2)不能使用關系運算符)不能使用關系運算符“”來比較兩個字符串,只來比較兩個字符串,只能用能用strcmp() 函數來處理。函數來處理。例例10.13 gets 函數和函數和 strcmp 函數的應用。函數的應用。#include stdio.hmain() c
42、har passstr80; int i=0; while(1) clrscr(); printf(請輸入密碼請輸入密碼n); gets(passstr); /*輸入密碼輸入密碼*/ if (strcmp(passstr,“password”)!=0) printf(口令錯誤,按任意鍵繼續(xù)口令錯誤,按任意鍵繼續(xù)); else break; /*輸入正確的密碼,中止循環(huán)輸入正確的密碼,中止循環(huán)*/ getch(); i+; if(i=3) exit(0); /*輸入三次錯誤密碼退出程序輸入三次錯誤密碼退出程序*/ fun(); /*輸入正確密碼所進入的程序段輸入正確密碼所進入的程序段*/ 字符串
43、長度函數字符串長度函數strlen 格式格式:strlen(字符數組字符數組) 作用:測試字符串長度作用:測試字符串長度 函數值:為字符串的實際長度,不包括函數值:為字符串的實際長度,不包括00在內。在內。 例如例如: strlen(“china”); 結果是結果是5。 若改成若改成: char str10=“china”; strlen(str); 結果也是結果也是5,不要誤認為是,不要誤認為是10或是或是6。 字符串小寫函數字符串小寫函數strlwr 格式:格式:strlwr(字符串字符串) 作用:將字符串的大寫字母轉換成小寫字母。作用:將字符串的大寫字母轉換成小寫字母。 請給出下面程序結
44、果。請給出下面程序結果。 main() char str1=CHINA; printf(n%s,strlwr(str1); 運行結果運行結果:china 字符串大寫函數字符串大寫函數strupr 格式格式:strupr(字符串字符串) 作用:將字符串中的小寫字母轉換成大寫字母。作用:將字符串中的小寫字母轉換成大寫字母。 1. 1.數組元素作函數參數數組元素作函數參數 用數組元素作實參時,由于數組元素與普通變用數組元素作實參時,由于數組元素與普通變量具有相同的地位和作用量具有相同的地位和作用; ; 對數組元素的處理是和普通變量一樣的對數組元素的處理是和普通變量一樣的。 10.6 10.6 數組作
45、為函數參數數組作為函數參數 例例10.14c 數組元素作為實參數組元素作為實參 #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(); 實參為數實參為數 組元素作組元素作 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); 用數組元素作實用數組元素作實參時,只要數組類型參時,只要數組類型和函數的形參類型一和函數的形參類型一致即可,并不要求函致即可,并不要求函數的形參
47、也是下標變數的形參也是下標變量。量。 換句話說,對換句話說,對數組元素的處理是按數組元素的處理是按普通變量對待普通變量對待的。的。 2. 2. 數組名作函數參數數組名作函數參數 在用在用數組名作函數參數數組名作函數參數時,不是把實參數組的時,不是把實參數組的每一個元素的值都賦予形參數組的各個元素。每一個元素的值都賦予形參數組的各個元素。 因為實際上形參數組并不存在,編譯系統(tǒng)不為因為實際上形參數組并不存在,編譯系統(tǒng)不為形參數組分配內存。形參數組分配內存。因為數組名就是數組的首地址,所以在數組名因為數組名就是數組的首地址,所以在數組名作函數參數時是把實作函數參數時是把實參數組的首地址賦予形參數組參數組的首地址賦予形參數組名名(即地址傳遞)。(即地址傳遞)。使用說明:使用說明:(1 1)數組名作為函數的形參和實參數組名作為函數的形參和實參,應該在調用,應該在調用函數和被調用函數中分別定義數組,函數和被調用函數中分別定義數組,要求形參和相對應要求形參和相對應的實參都必須
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論