版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.1第六章第六章 數(shù)組數(shù)組本章目標(biāo)本章目標(biāo)1. 了解數(shù)組的數(shù)據(jù)結(jié)構(gòu)了解數(shù)組的數(shù)據(jù)結(jié)構(gòu)2. 理解一維和多維數(shù)組的定義和關(guān)系理解一維和多維數(shù)組的定義和關(guān)系3. 了解數(shù)組元素在內(nèi)存的存放規(guī)則了解數(shù)組元素在內(nèi)存的存放規(guī)則4. 了解數(shù)組元素和數(shù)組名的作用了解數(shù)組元素和數(shù)組名的作用5. 掌握數(shù)組的使用方法掌握數(shù)組的使用方法6. 掌握基本的排序算法掌握基本的排序算法.2數(shù)組名數(shù)組名數(shù)組元素的個(gè)數(shù)數(shù)組元素的個(gè)數(shù)數(shù)組元素的類(lèi)型。數(shù)組元素的類(lèi)型。6.1 6.1 引言引言.3 數(shù)組元素的作用相當(dāng)于簡(jiǎn)單變量數(shù)組元素的作用相當(dāng)于簡(jiǎn)單變量 數(shù)組名代表的是數(shù)組在內(nèi)存中的首地址數(shù)組名代表的是數(shù)組在內(nèi)存中的首地址 同一個(gè)數(shù)組中
2、的元素在內(nèi)存中是按順序同一個(gè)數(shù)組中的元素在內(nèi)存中是按順序連續(xù)存放的連續(xù)存放的.4形式形式: : 類(lèi)型說(shuō)明符類(lèi)型說(shuō)明符 數(shù)組名數(shù)組名常量表達(dá)式常量表達(dá)式;例例: : int a 20; float x 100;代表數(shù)組元素的個(gè)數(shù)其中 a 和 x 都是數(shù)組名。.51. 數(shù)組名的確定方法同變量名。數(shù)組名的確定方法同變量名。2. C語(yǔ)言用方括號(hào)語(yǔ)言用方括號(hào) 表示數(shù)組元數(shù)個(gè)數(shù)。表示數(shù)組元數(shù)個(gè)數(shù)。對(duì)于 int a5;表示有表示有5個(gè)元素個(gè)元素, 元素的下標(biāo)從元素的下標(biāo)從0開(kāi)始開(kāi)始.數(shù)組a的元素分別為:a0,a1, a2, a3, a 4.6數(shù)組數(shù)組 a 在內(nèi)存中的存放順序:在內(nèi)存中的存放順序:a0的值a1
3、的值a2的值a3的值a4的值:注意:注意:在沒(méi)有給數(shù)組元素賦值以前,沒(méi)有確定的值。.7 2. 引用數(shù)組元素的方式引用數(shù)組元素的方式: 數(shù)組名數(shù)組名下標(biāo)下標(biāo) 1. 必須象使用變量那樣必須象使用變量那樣,先定義先定義,后使用后使用則 a 05+a1 6 為正確的算術(shù)表達(dá)式例:例:int a5;a0=1;a1=2;:例例: :一維數(shù)組的輸入與輸出。一維數(shù)組的輸入與輸出。main()main()int i,a10;int i,a10; for(i=0;i10;i+) for(i=0;i10;i+) ai=i; ai=i; for(i=0;i=9;i+) for(i=0;i=9;i+) printf(“
4、%4d”,ai); printf(“%4d”,ai); 問(wèn)題?問(wèn)題?將輸入數(shù)據(jù)按逆序輸出將輸入數(shù)據(jù)按逆序輸出. .例例: :一維數(shù)組的輸入與輸出。一維數(shù)組的輸入與輸出。main()main()int i,a10;int i,a10; for(i=0;i10;i+) for(i=0;i10;i+) ai=i; ai=i; for(i=0;i=9;i+) for(i=0;i0;i- -) for(i=9;i0;i- -) printf(“%d”,ai);printf(“%d”,ai);.10 對(duì)全部元素賦初值。對(duì)全部元素賦初值。如:如:int a10=10, 11, 12, 13, 14, 15,
5、 16, 17, 18, 19表示數(shù)組元素的值為:a0=10;a1=11;:a9=19;.11 對(duì)部分元素賦初值對(duì)部分元素賦初值(前面的連續(xù)元素前面的連續(xù)元素)。如: 在此, 只有前5個(gè)元素初值確定。int b10=0,1,2,3,4;表示數(shù)組元素的值為:b0=0;b1=1;b2=2;b3=3;b4=4;.12注意:注意:不能只對(duì)不連續(xù)部分元素或后面的連續(xù)元素賦初值。語(yǔ)句語(yǔ)句: int a10=, , , , ,1,2,3,4,5; int a10=1, ,3, ,5 , ,7, ,9, ,; 是錯(cuò)誤的。.13 如對(duì)數(shù)組元素賦同一初值如對(duì)數(shù)組元素賦同一初值,必須一一寫(xiě)出必須一一寫(xiě)出: stat
6、ic int a10=2,2,2,2,2,2,2,2,2,2;不可寫(xiě)成任何其他形式。 若賦全部元素的初值若賦全部元素的初值,可省略常量表達(dá)式可省略常量表達(dá)式 int a =0,1,2,3; 表示a4,即只有4個(gè)元素。.146.3 6.3 數(shù)組應(yīng)用實(shí)例數(shù)組應(yīng)用實(shí)例.15前面已講過(guò):數(shù)組元素在內(nèi)存中是按順前面已講過(guò):數(shù)組元素在內(nèi)存中是按順序連續(xù)存放的;序連續(xù)存放的;重要特性:重要特性:系統(tǒng)對(duì)超出數(shù)組元素的使用系統(tǒng)對(duì)超出數(shù)組元素的使用不查錯(cuò)。不查錯(cuò)。.16例:例:# include main( ) int a5=0, 1, 2, 3, 4, i;char ch5=a, b, c, d, e;for
7、(i=0; i10; i+)printf(a%d=%d, ch%d=%cn, i, ai, i, chi);printf(%s, ch);.17a0=0, ch0=aa1=1, ch1=ba2=2, ch2=ca3=3, ch3=da4=4, ch4=ea5=25185, ch5=a6=25699, ch6=a7=23909, ch7=a8= 22, ch8= a9=285, ch9=Abcde .18求Fibonacci 數(shù)列的前20項(xiàng)。 定義數(shù)組定義數(shù)組,并賦初值并賦初值 static int f 20=1,1; /*定義數(shù)組的前兩個(gè)元素*/注:注:c c規(guī)定只有靜態(tài)數(shù)組規(guī)定只有靜態(tài)數(shù)組s
8、taticstatic和外部存儲(chǔ)數(shù)組和外部存儲(chǔ)數(shù)組externextern才能才能進(jìn)行初始化?。▽?duì)于構(gòu)造數(shù)據(jù)類(lèi)型如數(shù)組、結(jié)構(gòu)體進(jìn)行進(jìn)行初始化?。▽?duì)于構(gòu)造數(shù)據(jù)類(lèi)型如數(shù)組、結(jié)構(gòu)體進(jìn)行初始化通常定義為靜態(tài)存儲(chǔ)類(lèi)別)初始化通常定義為靜態(tài)存儲(chǔ)類(lèi)別)fi=fi-1+fi-2 ,且f1 = f2= 1。.19 用循環(huán)用循環(huán)for求數(shù)列的后求數(shù)列的后18項(xiàng)項(xiàng):注意注意: 下標(biāo)越界問(wèn)題: i =2 且 i20for (i=2; i20; i+) f i=f i 1+f i 2;.20#include main ( ) int i; static int f 20=1, 1; for (i=2; i20; i+)
9、 f i=f i1+f i2; for (i=0; i20; i+) if (i%5 = =0) printf(n); printf(%12d,f i ); .21 1 8 89 987 5 55 6106765運(yùn)行結(jié)果如下:運(yùn)行結(jié)果如下: 1 13 1441597 2 21 1331584 3 34 3774181 例例: : 歌手比賽,歌手比賽,1010位評(píng)委打分,去掉最高分,最低位評(píng)委打分,去掉最高分,最低分,得成績(jī)。分,得成績(jī)。main()main()int score10,i,max=-1,min=101,sum=0;int score10,i,max=-1,min=101,sum=
10、0; float mark; float mark; for(i=0;i10;i+) for(i=0;i10;i+) printf(“please enter the score %d:”, printf(“please enter the score %d:”,i+1i+1);); scanf(“%dn”, scanf(“%dn”,&scorei&scorei);); sum=sum+scorei; sum=sum+scorei; for(i=0;i10;i+) for(i=0;imax)max=scorei; if(scoreimax)max=scorei; if(scoreimin)mi
11、n=scorei; if(scoreia1, 則交換;然后比較第二個(gè)數(shù)與第三個(gè)數(shù);依次 類(lèi)推,直至第n-1個(gè)數(shù)和第n個(gè)數(shù)比較為止 第一趟冒泡排序,結(jié)果最大的數(shù)被安置在最 后一個(gè)元素位置上(2)對(duì)前n-1個(gè)數(shù)進(jìn)行第二趟冒泡排序,結(jié)果使次大 的數(shù)被安置在第n-1個(gè)元素位置(3)重復(fù)上述過(guò)程,共經(jīng)過(guò)n-1趟冒泡排序后, 排序結(jié)束例例 用冒泡法對(duì)用冒泡法對(duì)10個(gè)數(shù)排序個(gè)數(shù)排序985420例例: :用冒泡法對(duì)用冒泡法對(duì)1010個(gè)數(shù)進(jìn)行排序個(gè)數(shù)進(jìn)行排序( (冒泡排序法冒泡排序法) )算法算法:(:(從小到大從小到大) )將兩個(gè)相鄰的數(shù)進(jìn)行比較將兩個(gè)相鄰的數(shù)進(jìn)行比較, ,將小的將小的數(shù)調(diào)換到前頭數(shù)調(diào)換到前頭
12、 . .895420859420854920854290854209第一趟結(jié)結(jié)果果第第5次次第第4次次第第3次次第第2次次第第1次次5842054820542805420885420第二趟結(jié)結(jié)果果第第4次次第第3次次第第2次次第第1次次main()main()int a11, i,j,t;int a11, i,j,t; printf(“input 10 number:n”); printf(“input 10 number:n”); for(i=1;i11;i+) for(i=1;i11;i+) scanf(“%d”,&ai); scanf(“%d”,&ai); printf(“n”); pr
13、intf(“n”); for(j=1;j=9;j+) for(j=1;j=9;j+) for(i=1;i=10-j;i+) for(i=1;iai+1) if(aiai+1) t=ai;ai=ai+1; t=ai;ai=ai+1; ai+1=t; ai+1=t; printf(“the sorted numbers:n”); printf(“the sorted numbers:n”); for(i=1;i11;i+) for(i=1;iai+1ftaiai+1輸出a1an.26排序過(guò)程:(1)首先通過(guò)n-1次比較,從n個(gè)數(shù)中找出最小的, 將它與 第一個(gè)數(shù)交換第一趟選擇排序,結(jié)果最小的數(shù)被安
14、置在第一個(gè)元素位置上(2)再通過(guò)n-2次比較,從剩余的n-1個(gè)數(shù)中找出關(guān)鍵字次小 的記錄,將它與第二個(gè)數(shù)交換第二趟選擇排序(3)重復(fù)上述過(guò)程,共經(jīng)過(guò)n-1趟排序后,排序結(jié)束例例 用簡(jiǎn)單選擇法對(duì)用簡(jiǎn)單選擇法對(duì)10個(gè)數(shù)排序個(gè)數(shù)排序例例: :用選擇法對(duì)用選擇法對(duì)1010個(gè)數(shù)進(jìn)行排序。(記錄下標(biāo))個(gè)數(shù)進(jìn)行排序。(記錄下標(biāo))main()main() int a10, i,j,t,k; int a10, i,j,t,k; for(i=0;i10;i+) scanf(“%d”,&ai); for(i=0;i10;i+) scanf(“%d”,&ai); printf(“n”); printf(“n”); f
15、or(i=0;i9;i+) for(i=0;ik min=k * */ / for(j=i+1;j10;j+) for(j=i+1;j10;j+) if(ajak) k=j; if(ajak) k=j; t=ak;ak=ai;ai=t; t=ak;ak=ai;ai=t; printf(“the sorted numbers:n”); printf(“the sorted numbers:n”); for(i=0;i10;i+) for(i=0;i10;i+) printf(“%4d”,ai); printf(“%4d”,ai); printf(“n”); printf(“n”); .286.4
16、 6.4 二維數(shù)組二維數(shù)組形式:形式:例例: : int a4 10; float x8 20;類(lèi)型說(shuō)明符類(lèi)型說(shuō)明符 數(shù)組名數(shù)組名常量表達(dá)式常量表達(dá)式1 常量表達(dá)式常量表達(dá)式2.292. 可將二維數(shù)組的元素看成為若干個(gè)特殊可將二維數(shù)組的元素看成為若干個(gè)特殊的一維數(shù)組。的一維數(shù)組。 可看成:可看成:有三個(gè)特殊的一維數(shù)組b0,b1, b2,每一個(gè)又有四個(gè)元素:1. 不可將定義寫(xiě)為不可將定義寫(xiě)為int a4,10。注意:注意:b00, b01, b02, b03,b10, b11, b12, b13,b20, b21, b22, b23,如如: int b3 4;.303. 二維數(shù)組的存放方式為二維
17、數(shù)組的存放方式為: 按行優(yōu)先按行優(yōu)先。由此可。由此可推廣推廣 至三維、至三維、n維數(shù)組的定義和存放。維數(shù)組的定義和存放。4. 初始化初始化:即即: 最右邊的下標(biāo)變化最快。 按行給二維數(shù)組賦初值按行給二維數(shù)組賦初值:static int a34=1,2,3,4, 5,6,7,8, 9,10,11,12;或:或:static int a34=1,2,3,4,5,6,7,8,9,10,11,12;.31 可以對(duì)部分元素賦初值可以對(duì)部分元素賦初值,但需表達(dá)清楚。但需表達(dá)清楚。則相當(dāng)于若:若: static int a34=1,2,3,8則相當(dāng)于000000008321000800030021如如: s
18、tatic int a34=1,2,3,8。.32 可通過(guò)賦初值決定數(shù)組大小。如為二維可通過(guò)賦初值決定數(shù)組大小。如為二維,則只可省略第一維的大小。則只可省略第一維的大小。static int a 4=1,2,3,12;.33形式形式: :其中的下標(biāo)為整型表達(dá)式其中的下標(biāo)為整型表達(dá)式, ,但不得越界。但不得越界。與一維數(shù)組元素一樣與一維數(shù)組元素一樣, ,二維數(shù)組元素相當(dāng)于同類(lèi)二維數(shù)組元素相當(dāng)于同類(lèi)型的簡(jiǎn)單變量。型的簡(jiǎn)單變量。注意下標(biāo)值應(yīng)在已定義的數(shù)組大小范圍內(nèi);注意下標(biāo)值應(yīng)在已定義的數(shù)組大小范圍內(nèi);如:如:int a23;int a23;則則a23=3a23=3的引用是的引用是不合法不合法的。的
19、。請(qǐng)區(qū)分定義數(shù)組請(qǐng)區(qū)分定義數(shù)組a23a23和引用元素和引用元素a23a23的不同。的不同。數(shù)組名數(shù)組名下標(biāo)下標(biāo)1下標(biāo)下標(biāo)2.34 a=1 2 34 5 6b=1 42 5 3 6例例: : 將一個(gè)二維數(shù)組行和列元素互換,存到另一個(gè)二維數(shù)組中。例如:例如:例例: :將一個(gè)二維數(shù)組的行列互換存放到另一個(gè)數(shù)組中將一個(gè)二維數(shù)組的行列互換存放到另一個(gè)數(shù)組中. .即即: : 1 21 23 3 4 54 56 6main()main() static int a23=1,2,3,4,5,6; static int a23=1,2,3,4,5,6; static int b32,i,j; static in
20、t b32,i,j; printf(“array a:n”); printf(“array a:n”); for(i=0;i=1;i+) for(i=0;i=1;i+) for(j=0;j=2;j+) for(j=0;j=2;j+) printf(“%5d”,aij); printf(“%5d”,aij);bji=aijbji=aij; ; printf(“n”); printf(“n”); printf(“array b:n”); printf(“array b:n”); for(i=0;i=2;i+) for(i=0;i=2;i+) for(j=0;j=1;j+) for(j=0;jmax
21、ftmax=aijrow=icolum=j輸出max,row,colum#include #include main()main() int i,j,row=0,colum=0,max; int i,j,row=0,colum=0,max; static int a34=1,2,3,4, static int a34=1,2,3,4, 9,8,7,6,-10,-10,-5,2; 9,8,7,6,-10,-10,-5,2; max=a00; max=a00; for(i=0;i=2;i+) for(i=0;i=2;i+) for(j=0;j=3;j+) for(j=0;jmax) if (aij
22、max) max=aij;row=i;colum=j; max=aij;row=i;colum=j;printf(“max=%d,row=%d,colum=%dn”,max,row,coluprintf(“max=%d,row=%d,colum=%dn”,max,row,colum);m); .38注意:注意: 數(shù)組元素?cái)?shù)據(jù)的輸入必須以循環(huán)方式數(shù)組元素?cái)?shù)據(jù)的輸入必須以循環(huán)方式進(jìn)行或者定義時(shí)置初值。進(jìn)行或者定義時(shí)置初值。 二維數(shù)組一般用二重循環(huán)對(duì)每個(gè)元素二維數(shù)組一般用二重循環(huán)對(duì)每個(gè)元素賦值。賦值。 .39二維數(shù)組與一維數(shù)組的對(duì)應(yīng)關(guān)系:二維數(shù)組與一維數(shù)組的對(duì)應(yīng)關(guān)系:6A00A01A02A03A10
23、A11A12A13A20A21A22A2349 13 138734122A0A1A2A3A4A5A6A7A8A9A10A11字符數(shù)組的定義字符數(shù)組的定義字符數(shù)組的初始化與賦值字符數(shù)組的初始化與賦值字符數(shù)組的輸入與輸出字符數(shù)組的輸入與輸出字符串處理函數(shù)字符串處理函數(shù)字符數(shù)組的應(yīng)用舉例字符數(shù)組的應(yīng)用舉例1 1、字符數(shù)組的定義方法與前面其他類(lèi)型的數(shù)組的定義相同、字符數(shù)組的定義方法與前面其他類(lèi)型的數(shù)組的定義相同. .數(shù)組類(lèi)型數(shù)組類(lèi)型 數(shù)組名數(shù)組名 元素個(gè)數(shù)元素個(gè)數(shù) 例如例如: :(1 1)char string5=“ABCD”;char string5=“ABCD”;(2 2)char c10;cha
24、r c10; c0=I;c1= ;c2=a;c3=m; c0=I;c1= ;c2=a;c3=m; c4= ;c5=h;c6=a;c7=p; c4= ;c5=h;c6=a;c7=p; c8=p;c9=y; c8=p;c9=y;c0 c1 c2 c3 c4 c5 c6 c7 c8 c9c0 c1 c2 c3 c4 c5 c6 c7 c8 c92 2、要點(diǎn):、要點(diǎn):數(shù)組類(lèi)型:必須是數(shù)組類(lèi)型:必須是charchar型。型。元素個(gè)數(shù):為實(shí)際字符個(gè)數(shù)元素個(gè)數(shù):為實(shí)際字符個(gè)數(shù)+1,+1,放結(jié)束標(biāo)志放結(jié)束標(biāo)志Iamhappy字符數(shù)組的定義字符數(shù)組的定義A B C D 0字符串的結(jié)束標(biāo)志字符串的結(jié)束標(biāo)志“0”1
25、 1、字符串的結(jié)束標(biāo)志:字符串的結(jié)束標(biāo)志:“0”0”:ASCIIASCII碼值為碼值為0 0的字符。的字符。在程序中判斷字符串是否結(jié)束不再是依據(jù)字符數(shù)組的長(zhǎng)在程序中判斷字符串是否結(jié)束不再是依據(jù)字符數(shù)組的長(zhǎng)度而是查找字符串的結(jié)束標(biāo)志度而是查找字符串的結(jié)束標(biāo)志“0”.0”.2 2、例:、例:char string=“abcdef”char string=“abcdef”char char string=a,b,c,d,e,fstring=a,b,c,d,e,f字符數(shù)組的初始化字符數(shù)組的初始化1 1、將字符逐一送入字符數(shù)組中、將字符逐一送入字符數(shù)組中, ,例如例如: :static char sta
26、tic char c10=I, ,a,m,h,a,p,p,y;c10=I, ,a,m,h,a,p,p,y;要點(diǎn):要點(diǎn):在給字符數(shù)組賦初值時(shí)初值的個(gè)數(shù)不能超過(guò)字符數(shù)的長(zhǎng)度在給字符數(shù)組賦初值時(shí)初值的個(gè)數(shù)不能超過(guò)字符數(shù)的長(zhǎng)度, ,若初值字符的個(gè)數(shù)小于數(shù)組的長(zhǎng)度時(shí)若初值字符的個(gè)數(shù)小于數(shù)組的長(zhǎng)度時(shí), ,字符與數(shù)組前面的元字符與數(shù)組前面的元素對(duì)應(yīng)素對(duì)應(yīng), ,其余的元素自動(dòng)賦值其余的元素自動(dòng)賦值00(空字符)。(空字符)。字符數(shù)組的大小也可以省略。如字符數(shù)組的大小也可以省略。如: :static char c=static char c=b b, ,o o, ,o o, ,k k;請(qǐng)區(qū)別字符數(shù)組與字符串的不
27、同請(qǐng)區(qū)別字符數(shù)組與字符串的不同2 2、對(duì)一批字符的描述對(duì)一批字符的描述3 3、字符數(shù)組的賦值字符數(shù)組的賦值4 4、例例對(duì)一批字符的描述對(duì)一批字符的描述1 1、方法:采用二維數(shù)組來(lái)描述,數(shù)組的第一維為字、方法:采用二維數(shù)組來(lái)描述,數(shù)組的第一維為字符串的個(gè)數(shù),第二維的元素個(gè)數(shù)為字符串符串的個(gè)數(shù),第二維的元素個(gè)數(shù)為字符串中最長(zhǎng)字符個(gè)數(shù)中最長(zhǎng)字符個(gè)數(shù)+1+1。2 2、例:、例:char menu320+1=“1-Openfile”,char menu320+1=“1-Openfile”, “2-Closefile”, “2-Closefile”, “3-Exit to DOS” “3-Exit to
28、DOS”static char diamond55=static char diamond55= “ “ * *”,”, ” ” * * * *”,”, ” ”* * * *”,”, ” ” * * * *”,”, ” ” * *”字符數(shù)組的賦值字符數(shù)組的賦值1 1、在、在c c語(yǔ)言中對(duì)字符串賦初值可以寫(xiě)成語(yǔ)言中對(duì)字符串賦初值可以寫(xiě)成: :static char c=“I am happy”; static char c=“I am happy”; 或或static char c=“I am happy”static char c=“I am happy”; 這里字符數(shù)組的長(zhǎng)度不是這里字符數(shù)組
29、的長(zhǎng)度不是10,10,而是而是1111。2 2、將一個(gè)字符串賦值給一個(gè)字符數(shù)組、將一個(gè)字符串賦值給一個(gè)字符數(shù)組, ,只能用在賦只能用在賦初值的情況下初值的情況下, ,不能用在賦值語(yǔ)句中不能用在賦值語(yǔ)句中. .例如例如: :char str11;char str11;str=“I am happy”;str=“I am happy”; 是是錯(cuò)誤錯(cuò)誤的的. .46v字符串及其結(jié)束標(biāo)志l無(wú)字符串變量,用字符數(shù)組處理字符串無(wú)字符串變量,用字符數(shù)組處理字符串l字符串結(jié)束標(biāo)志字符串結(jié)束標(biāo)志:0例 “hello”共5個(gè)字符,在內(nèi)存占6個(gè)字節(jié) 字符串長(zhǎng)度5 h e l l o 0104 101 108 108
30、 111 0內(nèi)存存放字符ASCII碼字符串字符串例例: :字符數(shù)組元素的引用。字符數(shù)組元素的引用。main()main() static char static char c10=I,a,m,h,a,p,c10=I,a,m,h,a,p,p,y;p,y; int i; int i; for(i=0;i10;i+) for(i=0;i10;i+) printf(“%c”,ci); printf(“%c”,ci); printf(“n”); printf(“n”); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:I am happyI am happy試試 char c10=“I am happy”char c10=“I a
31、m happy”例例: :輸出一個(gè)鉆石圖形。輸出一個(gè)鉆石圖形。main()main() static char diamond55static char diamond55 = = , ,* *, , ,* *, , ,* *,* *, , , , , , ,* *, , ,* *, , ,* *, , , , ,* *; int i,j; int i,j; for(i=0;i5;i+) for(i=0;i5;i+) for(j=0;j5;j+) for(j=0;j5;j+) printf(“%c”,diamondij);printf(“n”); printf(“%c”,diamondij);
32、printf(“n”);運(yùn)行結(jié)果:運(yùn)行結(jié)果: * * * * * * * * * * * * * * * *字符串的輸入與輸出字符串的輸入與輸出一、逐個(gè)字符的輸入與輸出一、逐個(gè)字符的輸入與輸出用格式符用格式符“%c”%c”輸入或輸出一個(gè)字符。輸入或輸出一個(gè)字符。二、將整個(gè)字符串一次輸入或輸出,用二、將整個(gè)字符串一次輸入或輸出,用“%s”%s”。如:如:static char c =“china”static char c =“china”; printf(“%s”,c)printf(“%s”,c);三、要點(diǎn):三、要點(diǎn):輸出字符不包括結(jié)束符輸出字符不包括結(jié)束符“0”.0”.用用“% %s”s”時(shí)
33、,時(shí),printfprintf中輸出項(xiàng)是字符數(shù)組名,而不是元素名。中輸出項(xiàng)是字符數(shù)組名,而不是元素名。 printfprintf(“%s”,c0) (“%s”,c0) 錯(cuò)錯(cuò)若數(shù)組長(zhǎng)度大于字符串實(shí)際長(zhǎng)度,也只輸出到若數(shù)組長(zhǎng)度大于字符串實(shí)際長(zhǎng)度,也只輸出到00結(jié)束。結(jié)束。 char c10=“China”;char c10=“China”;printfprintf(“%s”,c); (“%s”,c); 結(jié)果:結(jié)果:ChinaChina若一個(gè)字符數(shù)組中包含一個(gè)以上的若一個(gè)字符數(shù)組中包含一個(gè)以上的00,則遇到第一個(gè),則遇到第一個(gè)00時(shí)時(shí)就結(jié)束輸出。就結(jié)束輸出。字符串的輸入與輸出字符串的輸入與輸出1.1
34、.用用“%c”%c”格式輸出單個(gè)字符格式輸出單個(gè)字符. .例如例如: :static char str =“book”;static char str =“book”;for(i=0;i4;i+)for(i=0;istr2.(2)str1str2.函數(shù)值為正數(shù)函數(shù)值為正數(shù)(3)str1str2.(3)str1str2.函數(shù)值為負(fù)數(shù)函數(shù)值為負(fù)數(shù)6.strlen(str)6.strlen(str)功能功能: :測(cè)量字符數(shù)組的長(zhǎng)度測(cè)量字符數(shù)組的長(zhǎng)度, ,不包括不包括“0”.0”.7.strwr(str)7.strwr(str)功能功能: :將大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母將大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母. .8.s
35、trupr(str)8.strupr(str)功能功能: :將小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母將小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母. .例:當(dāng)執(zhí)行下面的程序且輸入例:當(dāng)執(zhí)行下面的程序且輸入ABCABC時(shí)時(shí), ,輸出結(jié)果為輸出結(jié)果為: :#include #include main()main() char ss10=“12345”; char ss10=“12345”; strcat(ss,”6789”); strcat(ss,”6789”); 運(yùn)行結(jié)果:運(yùn)行結(jié)果: ABC ABC gets(ss); gets(ss); printf(“%s”,ss); printf(“%s”,ss); .55例 gets函數(shù)和s
36、trcmp函數(shù)的應(yīng)用。 #include main() char pass_str80; /*定義字符數(shù)組passstr*/ int i=0; /*檢驗(yàn)密碼*/ while(1) clrscr(); printf(請(qǐng)輸入密碼n); gets(pass_str); /*輸入密碼*/ if(strcmp(pass_str,“password”)!=0) /*口令錯(cuò)*/ printf(口令錯(cuò)誤,按任意鍵繼續(xù)); else break; /*輸入正確的密碼,中止循環(huán)*/ getch(); i+; if(i=3) exit(0); /*輸入三次錯(cuò)誤的密碼,退出程序*/ /*輸入正確密碼所進(jìn)入的程序段*/
37、例例: :程序程序main()main() char ch10; char ch10; scanf(“%s”,ch); scanf(“%s”,ch); printf(“%s”,ch); printf(“%s”,ch); 執(zhí)行時(shí)執(zhí)行時(shí), ,若從鍵盤(pán)輸入若從鍵盤(pán)輸入Good Morning,Good Morning,則輸出為則輸出為: : A.Good Morning B.Good A.Good Morning B.Good C. Good Morni C. Good Morni D.Good Morn D.Good Morn b b.57 H o w 0 a r e 0 y o u ? 0 #i
38、nclude main() char a15,b5,c5; scanf(%s%s%s,a,b,c); printf(a=%snb=%snc=%sn,a,b,c); scanf(%s,a); printf(a=%sn,a);運(yùn)行情況:輸入:How are you?輸出:a=How b=are c=you?輸入:How are you?輸出:a=Howscanf中%s輸入時(shí),遇空格或回車(chē)結(jié)束運(yùn)行情況:輸入:How are you?例例 字符串輸入舉例字符串輸入舉例例例: :程序程序main()main() char ch10; char ch10; gets(ch); gets(ch); prin
39、tf(“%s”,ch); printf(“%s”,ch); 執(zhí)行時(shí)執(zhí)行時(shí), ,若從鍵盤(pán)輸入若從鍵盤(pán)輸入Good Morning,Good Morning,則輸出為則輸出為: : A.Good Morning B.Good A.Good Morning B.Good C. Good Morni C. Good Morni D.Good Morn D.Good Morn a a.59main() int i; char a5; scanf(%s,a); for(i=0;i5;i+) printf(%d,ai);運(yùn)行情況:(1)若輸入 hel , 正常(2)若輸入 hell , 正常(3)若輸入 h
40、ello , 用%s 輸出時(shí),會(huì)出現(xiàn)問(wèn)題 h e l 0 h e l l 0 h e l l o輸入字符串長(zhǎng)度數(shù)組維數(shù)例子.60包含在頭文件 string.hu字符串輸出函數(shù)puts格式:puts(字符數(shù)組)功能:向顯示器輸出字符串(輸出完,換行)說(shuō)明:字符數(shù)組必須以0結(jié)束u字符串輸入函數(shù)gets格式:gets(字符數(shù)組)功能:從鍵盤(pán)輸入一以回車(chē)結(jié)束的字符串放入字符數(shù)組中, 并自動(dòng)加0說(shuō)明:輸入串長(zhǎng)度應(yīng)小于字符數(shù)組維數(shù)常用的字符串處理函數(shù)常用的字符串處理函數(shù).61包含在頭文件 string.h例 #include main( ) char string80; printf(“Input a s
41、tring:”); gets(string); puts(string); 輸入: How are you?輸出: How are you ? 常用的字符串處理函數(shù)常用的字符串處理函數(shù).62u字符串連接函數(shù)strcat格式:strcat(字符數(shù)組1,字符數(shù)組2)功能:把字符數(shù)組2連到字符數(shù)組1后面返值:返回字符數(shù)組1的首地址說(shuō)明:字符數(shù)組1必須足夠大 連接前,兩串均以0結(jié)束;連接后,串1的0取消, 新串最后加0u字符串拷貝函數(shù)strcpy格式:strcpy(字符數(shù)組1,字符串2)功能:將字符串2,拷貝到字符數(shù)組1中去返值:返回字符數(shù)組1的首地址說(shuō)明:字符數(shù)組1必須足夠大 拷貝時(shí)0一同拷貝 不能
42、使用賦值語(yǔ)句為一個(gè)字符數(shù)組賦值例 char str120,str220; str1=“Hello!”; () str2=str1; ()常用的字符串處理函數(shù)(常用的字符串處理函數(shù)(1).63u字符串比較函數(shù)strcmp格式:strcmp(字符串1,字符串2)功能:比較兩個(gè)字符串比較規(guī)則:對(duì)兩串從左向右逐個(gè)字符比較(ASCII碼), 直到遇到不同字符或0為止返值:返回int型整數(shù),a. 若字符串1 字符串2, 返回正整數(shù) c. 若字符串1= 字符串2, 返回零說(shuō)明:字符串比較不能用“=”,必須用strcmpu字符串長(zhǎng)度函數(shù)strlen格式:strlen(字符數(shù)組)功能:計(jì)算字符串長(zhǎng)度返值:返回字
43、符串實(shí)際長(zhǎng)度,不包括0在內(nèi)例 對(duì)于以下字符串,strlen(s)的值為:(1)char s10=A,0,B,C,0,D;(2)char s =“tv0willn”;(3)char s =“x69082n”; 答案:1 3 1常用的字符串處理函數(shù)(常用的字符串處理函數(shù)(2).64#include #include main() char str1 = ”Hello!, str2 = ”How are you?”,str20; int len1,len2,len3; len1=strlen(str1); len2=strlen(str2); if(strcmp(str1, str2)0) strc
44、py(str,str1); strcat(str,str2); else if (strcmp(str1, str2)0) strcpy(str,str2); strcat(str,str1); else strcpy(str,str1); len3=strlen(str); puts(str); printf(”Len1=%d,Len2=%d,Len3=%dn”,len1,len2,len3);How are you?Hello!Len1=6,Len2=12,Len3=18例 strcmp與strlen舉例.65例題.66例例: :有一個(gè)一維數(shù)組,內(nèi)放有一個(gè)一維數(shù)組,內(nèi)放1010個(gè)學(xué)生成績(jī),
45、寫(xiě)一個(gè)函數(shù),求出平均個(gè)學(xué)生成績(jī),寫(xiě)一個(gè)函數(shù),求出平均分、最高分和最低分。分、最高分和最低分。float max=0,min=0; main()float max=0,min=0; main()float average(array,n) float ave,score10;float average(array,n) float ave,score10;float array ;int n; int i;float array ;int n; int i;int i; for(i=0;i10;i+)int i; for(i=0;i10;i+) float aver,sum=array0; sc
46、anf(“%f”,&scorei); float aver,sum=array0; scanf(“%f”,&scorei); max=min=array0; ave=average(score,10); max=min=array0; ave=average(score,10); for(i=0;in;i+) for(i=0;imax) max=arrayi; max,min,ave); if(arrayimax) max=arrayi; max,min,ave); else if (arrayimin) min=arrayi; else if (arrayimin) min=arrayi;
47、sum=sum+arrayi; sum=sum+arrayi; aver=sum/n; aver=sum/n;return(aver);return(aver);.67 二維數(shù)組應(yīng)用舉例 【例例】給矩陣a賦值,并輸出該矩陣的值。 main( ) int a33= 1,2,3,4,5,6,7,8,9,i,j; for(i=0;i3;i+) for(j=0;j3;j+) printf(%5d,aij); printf(n); 該程序的運(yùn)行結(jié)果如下: 1 2 3 4 5 6 7 8 9.68 字符串應(yīng)用舉例 【例例】下面程序的功能是:將字符數(shù)組a中下標(biāo)值為偶數(shù)的元素從小到大排列,其它元素不變。 #i
48、nclude #include main( ) char a =”clanguage”,t; int i, j, k; k=strlen(a);.69 for(i=0;i=k-2;i+=2) for(j=i+2;jaj) t=ai; ai=aj; aj=t; puts(a); printf(“n”); 運(yùn)行結(jié)果為:alancuegg。 .70作業(yè):.71例:汽車(chē)固定速度前進(jìn),里程表為一對(duì)稱(chēng)數(shù)95859, 兩小時(shí)后里程表又為一新對(duì)稱(chēng)數(shù) 。求車(chē)速及新對(duì)稱(chēng)數(shù) main() int t,j,a5; long int i,temp,k; for(i=95859+1;i+) temp=i;k=10000;
49、 for(t=0;t5;t+) at=temp/k; temp=temp%k; k=k/10; if(a0=a4)&(a1=a3) for(j=0;j5;j+) printf(“%d”,aj); printf(“New Velocity is: %dn”,(i-95859)/2); break; .72作業(yè):有4個(gè)學(xué)生,每人3門(mén)課。已知各課成績(jī),求每門(mén)課的平均成績(jī)和每個(gè)學(xué)生的平均成績(jī)。 Cour1 cour2 cour3 stud1 78 86 92 stud2 62 73 65 stud3 90 93 95 stud4 82 73 85.73作業(yè):將一個(gè)數(shù)組中的值按逆序重新存放。 例: 原序
50、:8,6,5,4,1 改為:1,4,5,6,8 .74Main() int i,j; float sum,stud_ave4,cour_ave3; static float score43=78,86,92,62,73,65,90,93,95, 82,73,86 ; for( i=0;i=3;i+) sum=0.0; for(j=0;j=2;j+) sum=sum+scoreij; stud_avei=sum/3;printf(“average %d is: %6.2fn”,i+1,stud_avei); for(j=0;j=2;j+) sum=0.0; for( i=0;i=3;i+) su
51、m=sum+scoreij; cour_avej=sum/4; printf(“acerage course %d is: %6.2fn”,j+1,cour_avej); 作業(yè):有4個(gè)學(xué)生,每人3門(mén)課。已知各課成績(jī),求每門(mén)課的平均成績(jī)和每個(gè)學(xué)生的平均成績(jī)。 .75作業(yè):將一個(gè)數(shù)組中的值按逆序重新存放。 例: 原序:8,6,5,4,1 改為:1,4,5,6,8 main() int n=5,I, temp; static int a5=8,6,5,4,1 for(i=0;in/2;i+) temp=ai; ai=an-i-1; an-i-1=temp; for(I=0;in;i+) printf
52、(“%4d”,ai);例例: :分析下面的程序分析下面的程序, ,寫(xiě)出結(jié)果寫(xiě)出結(jié)果. .main()main() int n33,i,j; int n33,i,j; for(i=0;i3;i+) for(i=0;i3;i+) for(j=0;j3;j+) for(j=0;j3;j+)nij=i+j;nij=i+j; for(i=0;i2;i+) for(i=0;i2;i+) for(j=0;j2;j+) for(j=0;j2;j+)ni+1j+1+=nij;ni+1j+1+=nij; printf(“%dn”,nij); printf(“%dn”,nij); 運(yùn)行結(jié)果為:運(yùn)行結(jié)果為:6 6例例: :分析下面的程序分析下面的程序, ,寫(xiě)出結(jié)果寫(xiě)出
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)參考:教材插圖智能設(shè)計(jì)美學(xué)的社會(huì)主義核心價(jià)值觀對(duì)齊研究
- 課題申報(bào)參考:建成環(huán)境對(duì)老年人公交及地鐵出行的時(shí)空動(dòng)態(tài)影響及適老化建成環(huán)境優(yōu)化研究
- 二零二五版文化藝術(shù)用品采購(gòu)合同模板3篇
- 二零二五年度房地產(chǎn)投資定金監(jiān)管協(xié)議4篇
- 二零二五年度煤炭運(yùn)輸節(jié)能減排協(xié)議4篇
- 二零二五版爐渣清潔生產(chǎn)采購(gòu)技術(shù)服務(wù)合同4篇
- 2025年度高壓供電線(xiàn)路維護(hù)服務(wù)協(xié)議范本3篇
- 2025版?zhèn)€人退股協(xié)議書(shū):上市公司股份回購(gòu)與股東退出協(xié)議4篇
- 深圳2025年度廠房租賃合同范本2篇
- 二零二五年度建筑安全評(píng)估師雇傭合同標(biāo)準(zhǔn)版3篇
- 化學(xué)-河南省TOP二十名校2025屆高三調(diào)研考試(三)試題和答案
- 智慧農(nóng)貿(mào)批發(fā)市場(chǎng)平臺(tái)規(guī)劃建設(shè)方案
- 林下野雞養(yǎng)殖建設(shè)項(xiàng)目可行性研究報(bào)告
- 2023年水利部黃河水利委員會(huì)招聘考試真題
- Python編程基礎(chǔ)(項(xiàng)目式微課版)教案22
- 01J925-1壓型鋼板、夾芯板屋面及墻體建筑構(gòu)造
- 欠電費(fèi)合同范本
- 《學(xué)習(xí)教育重要論述》考試復(fù)習(xí)題庫(kù)(共250余題)
- 網(wǎng)易云音樂(lè)用戶(hù)情感畫(huà)像研究
- 小學(xué)四年級(jí)奧數(shù)題平均數(shù)問(wèn)題習(xí)題及答案
- 工作違紀(jì)違規(guī)檢討書(shū)范文
評(píng)論
0/150
提交評(píng)論