




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、前幾章前幾章使用的變量都屬于使用的變量都屬于基本類型基本類型,例如整型、字符型、浮點型數(shù)據(jù),這例如整型、字符型、浮點型數(shù)據(jù),這些都是簡單的數(shù)據(jù)類型。些都是簡單的數(shù)據(jù)類型。對于有些數(shù)據(jù),只用簡單的數(shù)據(jù)類型對于有些數(shù)據(jù),只用簡單的數(shù)據(jù)類型是不夠的,是不夠的,難以難以反映出數(shù)據(jù)的反映出數(shù)據(jù)的特點特點,也難以有效地進行處理。也難以有效地進行處理。如果有如果有1000名學生名學生,每個學生有一每個學生有一個成績,需要求這個成績,需要求這1000名學生的平名學生的平均成績。均成績。用用s1,s2,s3,s1000表示每個學生表示每個學生的成績,能體現(xiàn)的成績,能體現(xiàn)內在聯(lián)系內在聯(lián)系。C語言用方括號中的數(shù)字表
2、示下標,語言用方括號中的數(shù)字表示下標,如用如用s15表示表示數(shù)組名數(shù)組名數(shù)組是一組數(shù)組是一組有序數(shù)據(jù)的集合有序數(shù)據(jù)的集合。數(shù)組中。數(shù)組中各數(shù)據(jù)的排列是有一定規(guī)律的,下標各數(shù)據(jù)的排列是有一定規(guī)律的,下標代表數(shù)據(jù)在數(shù)組中的序號代表數(shù)據(jù)在數(shù)組中的序號用一個用一個數(shù)組名數(shù)組名和和下標下標惟一確定數(shù)組中惟一確定數(shù)組中的元素的元素數(shù)組中的每一個元素都屬于數(shù)組中的每一個元素都屬于同一個數(shù)同一個數(shù)據(jù)類型據(jù)類型6.1 怎樣定義和引用一維數(shù)組怎樣定義和引用一維數(shù)組6.2 怎樣定義和引用二維數(shù)組怎樣定義和引用二維數(shù)組6.3 字符數(shù)組字符數(shù)組6.1.1 怎樣定義一維數(shù)組怎樣定義一維數(shù)組6.1.2 怎樣引用一維數(shù)組元素
3、怎樣引用一維數(shù)組元素6.1.3 一維數(shù)組的初始化一維數(shù)組的初始化6.1.4 一維數(shù)組程序舉例一維數(shù)組程序舉例一維數(shù)組是數(shù)組中最簡單的一維數(shù)組是數(shù)組中最簡單的它的元素只需要用數(shù)組名加一個下它的元素只需要用數(shù)組名加一個下標,就能惟一確定標,就能惟一確定要使用數(shù)組,必須在程序中先定義要使用數(shù)組,必須在程序中先定義數(shù)組數(shù)組定義一維數(shù)組的一般形式為:定義一維數(shù)組的一般形式為: 類型符類型符 數(shù)組名數(shù)組名常量表達式常量表達式;數(shù)組名的命名規(guī)則和變量名相同數(shù)組名的命名規(guī)則和變量名相同如如 int a10;數(shù)組名數(shù)組名定義一維數(shù)組的一般形式為:定義一維數(shù)組的一般形式為: 類型符類型符 數(shù)組名數(shù)組名常量表達式常
4、量表達式;數(shù)組名的命名規(guī)則和變量名相同數(shù)組名的命名規(guī)則和變量名相同如如 int a10;數(shù)組數(shù)組長度長度定義一維數(shù)組的一般形式為:定義一維數(shù)組的一般形式為: 類型符類型符 數(shù)組名數(shù)組名常量表達式常量表達式;數(shù)組名的命名規(guī)則和變量名相同數(shù)組名的命名規(guī)則和變量名相同如如 int a10;10個元素個元素:a0,a1,a2,a9每個元素的數(shù)據(jù)類型每個元素的數(shù)據(jù)類型a0 a1 a2 a3a7 a8 a9請?zhí)貏e注意,按上面的定義,不存在數(shù)組元素請?zhí)貏e注意,按上面的定義,不存在數(shù)組元素a10定義一維數(shù)組的一般形式為:定義一維數(shù)組的一般形式為: 類型符類型符 數(shù)組名數(shù)組名常量表達式常量表達式;int a4+
5、6; 合法合法int n=10; int an;不合法不合法在定義數(shù)組并對其中各元素賦值后,就在定義數(shù)組并對其中各元素賦值后,就可以引用數(shù)組中的元素可以引用數(shù)組中的元素注意:只能引用數(shù)組元素而不能一次整注意:只能引用數(shù)組元素而不能一次整體調用整個數(shù)組全部元素的值體調用整個數(shù)組全部元素的值引用數(shù)組元素的表示形式為:引用數(shù)組元素的表示形式為: 數(shù)組名下標數(shù)組名下標如如a0=a5+a7-a2*3 合法合法int n=5,a10,i,j;an=20;a10=20;j=a10合法合法不合法不合法 例例6.1 對對10個數(shù)組元素依次賦值為個數(shù)組元素依次賦值為0,1, 2,3,4,5,6,7,8,9,要求按
6、逆序輸出。,要求按逆序輸出。解題思路:解題思路:u定義一個長度為定義一個長度為10的數(shù)組,數(shù)組定義為整型的數(shù)組,數(shù)組定義為整型u要賦的值是從要賦的值是從0到到9,可以用循環(huán)來賦值,可以用循環(huán)來賦值u用循環(huán)按下標從大到小輸出這用循環(huán)按下標從大到小輸出這10個元素個元素#include int main() int i,a10; for (i=0; i=0; i-) printf(%d ,ai); printf(n); return 0; 使使a0a9的值為的值為090123456789a0a1a2a3a4a5a6a7a8a9#include int main() int i,a10; for (
7、i=0; i=0; i-) printf(%d ,ai); printf(n); return 0; 先輸出先輸出a9,最,最后輸出后輸出a00123456789a0a1a2a3a4a5a6a7a8a9在定義數(shù)組的同時,給各數(shù)組元素賦值在定義數(shù)組的同時,給各數(shù)組元素賦值int a10=0,1,2,3,4,5,6,7,8,9;int a10=0,1,2,3,4;相當于相當于 int a10=0,1,2,3,4,0,0,0,0,0;int a10=0,0,0,0,0,0,0,0,0,0;相當于相當于 int a10=0;int a5=1,2,3,4,5;可寫為可寫為 int a =1,2,3,4,
8、5; 例例6.2 用數(shù)組處理求用數(shù)組處理求Fibonacci數(shù)列問題數(shù)列問題解題思路:解題思路:u例例5.8中用簡單變量處理的,中用簡單變量處理的,缺點缺點不能在內存不能在內存中保存這些數(shù)。假如想直接輸出數(shù)列中第中保存這些數(shù)。假如想直接輸出數(shù)列中第25個數(shù),是很困難的。個數(shù),是很困難的。u如果用數(shù)組處理,每一個數(shù)組元素代表數(shù)列中如果用數(shù)組處理,每一個數(shù)組元素代表數(shù)列中的一個數(shù),依次求出各數(shù)并存放在相應的數(shù)組的一個數(shù),依次求出各數(shù)并存放在相應的數(shù)組元素中元素中#include int main() int i; int f20=1,1; for(i=2;i20;i+) fi=fi-2+fi-1;
9、 for(i=0;i20;i+) if(i%5=0) printf(“n”); printf(“%12d”,fi); printf(n); return 0; 例例6.3 有有10個地區(qū)的面積,要求對它們個地區(qū)的面積,要求對它們按由小到大的順序排列。按由小到大的順序排列。解題思路:解題思路:u排序的規(guī)律有兩種:一種是排序的規(guī)律有兩種:一種是“升序升序”,從小到從小到大;另一種是大;另一種是“降序降序”,從大到小,從大到小u把題目抽象為:把題目抽象為:“對對n個數(shù)按升序排序個數(shù)按升序排序”u采用起泡法排序采用起泡法排序起泡法的思路是:將相鄰兩個數(shù)比較,將小的調到前頭。第一趟比較 經過第一趟(共5
10、次比較與交換)后,最大的數(shù)9已“沉底” 。然后進行對余下的前面5個數(shù)第二趟比較,注注第二趟比較如果有n個數(shù),則要進行n-1趟比較。在第1趟比較中要進行n-1次兩兩比較,在第j趟比較中要進行n-j次兩兩比較。 經過第二趟(共4次比較與交換)后,得到次大的數(shù)8。注注int a10; int i,j,t;printf(input 10 numbers :n);for (i=0;i10;i+) scanf(%d,&ai); printf(n);for(j=0;j9;j+)for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t;printf(the sorted numbers :n);f
11、or(i=0;i10;i+) printf(%d ,ai);printf(n); 習題選講習題選講習題6.2:用選擇法對10個整數(shù)進行排序(從小到大)1程序分析:所謂選擇法就是先將10個數(shù)中最小的數(shù)與a0對換;再將a1到a9中最小的數(shù)與a1對換每比較一輪,找出一個未經排序的數(shù)中最小的一個。共比較9輪。下面以5個數(shù)為例說明選擇法的步驟。 習題選講習題選講習題6.2:用選擇法對10個整數(shù)進行排序(從小到大)a0 a1 a2 a3 a4 3 6 1 9 4 未排序時的情況 1 6 3 9 4 將5個數(shù)中最小的數(shù)1與a0對換 1 3 6 9 4 將余下的4個數(shù)中最小的數(shù)3與a1對換 1 3 4 9 6
12、 將余下的3個數(shù)中最小的數(shù)4與a2對換 1 3 4 6 9 將余下的2個數(shù)中最小的數(shù)6與a3對換 ,至此完成排序 習題選講習題選講習題6.2:用選擇法對10個整數(shù)進行排序(從小到大) 習題選講習題選講習題6.2:用選擇法對10個整數(shù)進行排序(從小到大)#include void main() int i,j,min,t,a11; for (i=1;i=10;i+) scanf(%d,&ai); for (i=1;i=10;i+) min=i; for (j=i+1;jaj) min=j; t=ai; ai=amin; amin=t; for (i=1;i=10;i+) printf(%5d,a
13、i); printf(n); 2456 1847 1243 1600 2346 27573045 2018 1725 2020 2458 14361427 1175 1046 1976 1477 20181分隊分隊2分隊分隊3分隊分隊隊員隊員1 隊員隊員2隊員隊員3 隊員隊員4隊員隊員5隊員隊員6float pay36;6.2.1怎樣定義二維數(shù)組怎樣定義二維數(shù)組6.2.2怎樣引用二維數(shù)組的元素怎樣引用二維數(shù)組的元素6.2.3二維數(shù)組的初始化二維數(shù)組的初始化6.2.4二維數(shù)組程序舉例二維數(shù)組程序舉例二維數(shù)組定義的一般形式為二維數(shù)組定義的一般形式為 類型符類型符 數(shù)組名數(shù)組名常量表達式常量表達式常
14、量表達式常量表達式; 如:如:float a34,b510;二維數(shù)組可被看作是一種特殊的一維數(shù)組:二維數(shù)組可被看作是一種特殊的一維數(shù)組: 它的元素又是一個一維數(shù)組它的元素又是一個一維數(shù)組例如,把例如,把a看作是一個一維數(shù)組,它有看作是一個一維數(shù)組,它有3個元素:個元素: a0、a1、a2每個元素又是一個包含每個元素又是一個包含4個元素的一維數(shù)組個元素的一維數(shù)組a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23a0a1a2a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23邏輯存儲邏輯存儲內存中的存儲順序內存中的存儲順
15、序二維數(shù)組元素的表示形式為二維數(shù)組元素的表示形式為: 數(shù)組名下標下標數(shù)組名下標下標 b12=a23/2 合法合法for(i=0;im;i+) printf(“%d,%dn”,ai0,a0i);合法合法int a34=1,2,3,4,5,6,7,8, 9,10,11,12;int a34=1,2,3,4,5,6,7,8,9,10,11,12;int a34=1,5,9;等價于等價于int a34=1,0,0,0,5,0,0,0, 9,0,0,0;int a34=1,5,6;相當于相當于int a34=1,5,6,0;int a34=1,2,3,4,5,6,7,8,9,10,11,12;等價等價于
16、于:int a 4=1,2,3,4,5,6,7,8,9,10,11,12;int a4=0,0,3, ,0,10;合法合法 例例6.4 將一個二維數(shù)組行和列的元素互換,將一個二維數(shù)組行和列的元素互換,存到另一個二維數(shù)組中。存到另一個二維數(shù)組中。654321a635241b解題思路:解題思路:u可以定義兩個數(shù)組:數(shù)組可以定義兩個數(shù)組:數(shù)組a為為2行行3列,存放指定列,存放指定的的6個數(shù)個數(shù)u數(shù)組數(shù)組b為為3行行2列,開始時未賦值列,開始時未賦值u將將a數(shù)組中的元素數(shù)組中的元素aij存放到存放到b數(shù)組中的數(shù)組中的bji元素中元素中u用嵌套的用嵌套的for循環(huán)完成循環(huán)完成#include int m
17、ain() int a23=1,2,3,4,5,6; int b32,i,j; printf(array a:n); for (i=0;i=1;i+) for (j=0;j=2;j+) printf(%5d,aij); bji=aij; printf(n); 處理處理a的一行中各元素的一行中各元素處理處理a中某一列元素中某一列元素輸出輸出a的的各元素各元素a元素值賦給元素值賦給b相應元素相應元素 printf(array b:n); for (i=0;i=2;i+) for(j=0;j=1;j+) printf(%5d,bij); printf(n); return 0; 輸出輸出b的的各元素
18、各元素6.3.1怎樣定義字符數(shù)組怎樣定義字符數(shù)組6.3.2字符數(shù)組的初始化字符數(shù)組的初始化6.3.3怎樣引用字符數(shù)組中的元素怎樣引用字符數(shù)組中的元素6.3.4字符串和字符串結束標志字符串和字符串結束標志6.3.5 字符數(shù)組的輸入輸出字符數(shù)組的輸入輸出6.3.6善于使用善于使用字符串處理函數(shù)字符串處理函數(shù)6.3.7字符數(shù)組應用舉例字符數(shù)組應用舉例 6.36.3 字符數(shù)組字符數(shù)組 6.3.16.3.1字符數(shù)組的定義字符數(shù)組的定義定義方法與前面介紹的類似。例如:定義方法與前面介紹的類似。例如:char cchar c1010; ;c0=I;cc0=I;c1 1= ;c= ;c2 2=a;=a;c c
19、3 3=m;c=m;c4 4= ;c5=h;c6=a;= ;c5=h;c6=a;c c7 7=p;c=p;c8 8=p;c=p;c9 9=y;=y;/*字符數(shù)組中的每個元素為字符型,占1個字節(jié)*/ 6.3.26.3.2字符數(shù)組的初始化字符數(shù)組的初始化由于字符型與整型可以互相通用,故可定義如下:由于字符型與整型可以互相通用,故可定義如下: int ch5;int ch5; ch0=c; ch0=c; / /* *用整型數(shù)組來存放字符型數(shù)據(jù),每個數(shù)組元素占用整型數(shù)組來存放字符型數(shù)據(jù),每個數(shù)組元素占2 2個字個字節(jié)節(jié)* */(/(在在Turbo CTurbo C當中是這樣,不同編譯環(huán)境有所不同當中是
20、這樣,不同編譯環(huán)境有所不同) )。因此這樣做是在浪費資源因此這樣做是在浪費資源! ! 二維字符數(shù)組二維字符數(shù)組 例如:例如:char ch520;char ch520; 對字符數(shù)組初始化,可逐個字符賦給數(shù)組中各元素。對字符數(shù)組初始化,可逐個字符賦給數(shù)組中各元素。例如:例如:char c10=I, ,a,m, ,h,a,p,p,y 6.3.26.3.2字符數(shù)組的初始化字符數(shù)組的初始化如果初值個數(shù)小于數(shù)組長度,則只將這些字符賦給數(shù)如果初值個數(shù)小于數(shù)組長度,則只將這些字符賦給數(shù)組中前面那些元素,其余的元素自動定為空字符。組中前面那些元素,其余的元素自動定為空字符。char c10=c, ,p,r,o
21、,g,r,a,m; 如果提供的初值個數(shù)與預定的數(shù)組長度相同,在定義如果提供的初值個數(shù)與預定的數(shù)組長度相同,在定義時可以省略數(shù)組長度,系統(tǒng)會自動根據(jù)初值個數(shù)確定時可以省略數(shù)組長度,系統(tǒng)會自動根據(jù)初值個數(shù)確定數(shù)組長度。數(shù)組長度。char cchar c=I, ,a,m, ,h,=I, ,a,m, ,h,a,p,p,y;a,p,p,y;數(shù)組數(shù)組c c的長度自動定為的長度自動定為1010。 char diamondchar diamond5 55 5= = , ,* *, ,* *, ,* *,* *, , , ,* *, ,* *, ,* *, , ,* *定義和初始化一個二維字符數(shù)組定義和初始化一
22、個二維字符數(shù)組 6.3.36.3.3字符數(shù)組的引用字符數(shù)組的引用例例7.6 輸輸出一個字符串。出一個字符串。 程序如下:程序如下:#include void main() char c10=I, ,a,m, ,a, , b,o,y; int i; for(i=0;i10;i+) printf(%c,ci); printf(n); 運行結果:運行結果:I am a boyI am a boy 例例7.7 7.7 輸出一個鉆石圖形輸出一個鉆石圖形 #include void main() char diamond5= , ,*,*, ,*,*, , , ,*, ,*, ,*, , ,*; int
23、i,j; for (i=0;i5;i+) for (j=0;j5;j+) printf(%c,diamondij); printf(n); 運行結果運行結果 * * * * * * *6.3.46.3.4字符串和字符串結束標志字符串和字符串結束標志 為了測定字符串的實際長度,為了測定字符串的實際長度,C C語言規(guī)定了一語言規(guī)定了一個個“字符串結束標志字符串結束標志”0 0。 字符數(shù)組并不要求它的最后一個字符為字符數(shù)組并不要求它的最后一個字符為0,甚至可以不包含,甚至可以不包含0。例如:例如:char c5=C,h,i,n,a;(1 1) 字符串的長度字符串的長度 但是由于系統(tǒng)對字符串常量自動加
24、一個0。因此,為了使處理方法一致,在字符數(shù)組中也常人為地加上一個0。 例如:例如:char cchar c6 6=C=C,hh,ii,nn,aa,0;0;(2 2)用字符串常量初始化字符數(shù)組)用字符串常量初始化字符數(shù)組 例如:例如: char c =“I am happy”;char c =“I am happy”; 或:或: char c = “I am happy”;char c = “I am happy”;由于字符串由于字符串 “ “I am happy”I am happy”的長度為它的實際長度加上的長度為它的實際長度加上1 1,則字符數(shù)組的長度為則字符數(shù)組的長度為1111。上面的初
25、始化等價于:上面的初始化等價于:char c =I, , a, m, , h, a, p, p, y, 0;而不等價于:而不等價于:char c =I, , a, m, , h, a, p, p, y; (3 3)字符串常量的長度小于數(shù)組長度)字符串常量的長度小于數(shù)組長度 char c10=“China”;char c10=“China”; 字符串長度為字符串長度為6 6,后,后4 4各元素全部補各元素全部補00。 (4 4)注意事項)注意事項 char c =“china”;char c =“china”; char c =c, h, i, n, a; char c =c, h, i, n,
26、 a;在實際應用中,為便于測定字符串的實際長度,一般人為在實際應用中,為便于測定字符串的實際長度,一般人為加上一個加上一個 0:0:char c6=c, h, i, n, a, char c6=c, h, i, n, a, 0;0;定義字符數(shù)組定義字符數(shù)組char cchar c=“Pascal program”;=“Pascal program”;要用一個新的字符串代替原有的字符串要用一個新的字符串代替原有的字符串”Pascal Pascal program” program” ,從鍵盤向字符數(shù)組輸入,從鍵盤向字符數(shù)組輸入HelloHello如果不加如果不加00的話,字符數(shù)組中的字符如下的話
27、,字符數(shù)組中的字符如下Hellol programHellol program6.3.56.3.5字符數(shù)組的輸入輸出字符數(shù)組的輸入輸出 字符數(shù)組的輸入輸出可以有兩種方法:字符數(shù)組的輸入輸出可以有兩種方法: 逐個字符輸入輸出。用格式符逐個字符輸入輸出。用格式符“%c”%c”輸入或輸出輸入或輸出一個字符。一個字符。例:for(i=0;i10;i+)scanf(“%c”,&ci);for(i=0;i10;i+)printf(“%c”,ci);6.3.56.3.5字符數(shù)組的輸入輸出字符數(shù)組的輸入輸出 將整個字符串一次輸入或輸出。用將整個字符串一次輸入或輸出。用“%s”%s”格式符,格式符,意思是對字符
28、串的輸入輸出。意思是對字符串的輸入輸出。 char c= “china”;printf(“%s”,c);char cchar c=China;=China;printf(%sprintf(%s,c);c); 例如例如在內存中數(shù)組c的狀態(tài)說明:說明:(1 1)用)用“%s”%s”格式符輸出字符串時,格式符輸出字符串時,printfprintf函數(shù)中的函數(shù)中的輸出項是字符數(shù)組名,而不是數(shù)組元素名。輸出項是字符數(shù)組名,而不是數(shù)組元素名。 printf(“%s”,ci );printf(“%s”,ci );(2 2)如果數(shù)組長度大于字符串實際長度,也只輸出到)如果數(shù)組長度大于字符串實際長度,也只輸出到
29、遇遇00結束。結束。(3 3)輸出字符不包括結束符)輸出字符不包括結束符00。(4 4)如果一個字符數(shù)組中包含一個以上)如果一個字符數(shù)組中包含一個以上00,則,則遇第一個遇第一個00時輸出就結束。時輸出就結束。 (5 5)可以用)可以用scanfscanf函數(shù)輸入函數(shù)輸入一個一個字符串。字符串。c c 用用scanfscanf輸入一個字符串輸入一個字符串: : 例如:例如:char c6;char c6; scanf(“%s”,c); scanf(“%s”,c); 若輸入:若輸入:chinachina 則系統(tǒng)自動在字符串后面加一個則系統(tǒng)自動在字符串后面加一個 00結束符。結束符。 不能寫成:不
30、能寫成: scanf(“%s”,scanf(“%s”,& &c);c);因為因為C C語言規(guī)定,語言規(guī)定,數(shù)組名代表該數(shù)組的首地址數(shù)組名代表該數(shù)組的首地址。 如果利用一個如果利用一個scanfscanf函數(shù)輸入多個字符串,則函數(shù)輸入多個字符串,則在輸入時以空格分隔。比如,輸入在輸入時以空格分隔。比如,輸入how are you?how are you?how(how(空格空格)are()are(空格空格)you?()you?(回車回車) )例如:例如:char strlchar strl5 5,str2str25 5,str3str35 5; ;scanf(“%s%s%sscanf(“%s%s
31、%s,str1str1,str2str2,str3);str3);輸入數(shù)據(jù):輸入數(shù)據(jù):How are you? How are you? 數(shù)組中未被賦值的元素的值自動置數(shù)組中未被賦值的元素的值自動置00。注意:注意:scanfscanf函數(shù)中的輸入項如果字符函數(shù)中的輸入項如果字符數(shù)組名。不要再加地址符數(shù)組名。不要再加地址符& &,因為在,因為在C C語言中數(shù)組名代表該數(shù)組的起始地址。語言中數(shù)組名代表該數(shù)組的起始地址。下面寫法不對:下面寫法不對:scanf(%sscanf(%s,& &str)str);易混淆知識點例題解析:例:輸出how are you?#include void main()
32、 char a12=h,o,w, ,a,r,e, ,y,o,u,?;int i;for (i=0;i12;i+)printf(“%c,ai);printf(n); 需要輸出的字符加上空格總共12個,因此定義一個長度為12的字符數(shù)組足夠,長度更長也不影響結果.a13運行結果:how are you?易混淆知識點例題解析:#include void main() char a12=h,o,w, ,a,r,e, ,y,o,u,?;printf(“%s,a);printf(n); 運行結果:how are you?!因為按照字符串格式輸出,系統(tǒng)會在最后一個字符加上0以表示終止,這個時候為13個字符,超
33、過了我們定義的字符數(shù)組的長度12。a13易混淆知識點例題解析:或者我們直接按照字符串的形式輸入:#include void main() char a13=how are you?;printf(%s,a);printf(n); 以字符串形式輸入的時候,我們往往可以不定義數(shù)組的長度。讓系統(tǒng)解決。運行結果:how are you?a易混淆知識點例題解析:現(xiàn)在我們用scanf函數(shù)進行字符串輸入:#include void main() char a13;scanf(%s, a);printf(%s,a);printf(n); &運行結果:how系統(tǒng)將空格作為字符串之間的分隔標志,就會把how作為一
34、個字符串處理,而后面全是0。易混淆知識點例題解析:#include void main() char a5,b5,c5;scanf(%s%s%s,a,b,c);printf(%s %s %s,a,b,c);printf(n); 結果:how are you?在在C函數(shù)庫中提供了一些用來專門處理字函數(shù)庫中提供了一些用來專門處理字符串的函數(shù),使用方便符串的函數(shù),使用方便1.puts函數(shù)函數(shù)-輸出字符串的函數(shù)輸出字符串的函數(shù) 其一般形式為其一般形式為: puts (字符數(shù)組字符數(shù)組) 作用是將一個字符串輸出到終端作用是將一個字符串輸出到終端char str20=”China”;puts(str);
35、輸出輸出China2. gets函數(shù)函數(shù)-輸入字符串的函數(shù)輸入字符串的函數(shù) 其一般形式為其一般形式為: gets(字符數(shù)組字符數(shù)組) 作用是輸入一個字符串到字符數(shù)組作用是輸入一個字符串到字符數(shù)組char str20;gets(str); Computer 思考:思考: 用用gets函數(shù)和函數(shù)和scanf函數(shù)輸入字符串的區(qū)別。函數(shù)輸入字符串的區(qū)別。 char a20;gets(a);printf(“%s”,a);char a20;scanf(“%s”,a);printf(“%s”,a);若輸入若輸入how are you?其輸出結果分別是什么?其輸出結果分別是什么?#include void m
36、ain() char a20;scanf(%s,a);printf(%s,a);printf(n); 輸出結果:how輸出結果:How are you?#include void main() char a20;gets(a);printf(%s,a);printf(n); 原因解釋:scanf :當遇到回車,空格和tab鍵會自動在字符串后面添加0,因此當輸入帶有空格的字符串(比如how are you)的時候,輸入how然后按了空格以后,系統(tǒng)就認為輸入完成,只將字符串how放在了緩沖區(qū)。gets:可接受回車鍵之前輸入的所有字符,gets用于讀取字符串,用回車結束輸入。 如果是有空格的多個字符
37、串,在scanf中只能取第一個空格前面的。 3. strcat函數(shù)函數(shù)-字符串連接函數(shù)字符串連接函數(shù) 其一般形式為其一般形式為: strcat(字符數(shù)組字符數(shù)組1,字符數(shù)組,字符數(shù)組2) 其作用是把兩個字符串連接起來,把字符其作用是把兩個字符串連接起來,把字符串串2接到字符串接到字符串1的后面,結果放在字符的后面,結果放在字符數(shù)組數(shù)組1中中使用字符串函數(shù)時使用字符串函數(shù)時,在程序開頭用在程序開頭用#include 3. strcat函數(shù)函數(shù)-字符串連接函數(shù)字符串連接函數(shù) char str130=”People”; char str2=”China”; printf(”%s”, strcat(s
38、tr1,str2); 輸出:輸出:PeopleChina要足夠大要足夠大4. strcpy和和strncpy函數(shù)函數(shù)-字符串復制字符串復制 strcpy一般形式為一般形式為: strcpy(字符數(shù)組字符數(shù)組1,字符串字符串2) 作用是將字符串作用是將字符串2復制到字符數(shù)組復制到字符數(shù)組1中去中去char str110,str2=”China”;strcpy(str1,str2);China 00000str14. strcpy和和strncpy函數(shù)函數(shù)-字符串復制字符串復制 strcpy一般形式為一般形式為: strcpy(字符數(shù)組字符數(shù)組1,字符串字符串2) 作用是將字符串作用是將字符串2復
39、制到字符數(shù)組復制到字符數(shù)組1中去中去char str110,str2=”China”;strcpy(str1,str2);China 00000str1要足夠大要足夠大4. strcpy和和strncpy函數(shù)函數(shù)-字符串復制字符串復制 strcpy一般形式為一般形式為: strcpy(字符數(shù)組字符數(shù)組1,字符串字符串2) 作用是將字符串作用是將字符串2復制到字符數(shù)組復制到字符數(shù)組1中去中去char str110,str2=”China”;strcpy(str1,str2);數(shù)組名形式數(shù)組名形式4. strcpy和和strncpy函數(shù)函數(shù)-字符串復制字符串復制 strcpy一般形式為一般形式為:
40、 strcpy(字符數(shù)組字符數(shù)組1,字符串字符串2) 作用是將字符串作用是將字符串2復制到字符數(shù)組復制到字符數(shù)組1中去中去char str110,str2=”China”;strcpy(str1,str2);數(shù)組名數(shù)組名或或字符串常量字符串常量4. strcpy和和strncpy函數(shù)函數(shù)-字符串復制字符串復制 strcpy一般形式為一般形式為: strcpy(字符數(shù)組字符數(shù)組1,字符串字符串2) 作用是將字符串作用是將字符串2復制到字符數(shù)組復制到字符數(shù)組1中去中去char str110,str2=”China”;strcpy(str1,str2); 相當于相當于strcpy(str1,”Chi
41、na”);4. strcpy和和strncpy函數(shù)函數(shù)-字符串復制字符串復制 char str110,str2=”China”; str1=”China”; 錯誤錯誤 str1=str2; 錯誤錯誤4. strcpy和和strncpy函數(shù)函數(shù)-字符串復制字符串復制 可以用可以用strncpy函數(shù)將字符串函數(shù)將字符串2中前面中前面n個字符復制到字符數(shù)組個字符復制到字符數(shù)組1中去中去 strncpy(str1,str2,2);u作用是將作用是將str2中最前面中最前面2個字符復制到個字符復制到str1中,取代中,取代str1中原有的最前面中原有的最前面2個字符個字符u復制的字符個數(shù)復制的字符個數(shù)n
42、不應多于不應多于str1中原有的字符中原有的字符5. strcmp函數(shù)函數(shù)-字符串比較函數(shù)字符串比較函數(shù) 其一般形式為其一般形式為 strcmp(字符串字符串1,字符串,字符串2) 作用是比較字符串作用是比較字符串1和字符串和字符串2 strcmp(str1,str2); strcmp(”China”,”Korea”); strcmp(str1,”Beijing”);5. strcmp函數(shù)函數(shù)-字符串比較函數(shù)字符串比較函數(shù) 字符串比較的規(guī)則是:將兩個字符串自左字符串比較的規(guī)則是:將兩個字符串自左至右逐個字符相比,直到出現(xiàn)不同的字符至右逐個字符相比,直到出現(xiàn)不同的字符或遇到或遇到0為止為止 如全
43、部字符相同,認為兩個字符串相等如全部字符相同,認為兩個字符串相等 若出現(xiàn)不相同的字符,則以第一對不相同若出現(xiàn)不相同的字符,則以第一對不相同的字符的比較結果為準的字符的比較結果為準5. strcmp函數(shù)函數(shù)-字符串比較函數(shù)字符串比較函數(shù) ”A”A” ”computer”compare” ”these”that” ”1A”$20” ”CHINA”CANADA” ”DOG”TSINGHUA”5. strcmp函數(shù)函數(shù)-字符串比較函數(shù)字符串比較函數(shù) 比較的結果由函數(shù)值帶回比較的結果由函數(shù)值帶回u如果字符串如果字符串1=字符串字符串2,則函數(shù)值為,則函數(shù)值為0u如果字符串如果字符串1字符串字符串2,則函
44、數(shù)值為一個,則函數(shù)值為一個正整數(shù)正整數(shù)u如果字符串如果字符串1str2) printf(”yes”); 錯誤錯誤if(strcmp(str1,str2)0) printf(”yes”); 正確正確6. strlen函數(shù)函數(shù)-測字符串長度的函數(shù)測字符串長度的函數(shù) 其一般形式為其一般形式為: strlen (字符數(shù)組字符數(shù)組) 它是測試字符串長度的函數(shù)它是測試字符串長度的函數(shù) 函數(shù)的值為字符串中的實際長度函數(shù)的值為字符串中的實際長度6. strlen函數(shù)函數(shù)-測字符串長度的函數(shù)測字符串長度的函數(shù) char str10=”China”; printf(”%d”,strlen(str); 輸出結果是輸
45、出結果是5 也可以直接測試字符串常量的長度也可以直接測試字符串常量的長度 strlen(”China”);7. strlwr函數(shù)函數(shù)-轉換為小寫的函數(shù)轉換為小寫的函數(shù) 其一般形式為其一般形式為 strlwr (字符串字符串) 函數(shù)的作用是將字符串中大寫字母換成函數(shù)的作用是將字符串中大寫字母換成小寫字母小寫字母例如:例如: char str=“ChINa”;char str=“ChINa”; printf(“%sn”,strlwr(str); printf(“%sn”,strlwr(str);8. strupr函數(shù)函數(shù)-轉換為大寫的函數(shù)轉換為大寫的函數(shù) 其一般形式為其一般形式為 strupr (
46、字符串字符串) 函數(shù)的作用是將字符串中小寫字母換成函數(shù)的作用是將字符串中小寫字母換成大寫字母大寫字母例如:例如:char str=“ChINa”;char str=“ChINa”; printf(“%sn”,strupr(str); printf(“%sn”,strupr(str); 例例6.8 輸入一行字符,統(tǒng)計其中有多少輸入一行字符,統(tǒng)計其中有多少個單詞,單詞之間用空格分隔開。個單詞,單詞之間用空格分隔開。 解題思路:問題的關鍵是怎樣確定解題思路:問題的關鍵是怎樣確定“出出現(xiàn)一個新單詞了現(xiàn)一個新單詞了”u 從第從第1個字符開始逐個字符進行檢查,判斷個字符開始逐個字符進行檢查,判斷此字符是否是新單詞的開頭,如果是,就此字符是否是新單詞的開頭,如果是,就使變量使變量num的值加的值加1,最后得到的,最后得到的num的的值就是單詞總數(shù)值就是單詞總數(shù)u判斷是否出現(xiàn)新單詞,可以由是否有空格出判斷是否出現(xiàn)新單詞,可以由是否有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CCPITCSC 096-2022名表真假鑒定規(guī)范
- T/CCMA 0141-2022液壓挖掘機排氣污染物車載測量方法
- T/CCAS 014.5-2022水泥企業(yè)安全管理導則第5部分:水泥工廠化驗室安全管理
- T/CATCM 001.1-2017保健類眼貼第1部分:通用要求
- T/CAPEB 00001.3-2022制藥裝備容器和管道第3部分:設計
- T/CAPE 10101-2021設備潤滑管理導則
- 鄭州工程師面試題及答案
- 余勝軍說java面試題及答案
- 打字翻譯面試題及答案
- 和諧家庭面試題及答案
- 《ESC血壓升高和高血壓管理2024指南》解讀
- 學科競賽在提升學生團隊協(xié)作能力中的作用
- 《公共管理學基礎》題庫及答案
- 基本藥物工作計劃
- 2025年行政執(zhí)法人員執(zhí)法資格考試必考題庫及答案(共232題)
- 2025手術室年度工作計劃
- 《兒童文學》課件-圖畫書的概念
- 2025屆高三語文專題復習:文言文閱讀-實詞的五種類型
- 土木工程CAD-終結性考核-國開(SC)-參考資料
- 放射性皮膚損傷的護理-中華護理學會團體標準
評論
0/150
提交評論