第7章數(shù)組--C語言程序設(shè)計(jì)(譚浩強(qiáng)第三版)講解.ppt_第1頁
第7章數(shù)組--C語言程序設(shè)計(jì)(譚浩強(qiáng)第三版)講解.ppt_第2頁
第7章數(shù)組--C語言程序設(shè)計(jì)(譚浩強(qiáng)第三版)講解.ppt_第3頁
第7章數(shù)組--C語言程序設(shè)計(jì)(譚浩強(qiáng)第三版)講解.ppt_第4頁
第7章數(shù)組--C語言程序設(shè)計(jì)(譚浩強(qiáng)第三版)講解.ppt_第5頁
已閱讀5頁,還剩69頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、引言 一維數(shù)組的定義和引用 二維數(shù)組的定義和引用 字符數(shù)組與字符串,第7章 數(shù) 組,7.0 引言,一、數(shù)組的引入 為了便于處理一批類型相同的數(shù)據(jù),引入了數(shù)組類型.,假設(shè)現(xiàn)在要保存每個(gè)學(xué)生的成績,那就需要40個(gè)變量,但這樣一來輸入、輸出、計(jì)算都會(huì)變得繁瑣. 在這種情況下,我們可以使用數(shù)組類型,聲明一個(gè)含有40個(gè)元素的數(shù)組,每個(gè)數(shù)組元素存放一個(gè)成績,成績的輸入、輸出、計(jì)算都可通過循環(huán)來實(shí)現(xiàn).,例:某班有40名學(xué)生,求該班成績的平均分,#include main( ) int j , sum , s ; float ave ; sum=0; for(j=1; j=40 ; j+) scanf(“%d

2、”, ,二、數(shù)組的概念 構(gòu)造數(shù)據(jù)類型之一 1.數(shù)組:由具有相同類型的有序 數(shù)據(jù)的集合。用數(shù)組名標(biāo)識。,#include main( ) int j , sum , s40 ; float ave ; sum=0; for(j=0; j=39 ; j+) scanf(“%d”, ,2.數(shù)組元素:每一個(gè)數(shù)組元素 都是一個(gè)變量,為了與一般 的變量相區(qū)別,我們稱數(shù)組 元素為下標(biāo)變量,3.下標(biāo)變量在數(shù)組中的位置 序號稱下標(biāo),c語言中下標(biāo) 從0開始,7.1 一維數(shù)組的定義和引用 (一)一維數(shù)組的定義 定義方式: 數(shù)據(jù)類型 數(shù)組名常量表達(dá)式 ;,合法標(biāo)識符,表示元素個(gè)數(shù) 下標(biāo)從0開始, :數(shù)組運(yùn)算符 單目運(yùn)

3、算符 優(yōu)先級(1) 左結(jié)合 不能用( ),例 int a10;,編譯時(shí)分配連續(xù)內(nèi)存 內(nèi)存字節(jié)數(shù)=數(shù)組維數(shù)* sizeof(元素?cái)?shù)據(jù)類型),數(shù)組名表示數(shù)組所在內(nèi)存首地址也是a0的地址,是地址常量,定義時(shí) 中不能包含變量, 中常量表達(dá)式的值不能是實(shí)數(shù). 例 int i=15; int datai; (不能用變量定義數(shù)組維數(shù)),數(shù)組必須先定義,后使用 下標(biāo)可以是常量或整型表達(dá)式如: a1 , a2*3 只能逐個(gè)引用數(shù)組元素,不能一次引用整個(gè)數(shù)組 下標(biāo)不要超范圍(越界) 數(shù)組元素地址表示:,例 int a10; printf(“%d”,a); () 必須 for(j=0;j10;j+) printf(

4、“%dt”,aj); (),二、一維數(shù)組的引用,引用形式 : 數(shù)組名 下標(biāo) ,例 int data5; data5=10; /C語言對數(shù)組不作越界檢查,使用時(shí)要 注意,注意: 如果出現(xiàn) a5 = 72 ; 編譯時(shí)不會(huì) 指出錯(cuò)誤, 系統(tǒng)會(huì)將a4后下一個(gè) 存儲單元 賦值為72, 但這樣可能 會(huì)破壞數(shù)組以外其他變量的值,例:下標(biāo)越界危害 數(shù)組定義為 int a5 , 數(shù)組長度為5 ,下標(biāo)在0 - 4之內(nèi), 即a0 - a4,a5,1020,三、 一維數(shù)組的初始化 初始化方式,在定義數(shù)組時(shí),為數(shù)組元素賦初值 (在編譯階段使之得到初值),int a5=1,2,3,4,5; 等價(jià)于:a0=1; a1=2;

5、 a2=3; a3=4; a4=5;,說明: 數(shù)組不初始化,其元素值為隨機(jī)數(shù) 對static數(shù)組元素不賦初值,系統(tǒng)會(huì)自動(dòng)賦以0值,當(dāng)全部數(shù)組元素賦初值時(shí),可不指定數(shù)組長度,如 int a5=6,2,3; 等價(jià)于: a0=6; a1=2;a2=3; a3=0; a4=0; 如 int a3=6,2,3,5,1; (),static int a5; 等價(jià)于:a0=0; a1=0; a2=0; a3=0; a4=0;,只給部分?jǐn)?shù)組元素賦初值,int a=1,2,3,4,5,6; 編譯系統(tǒng)根據(jù)初值個(gè)數(shù)確定數(shù)組維數(shù),3. int a5; a= 1, 2, 3, 4, 5 ; ,4. int a10; f

6、loat i=3; ai=10; ,1. char name0; float weight10.3; int array-100; ,6.int i, a5; for(i=0;i5;i+) scanf(“%d”,2. int i=5; int ai= 1, 2, 3, 4, 5; ,5. int a5; scanf(“%d”, ,討論:以下幾種用法是否正確?,例1 輸入10個(gè)數(shù)放入一個(gè)數(shù)組,然后逆序輸出。,main( ) int i, a10; for (i=0; i=0; i-) printf(“%4d”,ai); ,運(yùn)行結(jié)果如下: 9 8 7 6 5 4 3 2 1 0 程序使a0到a9的

7、值為09,然后按逆序輸出。,程序舉例,例2:如何使兩個(gè)數(shù)組的值相等,/*錯(cuò)誤編程*/ main() int a4=1,2,3,4,b4; b=a; ,解決方法 法1:逐個(gè)元素賦值 b0=a0; b1=a1; b2=a2; b3=a3; 法2:通過循環(huán)賦值 int i; for (i=0;i4;i+) bi=ai;,原因: 數(shù)組名表示數(shù)組的首地址,其值不可改變!,例3: 用數(shù)組求fibonacci數(shù)列的前20個(gè)數(shù) 即:1,1,2,3,5,8,13,#include main( ) int i , f20=1,1; for ( i=2 ; i20 ; i+) fi=fi-2+fi-1; for (

8、 i=0; i20 ; i+) if ( i%5=0 ) printf(“n”); printf(“%12d”, fi ); ,f0 f1 f2 f3 f4 f5 : f19,2,3,5,8,6765,i=2 f2=f0+f1,i=3 f3=f1+f2,i=4 f4=f2+f3,第六章:f1=f1+f2 f2=f2+f1 優(yōu)點(diǎn):占用存儲空間少, 缺點(diǎn):算法復(fù)雜,例4: 線性查找:輸入一個(gè)數(shù)據(jù),在已知數(shù)組中查找是否有該數(shù)據(jù),9,a0 a1 a2 a3 a4 a5 a6 a7 a8 a9,#include main() int i , x ; int a10= 5, 8, 0, 1, 9, 2,

9、6, 3, 7, 4 ; scanf(“%d”, ,改變: #include main() int i , x ,flag=0; int a5= 5, 8, 0, 1, 9; scanf(“%d”, ,#include main() int i , x ; int a5= 5, 8, 0, 1, 9; scanf(“%d”, ,例5 讀10個(gè)整數(shù)存入數(shù)組,找出其中最大值和最小值,步驟: 1. 輸入:for循環(huán)輸入10個(gè)整數(shù) 2. 處理: (a) 先令max=min=x0 (b) 依次用xi和max,min比較(循環(huán)) 若maxxi,令min=xi 3. 輸出:max和min,#include

10、main() int x10,i,max,min; printf(Enter 10 integers:n); for(i=0;ixi) min=xi; printf(Maximum value is %dn,max); printf(Minimum value is %dn,min); ,例6: 用冒泡排序法對6個(gè)數(shù)進(jìn)行排序(從小到大),冒泡排序方法: 依次比較相鄰的兩個(gè)數(shù),將小數(shù)放前面,大數(shù)放后面.經(jīng)過第1輪(共5次比較與交換)后最大的數(shù)9已“沉底” 。再對余下的前面5個(gè)數(shù)進(jìn)行第二輪比較,次大的數(shù)又被安置。 n個(gè)數(shù)排序需要進(jìn)行n-1輪比較,從第1輪到第n-1輪,各輪的比較次數(shù)依次為:n-1次

11、、n-2次 1次,第i輪比較中要進(jìn)行n-i次兩兩比較。,a0 a1 a2 a3 a4 a5,2,7,7,5,4,7,1,4,5,1,5,1,4,1,2,9,9,9,9,9,7,2,5,4,1,初始狀態(tài),第1輪,第2輪,第3輪,第4輪,第5輪,7,#include main( ) int a6 , i , j , t; for ( i=0 ; iaj+1 ) t=aj ; aj=aj+1 ; aj+1=t ; for ( i=0 ; i6 ; i+) printf( “%3d”, ai ); ,用嵌套的for循環(huán)實(shí)現(xiàn)排序 外層循環(huán)控制進(jìn)行幾輪比較 內(nèi)層循環(huán)控制每輪的比較次數(shù),#include m

12、ain( ) int a6 , i , j , t; for ( i=0 ; iaj+1 ) t=aj ; aj=aj+1 ; aj+1=t ; for ( i=0 ; i6 ; i+) printf( “%3d”, ai ); ,輸入6個(gè)數(shù)據(jù),用嵌套的for循環(huán)實(shí)現(xiàn)排序 外層循環(huán)控制進(jìn)行幾輪比較 內(nèi)層循環(huán)控制每輪的比較次數(shù),如果前面的數(shù)大于后面的數(shù),則進(jìn)行交換,否則不做任何改變,輸出排序后的6個(gè)數(shù)據(jù),#define N 6 main( ) int aN , i , j , t; for ( i=0 ; iaj+1 ) t=aj ; aj=aj+1 ; aj+1=t ; for ( i=0 ;

13、 iN ; i+) printf( “%3d”, ai ); ,定義一個(gè)符號常量N代表要排序的數(shù)字個(gè)數(shù),如何推廣到任意個(gè)數(shù)排序?,#include main( ) int a6 , i , j , t; for ( i=0 ; iaj+1 ) t=aj ; aj=aj+1 ; aj+1=t ; for ( i=0 ; i6 ; i+) printf( “%3d”, ai ); ,在進(jìn)行完第二輪比較后,實(shí)際上排序已經(jīng)完成了,從第三輪開始,后面的比較都是多余的。 在這種情況下我們希望可以提前終止比較.,冒泡排序法的特殊情況,a0 a1 a2 a3 a4 a5,第1輪,第2輪,第3輪,第4輪,第5輪

14、,初始狀態(tài),為了解決問題,設(shè)置一個(gè)變量flag,用它記錄在一輪比較中是否進(jìn)行了交換。 在每輪比較開始前flag=0,如果在此輪比較中進(jìn)行了交換,則flag=1,在一輪比較結(jié)束后,判斷flag的值是否為1,如果值為0,說明在此輪比較中沒有進(jìn)行交換(即已經(jīng)完成排序了),此時(shí)可以終止循環(huán)(即結(jié)束排序)。如果flag的值為1,則要繼續(xù)進(jìn)行排序。,#include main( ) int a6 , i , j , t , flag; for ( i=0; iaj+1 ) t=aj ; aj=aj+1 ; aj+1=t ; flag=1; i+ ; while ( flag ) ; for ( i=0 ;

15、 i6 ; i+) printf( “%3d”,ai ); ,例7: 用選擇排序法對6個(gè)數(shù)進(jìn)行排序(從小到大),選擇排序方法: 第1輪比較時(shí),用a0依次與a1到a5 進(jìn)行比較,如果a0較大則進(jìn)行交換,否則不變。第1輪結(jié)束 后,a0中為最小數(shù). 以后各輪比較過程與第1輪類似.,a0 a1 a2 a3 a4 a5,7,9,5,7,4,5,2,4,7,9,5,7,4,5,7,2,9,7,1,2,初始狀態(tài),第1輪,第2輪,第3輪,第4輪,第5輪,7,9,5,7,輸入6 個(gè)數(shù)給a0 到 a5,for i=0 to 5-1,for j=i+1 to 5,aiaj,真,假,aiaj,輸出a0 到 a5,用嵌

16、套的for循環(huán)實(shí)現(xiàn)排序 外層循環(huán)控制進(jìn)行幾輪比較 內(nèi)層循環(huán)控制每輪的比較,#include main( ) int a6 , i , j , t; for ( i=0 ; iaj ) t=ai ; ai=aj ; aj=t ; for ( i=0 ; i6 ; i+) printf( “%3d”, ai ); ,#include main( ) int a6 , i , j , t; for ( i=0 ; iaj ) t=ai ; ai=aj ; aj=t ; for ( i=0 ; i6 ; i+) printf( “%3d”, ai ); ,i=0 時(shí), 要進(jìn)行5次比較, a0與a1比,

17、 a0與a2比 a0與a5比, 最后a0中為最小數(shù),i=1 時(shí), 要進(jìn)行4次比較, a1與a2比, a1與a3比 a1與a5比, 最后a1中為第2小的數(shù),i=2 時(shí), 要進(jìn)行3次比較, a2與a3比, a2與a4比, a2與a5比, 最后a2中為第3小的數(shù) .,用嵌套的for循環(huán)實(shí)現(xiàn)排序 外層循環(huán)控制進(jìn)行幾輪比較 內(nèi)層循環(huán)控制每輪的比較,選擇排序法第二種方法(從小到大),第二種方法: 兩兩比較后并不馬上交換,而是找到最小數(shù)后記下其下標(biāo)P。 在一輪比較完畢后,再將最小的數(shù)一次交換到位。比較次 數(shù)不變,交換次數(shù)減少。,a0 a1 a2 a3 a4 a5,9,1,初始狀態(tài),第1輪,第2輪,第3輪,第

18、4輪,第5輪,2,7,4,7,main() int a6 , i , j , p , temp; for( i=0 ; i6 ; i+) scanf(%d, ,1、第1輪比較 找到所有元素的最小值ap,然后將a0與ap交換,則第1輪結(jié)束后,a0中為最小數(shù). 第1輪找最小值ap的方法:令p=0,掃描a1a5,有小于a0的即令p記錄其下標(biāo),否則p不變.之后比較ap與剩余元素,若有比ap小的,則改變p值,否則p不變.該輪比較結(jié)束時(shí),p記錄的就是最小值的下標(biāo).,2、其他幾輪與此類似,只是不要再動(dòng)已排好的元素.,main() int a6 , i , j , p , temp; for( i=0 ; i

19、6 ; i+) scanf(%d, ,用嵌套的for循環(huán)實(shí)現(xiàn)排序 外層循環(huán)控制進(jìn)行幾輪比較 內(nèi)層循環(huán)控制每輪的比較,例,初始: 49 38 65 97 76 13 27 ,i=1,13,49,一趟: 13 38 65 97 76 49 27 ,i=2,27,38,六趟: 13 27 38 49 65 76 97 ,例8:查找- 折半查找法,前提:數(shù)據(jù)已按一定規(guī)律(升或降序)排列好。 思路:先檢索當(dāng)中的一個(gè)數(shù)據(jù)是否所需,如不是,判斷要找的數(shù)據(jù)在哪一邊,縮小范圍后再按同樣方法繼續(xù)檢索,直到找到或找遍。 算法:設(shè)要找的數(shù)為x,n+1個(gè)數(shù)據(jù)已排好序存放在數(shù)組a中。 a、設(shè)low=0,high=n mi

20、d=(low+high)/2 b、if (x= =amid) 找到了; c、else if (xamid) 說明x在右邊,讓low=mid+1; else 說明x在左邊,讓high=mid-1。 重復(fù)b和c兩步操作, 直到x=mid(找到)或lowhigh(找遍了)為止。,main() int a5=6,12,18,42,44; int low=0,mid,high=4,x; printf(請輸入要查找的數(shù) x=); scanf(%d, ,main() int a5=6,12,18,42,44; int low=0,mid,high=4,x,find=0; printf(請輸入要查找的數(shù) x=

21、); scanf(%d, ,7.2 二維數(shù)組的定義和使用,一、 二維數(shù)組的定義 1. 概念 : 一個(gè)一維數(shù)組, 它的每一個(gè)元素都是類型相同 的一維數(shù)組, 就形成一個(gè)二維數(shù)組,2. 定義形式 : 類型說明符 數(shù)組名 常量表達(dá)式1 常量表達(dá)式2 ; 如: int a34 ;,二維數(shù)組理解,每個(gè)元素ai由包含4個(gè)元素 的一維數(shù)組組成,二維數(shù)組a是由3個(gè)元素組成,3. 存儲形式 : 數(shù)組的元素在內(nèi)存中是連續(xù)存放的 int a33 ; 的存放形式如下 :,a10a11a12,a20a21a22,a00a01a02,a00 a01 a02 a10 a11 a12 a20 a21 a22,1000 1002

22、 1004 1006 1008 1010 1012 1014 1016,二、 二維數(shù)組的引用 數(shù)組元素的表示形式 : 數(shù)組名 下標(biāo) 下標(biāo),注意 : (1) 每個(gè)下標(biāo)都要用 括起來 如 a 2 1 不能寫成 a 2,1 (2) 下標(biāo)從0開始,且不要超過 定義的范圍,三、 二維數(shù)組的初始化定義同時(shí)賦初值 1. 分行初始化 int a34= 1, 2, 3, 4 , 5, 6, 7, 8 , 9, 10, 11, 12 ; 此方法較直觀, 第一對 內(nèi)的數(shù)據(jù)賦給第一行數(shù)組元素, 依次類 推,2. 按數(shù)據(jù)的排列順序?qū)?shù)組元素賦初值 int a34= 1, 2, 3, 4, 5, 6, 7, 8, 9,

23、10, 11, 12; 將數(shù)據(jù)依次賦給元素 a00 , a01 a23,注意: 此方法數(shù)據(jù)無明顯的界限, 當(dāng)數(shù)據(jù)較多時(shí)容易出錯(cuò),3. 對數(shù)組的部分元素賦初值,未賦值元素自動(dòng)取0 int a34= 1,2 , 3 ,4,5,6 ;,int a34= 1,2,3,4,5,6 ;,4. 對數(shù)組的全部元素賦初值時(shí)可以省略第一維的長度(行下標(biāo)), 系統(tǒng)會(huì)根據(jù)數(shù)據(jù)的個(gè)數(shù)和第二維的長度自動(dòng)求出第一維長度, 但第二維下標(biāo)不可省. int b 2= 1, 2, 3, 4, 5, 6, 7, 8 ;,數(shù)組a 第一維長度為 3,數(shù)組b 第一維長度為 4,如僅對部分元素賦初值,要想省略數(shù)組的行數(shù),則必須分行賦值。 i

24、nt a 4= 1, 2 , 0, 3, 4 , 5 ;,例9: 找出34矩陣中最大的數(shù),并輸出其行號和列號,N-S流程圖表示算法 如下:,max,row,col,12,1,2,例9: 找出34矩陣中最大的數(shù),并輸出其行號和列號,max,0,row,0,col,5,9,3,0,12,1,2,#include main( ) int i , j, row=0, col=0 , max ; int a34=5,2,0,9,3,7,12,6,10,4,1,8; max=a00; for ( i=0 ; imax ) max=aij ; row=i ; col=j ; printf(“max=%dn”

25、, max); printf(“max=a%d%dn”, row , col); ,輸出: max=12 max=a12,例10: 將一個(gè)矩陣進(jìn)行轉(zhuǎn)置(即原來的行變?yōu)榱?,第一種情況:矩陣不是方陣mn。,3 7 12 6,10 4 1 8,5 2 0 9,b10,b12,a01,a21,算法:for ( i=0 ; i3 ; i+ ) for (j=0 ; j4 ; j+) bji=aij;,3 7 12 6,10 4 1 8,5 2 0 9,#include main( ) int a34, b43 , i , j ; for ( i=0 ; i3 ; i+ ) for ( j=0 ; j4

26、 ; j+ ) scanf(“%d”, ,a01,b10,a21,b12,例11: 將一個(gè)矩陣進(jìn)行轉(zhuǎn)置(即原來的行變?yōu)榱?,第二種情況:矩陣是方陣nn。,10 4 1,3 7 12,5 2 0,0 1 2,0 1 2,0 1 2,0 1 2,3 7 12,10 4 1,5 2 0,算法一:同非方陣。用兩個(gè)矩陣 for ( i=0 ; i3 ; i+ ) for (j=0 ; j4 ; j+) bji=aij;,例11: 將一個(gè)矩陣進(jìn)行轉(zhuǎn)置(即原來的行變?yōu)榱?,第二種情況:矩陣是方陣nn的。,10 4 1,3 7 12,5 2 0,0 1 2,0 1 2,0 1 2,0 1 2,3 7 12,1

27、0 4 1,5 2 0,算法二:轉(zhuǎn)置后結(jié)果仍放在原矩陣。用一個(gè)矩陣 for(i=0;i=2;i+) for(j=0;j=2;j+) if(ij)/*條件很重要*/ t=aij; aij=aji; aji=t; ,main() int a33,i,j,t; for(i=0;i=2;i+) for(j=0;j=2;j+) scanf(%d, ,例12 讀入下表中值到數(shù)組,分別求各行、各列及表中所有數(shù)之和,main() int x54,i,j; for(i=0;i4;i+) for(j=0;j3;j+) scanf(%d, ,7.3 字符數(shù)組和字符串,字符串常量: China,C語言中不能定義出字符

28、串變量。字符串在內(nèi) 存的存儲位置以及存儲空間通過什么方式才能 得到呢?字符數(shù)組:每個(gè)元素的類型為char型, 即字符型。,字符串指若干有效字符的序列,可以包括 字母、數(shù)字、轉(zhuǎn)義字符等,字符串用0 作為結(jié)束標(biāo)志,回憶字符串知識,一、字符數(shù)組 1. 定義例 char c10, ch34;,2. 字符數(shù)組的初始化 1). 逐個(gè)字符賦值 2). 用字符串常量,7.3 字符數(shù)組和字符串,例 輸出一個(gè)字符數(shù)組,#include main() char c10=I, ,a,m, ,a, ,b,o,y; int i; for(i=0;i10;i+) printf(%c,ci); printf(n); ,二、字

29、符串 1、字符串存放及其結(jié)束標(biāo)志 無字符串變量,用字符數(shù)組處理字符串 字符串結(jié)束標(biāo)志:0,字符串在字符數(shù)組中的存放,數(shù)組名:字符數(shù)組(字符串)在內(nèi)存的首地址。,作為字符串進(jìn)行存儲時(shí),字符串與字符數(shù)組的長度可以不等,系統(tǒng)自動(dòng)加0為結(jié)束標(biāo)志。,字符串在字符數(shù)組中的存放,不能寫成: char s15= China ; 用字符串作初值時(shí),數(shù)組的長度應(yīng)足夠大以便能容納全部字符和 0。,2、字符串的輸入輸出 逐個(gè)字符I/O: %c 整個(gè)字符串I/O: %s,例 用%c main() char str5; int i; for(i=0;i5;i+) scanf(“%c”, ,例 用%s main() cha

30、r str5; scanf(“%s”, str); printf(“%s”, str); ,用字符數(shù)組名,不要加 printf(“%s”,a); ,main( ) char a =“Hello”; printf(“%s”,a); ,結(jié)果:Hello#-=*,結(jié)果:Hello,printf的s輸出字符串,main() char a=h,e,l,0,l,o,0; printf(%s,a); ,輸出:hel,數(shù)組中有多個(gè)0時(shí),遇第一個(gè)結(jié)束,用“%s”輸出時(shí),遇0結(jié)束,main() int i; char a5; scanf(%s,a); for(i=0;i5;i+) printf(%d,ai); ,

31、運(yùn)行情況: (1)若輸入 hel , 正常 (2)若輸入 hell , 正常 (3)若輸入 hello , 用%s 輸出時(shí),會(huì)出現(xiàn)問題,輸入字符串長度數(shù)組維數(shù),scanf的s輸入字符串,scanf的s輸入字符串,#include 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=How,scanf中%s輸入

32、時(shí),遇空格或回車結(jié)束,3、常用的字符串處理函數(shù) 包含在頭文件 string.h,(1)字符串輸出函數(shù)puts 格式:puts(字符數(shù)組) 功能:向顯示器輸出字符串(輸出完,換行) 說明:字符數(shù)組必須以0結(jié)束,(2)字符串輸入函數(shù)gets 格式:gets(字符數(shù)組) 功能:從鍵盤輸入一以回車結(jié)束的字符串放入字符數(shù)組中, 并自動(dòng)加0 說明:輸入串長度應(yīng)小于字符數(shù)組維數(shù),例 #include main( ) char string80; printf(“Input a string:”); gets(string); puts(string); 輸入: How are you? 輸出: How ar

33、e you ?,#include main() char s180 = “C Language”; char s280= Program; printf(%s, s1); printf(%s, s2); ,運(yùn)行結(jié)果為: C LanguageProgram,討論: printf ()和puts()函數(shù)一次輸出整個(gè)字符串區(qū)別,#include main() char s180 = “C Language”; char s280= Program; puts(s1); puts(s2); ,運(yùn)行結(jié)果為: C Language Programe,注意:puts()函數(shù)輸出字符串后自動(dòng)換行,#inclu

34、de main() char a15,b5,c5; scanf(%s,a); printf(a=%sn,a); ,運(yùn)行情況: 輸入:How are you? 輸出:a=How,#include main() char a15,b5,c5; gets(a); printf(a=%sn,a); ,使用scanf()的%s整體輸入,空格或回車結(jié)束 使用 gets() 函數(shù),只以回車鍵結(jié)束輸入,運(yùn)行情況: 輸入:How are you? 輸出:a= How are you?,討論:scanf()的%s與gets() 函數(shù)的區(qū)別?,(3)字符串連接函數(shù)strcat 格式:strcat(字符數(shù)組1,字符數(shù)

35、組2) 功能:把字符數(shù)組2連到字符數(shù)組1后面 返值:返回字符數(shù)組1的首地址 說明:字符數(shù)組1必須足夠大 連接前,兩串均以0結(jié)束;連接后,串1的0取消, 新串最后加0,(4)字符串拷貝函數(shù)strcpy 格式:strcpy(字符數(shù)組1,字符串2) 功能:將字符串2,拷貝到字符數(shù)組1中去 返值:返回字符數(shù)組1的首地址 說明:字符數(shù)組1必須足夠大 拷貝時(shí)0一同拷貝 不能使用賦值語句為一個(gè)字符數(shù)組賦值,例 char str120,str220; str1=“Hello!”; () str2=str1; (),strcpy與strcat舉例,#include #include void main() ch

36、ar destination25; char blank = , c = C+, turbo = Turbo; strcpy(destination, turbo); strcat(destination, blank); strcat(destination, c); printf(%sn, destination); ,Turbo C+,(5)字符串比較函數(shù)strcmp 格式:strcmp(字符串1,字符串2) 功能:比較兩個(gè)字符串 比較規(guī)則:對兩串從左向右逐個(gè)字符比較(ASCII碼), 直到遇到不同字符或0為止 返值:返回int型整數(shù),a. 若字符串1 字符串2, 返回正整數(shù) c. 若字

37、符串1= 字符串2, 返回零 說明:字符串比較不能用“=”,必須用strcmp,字符串比較的規(guī)則: 比較兩個(gè)字符串中從左到右依次對應(yīng)字符的 ASCII碼值,char s80= IBM; int n; if(strcmp(s, COMPUTER )0) n=1; if(strcmp(s, COMPUTER )=0) n=0; if(strcmp(s, COMPUTER )0) n=-1;,運(yùn)行結(jié)果: n =1,(6)字符串長度函數(shù)strlen 格式:strlen(字符數(shù)組) 功能:計(jì)算字符串長度 返值:返回字符串實(shí)際長度,不包括0在內(nèi),例 對于以下字符串,strlen(s)的值為: (1)cha

38、r s10=A,0,B,C,0,D; (2)char s =“tv0willn”; (3)char s =“x69082n”;,答案:1 3 1,#include string.h main() int m,n; char str80=C language; m=strlen(str); n=sizeof(str); printf(m is %dn n is %dn ,m,n);,程序的運(yùn)行結(jié)果: m is 10 n is 80,#include #include main() char str1 = ”Hello!, str2 = ”How are you?”,str20; int len1

39、,len2,len3; len1=strlen(str1); len2=strlen(str2); if(strcmp(str1, str2)0) strcpy(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); ,例 strcmp與strlen舉例,How are you?Hello! Len1=6,Len2=12,Len3=18,三、二維字符數(shù)組與一組字符串,char str410= W, a, n, g, c, h, e, n, g,0, L, i, 0, J, i, a, n, g, 0, S, u, n, 0 ;,等價(jià)于: char str410= Wangcheng, Li, Jiang, Sun;,三、二維字符數(shù)組與一組字符串,char str410= Wangcheng, Li, Jiang, Sun ;,說明: (1)可以使用二維字符數(shù)組存儲一組字符串,,第一維的長度(即行數(shù))取決于字符串的個(gè)數(shù) ,,第二維的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論