c語言程序設計7_第1頁
c語言程序設計7_第2頁
c語言程序設計7_第3頁
c語言程序設計7_第4頁
c語言程序設計7_第5頁
已閱讀5頁,還剩48頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、共 53 頁 第 1 1 頁共 53 頁 第 2 2 頁本章要點本章要點1.1.建立數組的概念;建立數組的概念;2.2.掌握一維數組和二維數組的定義、掌握一維數組和二維數組的定義、3.3.4.4.5.5.掌握用數組進行編程的技術。掌握用數組進行編程的技術。共 53 頁 第 3 3 頁 如何處理一個班學生的學習成績?如何處理一個班學生的學習成績? 一行文字怎樣存儲?一行文字怎樣存儲? 一個矩陣怎樣存儲一個矩陣怎樣存儲 ?.一組具有一組具有相同數據類型相同數據類型的數據的的數據的 有序集合有序集合 這些數據的特點這些數據的特點:1.1.具有相同的數據類型具有相同的數據類型 2.2.使用過程中需要保

2、留原始數據使用過程中需要保留原始數據 C C語言為這些數據提供了一種語言為這些數據提供了一種構造數據類型:構造數據類型:數組。數組。共 53 頁 第 4 4 頁 數組數組是一組有序的、類型相同的數據的集合,是一組有序的、類型相同的數據的集合,這些數據被稱為這些數據被稱為數組的元素數組的元素。共 53 頁 第 5 5 頁7.2 7.2 一維數組一維數組7.2.1 7.2.1 一維數組的定義和引用一維數組的定義和引用1.一維數組的定義一維數組的定義 類型說明符類型說明符 數組名數組名 正整型常量表達式正整型常量表達式 ; ;說明:說明:l類型說明符:數組的類型。類型說明符:數組的類型。l數組名同變

3、量名命名規則相同。數組名同變量名命名規則相同。l常量表達式指明數組中元素個數,必須大于零。常量表達式指明數組中元素個數,必須大于零。可以是數值常量、符號常量和字符常量。可以是數值常量、符號常量和字符常量。例如:例如: float mark100;float mark100; char str200;char str200; int int aa1010;共 53 頁 第 6 6 頁其中:其中:markmark、strstr、a a 是數組名。是數組名。 方括號內是數組的方括號內是數組的長度長度。 下標的個數稱為數組的下標的個數稱為數組的維數維數,markmark、strstr是是一維數組、一維

4、數組、a a是二維數組。是二維數組。 數組的成員稱為數組數組的成員稱為數組元素元素。 數組元素的類型稱為該數組的數組元素的類型稱為該數組的基類型基類型。數。數組組markmark的基類型是的基類型是floatfloat,數組,數組strstr的基類型是的基類型是charchar。例如:存儲學生成績用實型數組例如:存儲學生成績用實型數組 mark100mark100, 存儲一行文字用字符數組存儲一行文字用字符數組 str200str200, 存儲一個存儲一個4 4* *6 6的矩陣用二維整型數組的矩陣用二維整型數組 a46a46。共 53 頁 第 7 7 頁說明說明: : (1) (1)數組名后

5、是用方括號數組名后是用方括號而不是圓括號而不是圓括號。 (2)(2)數組定義中的常量表達式表示數組元素個數。數組定義中的常量表達式表示數組元素個數。必必須是大于零的須是大于零的常量常量。 如:如: int a0,d(6); /*錯誤錯誤*/ int b-8; /*錯誤錯誤*/ int c2+3; /*正確正確*/(3)(3) 語言中不允許對數組的大小作語言中不允許對數組的大小作動態動態定義。定義。 數組的說明語句必須在數組的說明語句必須在可執行語句之前可執行語句之前。#define N 5int aN;int n;scanf(“%d” , &n ); int an;int n=10,a

6、n;共 53 頁 第 8 8 頁2. 一維數組的引用一維數組的引用 C 語言規定,只能引用單個數組元素,不能一次引用整個數組。語言規定,只能引用單個數組元素,不能一次引用整個數組。 數組元素的引用形式:數組元素的引用形式: 數組名數組名 下標下標 如如a3n下標可以是整型常量、整型變量或整型表達式。下標可以是整型常量、整型變量或整型表達式。 如:如: a3= a0 + ai+1; n下標的值是數組元素的下標的值是數組元素的序號序號,且從,且從0開始,直到開始,直到n-1. int a10, 說明數組說明數組a一共有一共有10個元素,起始值是個元素,起始值是0。數組數組a的的10個元素分別是:個

7、元素分別是:a0、a1、a9。注意區分數組的定義和數組元素的引用。注意區分數組的定義和數組元素的引用。n數組的輸入輸出應采用循環的方法數組的輸入輸出應采用循環的方法. int a10;int a10; for ( i=0; i10; i+ )for ( i=0; i10; i+ ) scanf(”%scanf(”%d d”, &”, &a ai);i); 下標指出在數組中第幾個元素共 53 頁 第 9 9 頁數組中的每個元素數組中的每個元素在功能上在功能上等價于一個一般的變量。等價于一個一般的變量。例如:例如:輸入輸入100100個學生成績,并求出總成績。個學生成績,并求出總成

8、績。l 引用數組元素的注意事項引用數組元素的注意事項: :float m100,sum=0;float m100,sum=0;for ( i=0; i100; i+ )for ( i=0; i100; i+ ) scanf(scanf(”%f%f”, &, &m mii);); sum +=sum += m mii; ; 數組方式數組方式float x, sum=0;float x, sum=0;for (i=0; i100; i+)for (i=0; i100; i+) scanf(scanf(”%f%f”, &x);, &x); sum += x; sum

9、+= x; 簡單變量簡單變量x xsumsum85m0m1m2m99sumsum828563789063 851488279501482263167950優點:優點:數據重用數據重用 數據有序數據有序共 53 頁 第 1010 頁mark0mark1mark2mark3. . . .mark9986.592.077.552.0. . . .94.02000H2004H2008H200CH。218CH引用數組元素時,根據首引用數組元素時,根據首地址和下標,自動計算出地址和下標,自動計算出該元素的實際地址,取出該元素的實際地址,取出該地址的內容進行操作。該地址的內容進行操作。如引用如引用 mark

10、2:(1)計算計算 2000+2* *4=2008(2)取出取出2008的內容的內容l下標與地址的關系下標與地址的關系 為下標運算符為下標運算符, , 數組數組名、數組元素是兩種不同性名、數組元素是兩種不同性質的數據。質的數據。 數組名是數組的首地址,數組名是數組的首地址,是一個地址常量。是一個地址常量。 數組元素則是數值。數組元素則是數值。共 53 頁 第 1111 頁方法:將初值依次寫在花括號方法:將初值依次寫在花括號 內。內。如:如: int a5= 2 , 4 , 6 , 8 , 10 ;存儲形式:存儲形式:存儲單元存儲單元共 53 頁 第 1212 頁 (1)給數組中部分元素賦初值,

11、其他元素按零值處理。給數組中部分元素賦初值,其他元素按零值處理。 如:如: int a9=1,2; 則則 a0= 1, a1= 2, a2a8值全為值全為0。(2) 對數組元素全部賦值可以不指定長度。 int a=0,1,2,3,5 ;int a=0,1,2,3,5 ;等價于:等價于:int a5=0,1,2,3,5 ;int a5=0,1,2,3,5 ; (4)初值的個數不能超過數組總元素的個數)初值的個數不能超過數組總元素的個數。 int a3= 1, 2,3, 4 ; 語法錯語法錯!說明:說明:(3)對數組中間元素賦值必須指明位置)對數組中間元素賦值必須指明位置。 int a5= , ,

12、 2,3, 4 ; /*對第對第3-5個元素賦初值個元素賦初值*/ 共 53 頁 第 1313 頁為個別元素賦值為個別元素賦值main() char as26; as0=a; .利用循環為全部元素賦值利用循環為全部元素賦值main() char as26,ch; for(ch=A;ch=Z;ch+) asch-A=ch; .共 53 頁 第 1414 頁數組元素輸出數組元素輸出main() char as26; int i ; for(i=0; i26; i+) printf(%c,&asi); . 數組元素輸入數組元素輸入main() char as26; int i ; for(i

13、=0; i26; i+) scanf(%c,&asi); .共 53 頁 第 1515 頁 例例1 1 從鍵盤上輸入從鍵盤上輸入1010個實型數存入數組,然個實型數存入數組,然 后按輸入順序的逆序輸出這后按輸入順序的逆序輸出這1010個數。個數。#include main() float a10; int i; for(i=0 ; i=0 ; i-) printf(%10.2f,ai); 數組的引用離不開循環。將數組的下標作為循環變量,通數組的引用離不開循環。將數組的下標作為循環變量,通過循環,就可以對數組的所有元素逐個進行處理。過循環,就可以對數組的所有元素逐個進行處理。共 53 頁

14、 第 1616 頁 例例2 2 從鍵盤上輸入從鍵盤上輸入1010個數,求出其中最大值并輸出。個數,求出其中最大值并輸出。#include main() int a10,i,max; for(i=0 ; i10 ; i+) scanf(%d,&ai); max=a0; for(i=1 ; imax) max=ai; printf(max=%dn,max);算法分析算法分析:采用打擂臺的方法采用打擂臺的方法,先把先把10個數存在數組中個數存在數組中,任意任意指定某數為擂主指定某數為擂主,然后擂主依次與其他數比較然后擂主依次與其他數比較,若某數大于擂若某數大于擂主主,則該數為擂主。循環結束,

15、擂主變量中一定是最大的數。則該數為擂主。循環結束,擂主變量中一定是最大的數。指定指定第第1 1個個元素元素為擂為擂主主 共 53 頁 第 1717 頁 例例33從鍵盤上輸入從鍵盤上輸入6個數存入數組中,再按輸入順序的逆個數存入數組中,再按輸入順序的逆序存放在該數組中并輸出。序存放在該數組中并輸出。#include main() int a6,i,j,k,t; for(i=0 ; i6 ; i+) scanf(%d,&ai); k=6/2-1; for(i=0 ; i=k ; i+) j=6-i-1; t=aj; aj=ai; ai=t; for(i=0 ; i6 ; i+) print

16、f(%3d,ai);算法分析算法分析:采用循環設計。逆序操作可總結為:采用循環設計。逆序操作可總結為: ai與與aj進行交換,其中進行交換,其中i=0,1,n/2-1, j=n-i-1程序運行演示程序運行演示3 4 1 5 6 2 a0 a1 a2 a3 a4a5 共 53 頁 第 1818 頁 例例4 4 利用數組計算斐波那契數列的前利用數組計算斐波那契數列的前2020個數,并以每行個數,并以每行5 5個輸出。個輸出。#include int main() int i,f20= 1, 1 ; for( i=2; i20 ;i+) fi=fi-1+fi-2; for( i=0; i20; i+

17、) if(i%5=0) printf(n);printf(%6d,fi ); printf(n); return 0;說明:斐波那契數列的前兩說明:斐波那契數列的前兩個數是個數是1 1,從第,從第3 3個數開始,個數開始,每個數是前兩個數之和。即每個數是前兩個數之和。即1,1,2,3,5,8,131,1,2,3,5,8,13,滿足,滿足關系式:關系式:f0=f1=1,fn=f0=f1=1,fn=fn-1+fn-2,2fn-1+fn-2,2 n n 19 19 運行結果:運行結果:共 53 頁 第 1919 頁例例5 用用冒泡法冒泡法對數據進行由小到大排序。對數據進行由小到大排序。方法:將兩個相

18、鄰數比較,小的調到前頭。采用兩重循環。方法:將兩個相鄰數比較,小的調到前頭。采用兩重循環。9 8 8 8 8 8 5 5 5 5 4 4 4 2 2 0 8 9 5 5 5 5 8 4 4 4 5 2 2 4 0 25 5 9 4 4 4 4 8 2 2 2 5 0 0 4 4 4 4 4 9 2 2 2 2 8 0 0 0 5 5 5 52 2 2 2 9 0 0 0 0 8 8 8 8 8 8 80 0 0 0 0 9 9 9 9 9 9 9 9 9 9 9由以上可推知:由以上可推知:6 個數要比較個數要比較5趟趟 第第一一趟中要進行兩兩比較趟中要進行兩兩比較5次次 第第二二趟中比較趟中比

19、較 4次次 若若 有有n個數,則要進行個數,則要進行n-1趟比較趟比較 第第 i趟比較中要進行趟比較中要進行n-i次兩兩比較。次兩兩比較。共 53 頁 第 2020 頁#include #define N 6 main( ) int aN, i, j, t ; for( i=0; iN; i+) scanf(%d, &ai); for( i=0; iN-1; i+ ) for( j=1; jaj) t=aj-1; aj-1= aj;aj= t ; printf(The sorted numbers: n); for( i=0; iN; i+) printf(%d , ai); n n個

20、數比較個數比較n-1n-1趟趟第第i i趟比較趟比較n-in-i次次程序運行演示程序運行演示共 53 頁 第 2121 頁冒泡排序的缺陷:在比較交換的過程中大的數不能冒泡排序的缺陷:在比較交換的過程中大的數不能一次到位,效率低。一次到位,效率低。 選擇排序法的基本思想:選擇排序法的基本思想: 以冒泡排序法為基礎,在兩兩比較后并不馬上進行以冒泡排序法為基礎,在兩兩比較后并不馬上進行交換,而是在找到最小的數之后,記住最小數的位置交換,而是在找到最小的數之后,記住最小數的位置(數組中的下標),待一輪比較完畢后,再將最小的(數組中的下標),待一輪比較完畢后,再將最小的數一次交換到位。數一次交換到位。共

21、 53 頁 第 2222 頁3 6 1 9 41 6 3 9 41 3 6 9 41 3 4 9 61 3 4 6 9問題問題 將將 3 3、6 6、1 1、9 9、4 4 從小到大排列。從小到大排列。若有若有N N個數,則需要進行個數,則需要進行N-1N-1輪排序處理。輪排序處理。 第第1 1輪輪排序從排序從1 1N N個數中找出最小的數,然后將它與第個數中找出最小的數,然后將它與第1 1個個數交換。第數交換。第1 1個數則是最小的數。個數則是最小的數。第第2 2輪輪排序從排序從2 2N N個數中找出最小的數,然后將它與第個數中找出最小的數,然后將它與第2 2個個數交換。第數交換。第2 2個

22、數則是次小的數。個數則是次小的數。 經過經過 N-1 N-1 輪處理,完成全部輪處理,完成全部N N個數排序。個數排序。 編程時使用編程時使用二重循環二重循環。外外循環控制進行循環控制進行N-1N-1輪排序,輪排序,內內循循環找出環找出第第 i i 輪輪的最的最小小值。值。共 53 頁 第 2323 頁#include #define N 5main( ) int aN ,i,j,k,t; printf(Input numbers:n); for( i=0; iN; i+) /*輸入數組元素輸入數組元素*/ scanf(%d, &ai); for( i=0;iN-1;i+ ) /* 排

23、序排序 */ k=i; for(j=i+1;jaj) k=j; if(k!=i) t=ai; ai=ak;ak=t; printf(The sorted numbers: n); for( i=0; iN; i+) /*輸出數組元素輸出數組元素*/ printf(%d , ai); 程序運行演示程序運行演示共 53 頁 第 2424 頁 定義二維數組的一般方式:定義二維數組的一般方式:類型說明符類型說明符 數組名數組名 常量表達式常量表達式11常量表達式常量表達式22; 例如例如 int a33 存儲形式:存儲形式: 二維數組在內存中二維數組在內存中按行的順序存放按行的順序存放,即先存放,即先

24、存放第一行的元素,再存放第二行的元素。第一行的元素,再存放第二行的元素。 例如例如 float a34; float a34; 7.3 7.3 二維數組二維數組7.3.1 二維數組的定義二維數組的定義222120121110020100aaaaaaaaaa第一個下標可第一個下標可能取值的個數能取值的個數第二個下標可第二個下標可能取值的個數能取值的個數共 53 頁 第 2525 頁說明:說明:二維數組除了維數比一維數組多一維外,二維數組除了維數比一維數組多一維外, 其它性質與一維數組全部類似。其它性質與一維數組全部類似。 下面寫法是否正確?下面寫法是否正確? int a03; 用于定義數組長度的

25、常量表達式的值必須用于定義數組長度的常量表達式的值必須是大于是大于0的正整數。的正整數。 int i=3 , j=4 ; int aij ; 定義數組元素的個數必須使用常量表達式,定義數組元素的個數必須使用常量表達式,而不能使用變量。而不能使用變量。 共 53 頁 第 2626 頁7.3.2 二維數組的引用二維數組的引用 二維數組的引用二維數組的引用與引用一維數組元素一樣,也用與引用一維數組元素一樣,也用下標法引用二維數組元素。下標法引用二維數組元素。 二維數組元素表示形式:二維數組元素表示形式:數組名數組名下標下標1下標下標2 下標下標1和下標和下標2是整型常量、整型變量或整型表達是整型常量

26、、整型變量或整型表達式。其編號是從式。其編號是從0開始的開始的。 例如:若有例如:若有 int a2*53*4, i=15; 則使用則使用 a3*30, a1i-5都是合法的。都是合法的。說明說明:數組名:數組名a代表的是代表的是數組數組a在內存中的首地址在內存中的首地址, 因此,可以用數組名因此,可以用數組名a來代表數組元來代表數組元 素素a00的的地址。地址。數組名是常量,不可對它賦值。數組名是常量,不可對它賦值。共 53 頁 第 2727 頁一、二維數組的初始化一、二維數組的初始化1. 分行給二維數組賦初值。分行給二維數組賦初值。如:int a23= 2,3,1,1,2,3;2. 2.

27、將所有數據寫在一個將所有數據寫在一個 內,按順序賦值。內,按順序賦值。 即按數組元素在內存中排列的順序賦初值。即按數組元素在內存中排列的順序賦初值。 int a23=2,3,1,1,2,3;int a23=2,3,1,1,2,3;二維數組的初始化和輸入輸出二維數組的初始化和輸入輸出321132a共 53 頁 第 2828 頁3. 對部分元素賦值對部分元素賦值如: int a33=1,0,1,0,0,1;相當矩陣:1000100011000000014. 如果對數組全部元素賦初值,第一個下標可省略,但第二如果對數組全部元素賦初值,第一個下標可省略,但第二個下標不可省略。個下標不可省略。 如: a

28、34=0,1,3,1,2,1,0,2,1,1,2,0; 可寫成 a 4=0,1,3,1,2,1,0,2,1,1,2,0; int a33=1, ,0,0,1;相當矩陣:int a23=5,6,7,8;int a23=5,6,7,8;例得到的數組為得到的數組為: 5 6 0 7 8 0得到的數組為得到的數組為: 5 6 7 8 0 0共 53 頁 第 2929 頁1. 二維數組的輸入二維數組的輸入 int a23,i,j; for( i=0; i2; i+) for( j=0; j3; j+) scanf(%d, &aij);2. 二維數組的輸出二維數組的輸出 int a23,i,j;

29、for( i=0; i2; i+) for( j=0; j3; j+) printf(%5d, aij);二、二維數組的輸入、輸出二、二維數組的輸入、輸出共 53 頁 第 3030 頁7.3.4 二維數組程序舉例二維數組程序舉例例例1 將一個矩陣將一個矩陣a 23轉置存到另一個矩陣轉置存到另一個矩陣b 32中。中。 635241654321ba,分析:用數組分析:用數組a、b分別代表矩陣分別代表矩陣a、b; a 矩陣的矩陣的行數行數必須要等于必須要等于b 矩陣的矩陣的列數列數。 執行:執行:bji=aij; 即可完成轉換。即可完成轉換。 涉及到兩個下標的,一般用涉及到兩個下標的,一般用兩重兩重

30、循環。循環。 求矩陣轉置問題也可以在矩陣本身進行,但應求矩陣轉置問題也可以在矩陣本身進行,但應是方陣。是方陣。共 53 頁 第 3131 頁main( ) int a23=1,2,3,4,5,6; int b32, i , j; printf(“array a: n”); for( i=0; i2; i+) for( j=0; j3; j+) printf(%5d, aij); bji=aij; printf(n); printf(array b: n);for(i=0; i3; i+) for( j=0; j2; j+) printf(%5d,bij); printf(n); 運行結果如下:

31、運行結果如下: array a: 1 2 3 4 5 6 array b: 1 4 2 5 3 6 共 53 頁 第 3232 頁例例2求方陣求方陣A4*4的轉置陣,并將該轉置陣輸出的轉置陣,并將該轉置陣輸出(限定在一個數組進行限定在一個數組進行)main( ) int a44,i,j,t; printf(array a: n); for( i=0; i4; i+) for( j=0; j4; j+) scanf(%d, &aij); /*輸入輸入*/ for(i=0;i4-1;i+) /*轉置轉置*/ for(j=i+1;j4;j+) t=aij;aij=aji;aji=t; pri

32、ntf(“rotated a: n); for(i=0; i4; i+) for( j=0; j4; j+) printf(%4d, aij); /* 輸出輸出 */ printf(n); 程序運行情況:程序運行情況:array a:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 rotated a:15 9 13 26 10 1437 11 154 8 12 16轉置部分還可改寫如下:轉置部分還可改寫如下:for(i=1;i4;i+) for(j=0;ji;j+) t=aij;aij=aji;aji=t;二維數組輸入二維數組輸入共 53 頁 第 3333 頁程序

33、:main( ) int i, j, row=0, colum=0, max; int a34=1,2,3,4,9,7,4,6,-1,2,0,8; max=a00; for( i=0; i=2; i+) for(j=0; jmax) max=aij; row=i; colum=j; printf(max=%d,row=%d,colum=%dn,max, row,colum); 運行結果為: max=9,row=1, colum=0例例3 求求34矩陣中最大元素的值及其所在行和列號。矩陣中最大元素的值及其所在行和列號。802164794321a共 53 頁 第 3434 頁將程序補充完整將程序補

34、充完整:#include stdio.hint main( ) 例例4編寫求整型矩陣編寫求整型矩陣A3*3的副對角線元素之積的程序。的副對角線元素之積的程序。502479321aint i, j, p=1;int a33=1,2,3,9,7,4,2,0,5;for(i=0;i3;i+) for(j=0;j3;j+) if(i+j=2) p=p*aij;printf(“p=%dn”, p);共 53 頁 第 3535 頁7.4 7.4 字符數組字符數組7.4.1 7.4.1 一維字符數組的定義一維字符數組的定義 用來存放字符數據的數組是用來存放字符數據的數組是字符數組字符數組。 C語言用字語言用

35、字符數組存放符數組存放字符串字符串,字符數組中的,字符數組中的各元素依次各元素依次存放字存放字符串的符串的各字符各字符。 格式:格式:char char 數組名數組名 常量表達式常量表達式 強調:字符串強調:字符串實際實際占有單元的數量等于占有單元的數量等于字符串長度字符串長度+1。 定義時應注意考慮定義時應注意考慮元素總個數元素總個數應比應比實際長度多實際長度多1。例如例如:char c6, b10;C 數組具有數組具有6個元素,可以存放長度等于或小于個元素,可以存放長度等于或小于5的字符串。的字符串。共 53 頁 第 3636 頁1.1.用單個字符對字符數組初始化用單個字符對字符數組初始化

36、例如:例如:char ch6=char ch6=C C, ,H H, ,I I, ,N N, ,A A,00;把把5 5個字符分別賦給個字符分別賦給ch0ch0到到c4.c4.在內存中存放情況:在內存中存放情況:7.4.2 7.4.2 一維字符數組的初始化一維字符數組的初始化說明:說明:(1 1)初值的個數不能超過數組元素的個數,否則語法錯)初值的個數不能超過數組元素的個數,否則語法錯 (2) (2) 初值的個數小于數組長度,系統自動添入結束符初值的個數小于數組長度,系統自動添入結束符00 (3) (3) 初值的個數與數組元素相等,定義時可省略長度初值的個數與數組元素相等,定義時可省略長度 (

37、4) (4) 因字符串常量自動加因字符串常量自動加0,0,因此常人為地在字符數組后加因此常人為地在字符數組后加一個一個00。CHINA0c0 c1 c2 c3 c4 c5串長串長=5=5共 53 頁 第 3737 頁2. 2. 用字符串常量對字符數組初始化:用字符串常量對字符數組初始化:char ch6=CHINA;char ch6=CHINA;char ch6=CHINA;char ch6=CHINA; / /* * 省略省略 * */ /char ch =CHINA;char ch =CHINA; / /* * 省略長度值省略長度值 * */ / char d12= char d12=Ho

38、w are youHow are you與與char d=char d=H H, ,o o. .w w, , , ,a a, ,r r, ,e e, , , ,y y, ,o o, ,u u, ,00;等價等價將字符串存儲到字符數組中,字符串和第一個將字符串存儲到字符數組中,字符串和第一個00構成有效字符串。對字符串的操作,就是對字符數構成有效字符串。對字符串的操作,就是對字符數組的操作。但是它和普通字符數組的操作不同。普組的操作。但是它和普通字符數組的操作不同。普通數組中的元素是確定的,一般用下標控制循環;通數組中的元素是確定的,一般用下標控制循環;而字符串使用結束符而字符串使用結束符00來

39、控制循環。來控制循環。共 53 頁 第 3838 頁例如:例如: chara6=chara6=g g, , r r, , e e, , e e, , n n, , 00; char b5= char b5=123123; ; a2= a2=00; ; a5=b1; a5=b1; printf( printf(%cn%cn,a1);,a1); printf( printf(%s%s,a);,a);共 53 頁 第 3939 頁 main() int i; char a3; for (i=0;i3;i+) scanf(%c,&ai); for (i=0;i3;i+) printf(%c,a

40、i); printf(n); 輸入數據順序:輸入數據順序: dos輸出數據順序:輸出數據順序: dos1.1.單字符輸入輸出單字符輸入輸出 ( (用格式符用格式符c c或字符輸入函數或字符輸入函數) ) char a3; for (i=0;i3;i+) ai=getchar(); for (i=0;i3;i+) putchar(ai); printf(n); 共 53 頁 第 4040 頁char a7;scanf(%s,a); 2. 2. 字符串整體或部分輸入輸出字符串整體或部分輸入輸出 ( (用格式符用格式符s)s) - -輸入輸出項必須是以字符串的地址形式出現;輸入輸出項必須是以字符串的

41、地址形式出現; 也可以是字符串常量:也可以是字符串常量: printf ( %sn , abcd ); - -只能輸入不包括只能輸入不包括空格空格、tt和和nn的字符串;的字符串; -若要輸入空格,用若要輸入空格,用getsgets函數;函數; -數組名前不加數組名前不加 & &符號符號。如:如:char a10; scanf(%s,a); printf(%sn,a);輸入:輸入:How are you輸出:輸出: How空格、跳格和回空格、跳格和回車是輸入數據的車是輸入數據的結束標志結束標志.共 53 頁 第 4141 頁n 用用s s輸出字符串時,從輸出項提供的地址開始輸輸

42、出字符串時,從輸出項提供的地址開始輸出,直到遇到字符串結束符出,直到遇到字符串結束符 00 為止為止。n 若字符串長度與數組定義長度相等,則字符串結束若字符串長度與數組定義長度相等,則字符串結束標志無法存儲,輸出字符串后繼續輸出后續存儲單元標志無法存儲,輸出字符串后繼續輸出后續存儲單元內容。內容。若若: :char b3= xyz, ,c=H,a10= abcd072; printf(b=%sn,b); printf(c=%cn,c); printf(a=%sn,a); 輸出:輸出: b=xyz c=H a=abcd:共 53 頁 第 4242 頁#include main() int i=0

43、; char s180; printf(Input string s1:n); gets(s1); while(s1i!=0) i+; printf(i=%dn,i);例例: : 求給定字符串的長度。求給定字符串的長度。通常用來通常用來判斷字符判斷字符串的結束串的結束共 53 頁 第 4343 頁 strcat strcat 字符串連接字符串連接strcpy strcpy 字符串復制字符串復制strcmp strcmp 字符串比較字符串比較strlen strlen 字符串長度字符串長度strlwr strlwr 將字符串中的大寫字符轉換為小寫字符將字符串中的大寫字符轉換為小寫字符strupr

44、 strupr 將字符串中的小寫字符轉換為大寫字符將字符串中的小寫字符轉換為大寫字符( (使用時注意程序前邊加使用時注意程序前邊加: #include ): #include )C函數庫中提供一些用來處理字符串的函數:函數庫中提供一些用來處理字符串的函數: puts 輸出字符串輸出字符串 gets 輸入字符串輸入字符串 (使用時注意程序前邊加使用時注意程序前邊加: #include )共 53 頁 第 4444 頁(1) (1) puts(puts(字符數組字符數組) ) 將一個字符串輸出到終端并換行。將一個字符串輸出到終端并換行。 (2) gets(字符數組字符數組) 輸入一個字符串到字符數

45、組,該輸入一個字符串到字符數組,該字符數組的起始地址為該函數值。字符數組的起始地址為該函數值。 可以輸入帶空格的字符串可以輸入帶空格的字符串,用用scanf的的%s格式不行格式不行.main() char str = book ; puts(str); 其作用與其作用與printf(%s,str) 等效等效main() char str12; gets(str); puts(str);輸入:輸入:How are you輸出:輸出:How are you共 53 頁 第 4545 頁(3)strcat(字符數組字符數組1,字符數組,字符數組2) 連接兩個字符串,連接兩個字符串,把字符數組把字符數

46、組2連到字符數組連到字符數組1上,該數值為字符數組上,該數值為字符數組1的地址。的地址。 如:如: char str140= C language ; char str2 = program; printf(%s, strcat( str1, str2); 輸出:輸出: C language program(4) strcpy(字符數組字符數組1,字符數組,字符數組2) 將字符數組將字符數組2拷貝到字符數組拷貝到字符數組1中去。字符數組中去。字符數組1的長度應大于字的長度應大于字符串符串2的長度。的長度。 如:如:char str110, str2 = red flag; strcpy(str

47、1,str2); 不能用賦值形式不能用賦值形式 str1=str2共 53 頁 第 4646 頁(5) strcmp(字符串字符串1,字符串,字符串2) 兩個串的比較;兩個串的比較;2121210)2, 1(strstrstrstrstrstrstrstrstrcmp負整數正整數說明:說明:1)確定字符)確定字符串大小的基本規則:串大小的基本規則:按照串中對應位置字符的按照串中對應位置字符的ASCII碼值的大小確定大小。碼值的大小確定大小。 abc b 因為字符因為字符 a abadef 因為字符因為字符 c a2)比較結果由函數值帶回(返回兩個字符之差)。)比較結果由函數值帶回(返回兩個字符

48、之差)。 例如:例如: if(str1= str2) 錯誤錯誤 if( strcmp(str1,str2) = 0) 正確正確共 53 頁 第 4747 頁(6) strlen(字符數組字符數組) 測試字符數組的長度測試字符數組的長度(不包括不包括0”); 如:如:char str10= yellow; printf(“%d”, strlen(str); 結果:結果: (7) strlwr(字符串字符串) 將大寫字符串變小寫字符串。將大寫字符串變小寫字符串。(8) strupr(字符串字符串) 將小寫字符串變大寫字符串。將小寫字符串變大寫字符串。共 53 頁 第 4848 頁 例例11:輸出字符串中的數字字符。請完善程序。:輸出字符串中的數字字符。請完善程序。#include stdio.hmain() char a80; int i=0; gets(a); while(ai!= ) if( ) putchar(ai); 7.4.6 字符數組應用舉例字符數組應用舉例共 53 頁 第 4949 頁#include main() char str120,str220; int i=0; printf( Input a string: ); sc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論