




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第七章 數(shù) 組(The Array)掌握一維數(shù)組、二維數(shù)組的定義、初始化和引用。掌握字符串和字符數(shù)組的概念及其處理函數(shù)。掌握用數(shù)組進行編程的技術(shù)。 先看一個例子:例:給出10個兒童的體重,要求計算平均體重 并打印出低于平均體重的數(shù)值。用變量來解決問題:main() int w1, w2, w3, w4, w5, w6, w7, w8, w9, w10; int t; scanf( %d%d%d%d%d%d%d%d%d%d,&w1, &w2, &w3, w4, &w5 , &w6, &w7, &w8, &w9, &w10); t=(w1+w2+w3+w4+w5+w6+w7+w8+w9+w10)/
2、10; if( w1 t ) printf( %dn, w1 ); if( w2 t ) printf( %dn, w2 ); if( w3 t ) printf( %dn, w3 ); if( w4 t ) printf( % dn, w4 ); if( w5 t ) printf( %dn, w5 ); if( w6 t ) printf( %dn, w6 ); if( w7 t ) printf( %dn, w7 ); if( w8 t ) printf( %dn, w8 ); if( w9 t ) printf( %dn, w9 ); if( w10 t ) printf( %dn,
3、w10 );用數(shù)組來解決問題:main() int w10; /* 定義 1 個整型數(shù)組存放體重 */ int t, i; for( i=0; i10; i+ ) scanf( %d, &wi ); for( t=0; i=0; i10; i+ ) t = t + wi; t = t/10; for( i=0; i10; i+ ) if( wi t ) printf( %dn, wi );數(shù)組及其相關(guān)概念 數(shù)組是一組有序的、類型相同的數(shù)據(jù)的集合,這些數(shù)據(jù)被稱為數(shù)組的元素。數(shù)組下標 每個數(shù)組都有一個名字,稱之為數(shù)組名。 為標識數(shù)組中的每個元素,需要對它們進行編號,稱為數(shù)組元素的下標。 下標使數(shù)組
4、元素在數(shù)組中的位置(或排列順序)被唯一地確定下來;用數(shù)組名加上下標可以準確地訪問數(shù)組中的某個元素。如:w0代表數(shù)組w中的第一個元素 w9代表數(shù)組w中的第十個元素 注意:C語言規(guī)定下標從0開始。說明:數(shù)組名代表數(shù)組的起始地址。 數(shù)組元素在內(nèi)存中是連續(xù)存儲的。7.1 一維數(shù)組的定義和引用(One Dimension Array)一、一維數(shù)組的定義定義一維數(shù)組的一般方式: 類型說明符 數(shù)組名常量表達式;指明數(shù)組元素的數(shù)據(jù)類型指明數(shù)組所含的元素個數(shù)例如:int a10; /*定義的整型數(shù)組a含10個元素*/ float b20; /*定義的實型數(shù)組b含20個元素*/說明: 數(shù)組名的命名規(guī)則同變量名的命
5、名規(guī)則一樣;數(shù)組名后用方括號 ,不能用();常量表達式必須是大于0的整型常量表達式,不 能包含變量,即其大小不依賴運行過程中變量值;(4)定義數(shù)組時,數(shù)組的長度必須是確定的,C語言 不允許對數(shù)組的大小作動態(tài)定義,。int a(10); 例如:int n;int anchar name0; float weight10.3;float array-100;二、一維數(shù)組的初始化1 .定義時初始化方法:將初值依次寫在花括號 內(nèi)。如: int a5= 2 , 4 , 6 , 8 , 10 ;存儲形式:存儲單元說明:如果定義一維數(shù)組時給出了全部元素的初值,則數(shù)組的下標允許省略。此時編譯系統(tǒng)自動根據(jù)初始化
6、數(shù)據(jù)的個數(shù)來確定數(shù)組的長度。如: int a = 2 , 4 , 6 , 8 , 10 ; int a ; 初始化的數(shù)據(jù)個數(shù)允許少于數(shù)組的長度,但不能多于數(shù)組的長度。當初始化的數(shù)據(jù)個數(shù)(至少要有一個)少于數(shù)組的長度時,未初始化部分將被編譯系統(tǒng)自動用 0 賦值。如:int a5= 2 , 4 ; 相當于:a0=2, a1=4, a2=0, a3=0, a4=0 int a5=1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ; 2 .使用其它方法初始化利用輸入語句初始化main() char as26; int i ; for(i=0; i26; i+) scanf(%c,&asi);
7、 .利用賦值語句初始化main() char as26,ch; for(ch=A;ch=Z;ch+) asch-A=ch; .三、一維數(shù)組的引用 數(shù)組元素類似于單個變量,可以自由地存取。但是,它與一般變量相比,有以下特殊之處:數(shù)組元素是通過數(shù)組名加上該元素在數(shù)組中的位置(即數(shù)組元素的下標)來訪問的。 表示形式: 數(shù)組名下標 如: a3 其中,下標可以是整型常量、整型變量或整型表達式。如: int a10 ; float i=3 ; ai=10 ;數(shù)組元素的下標是從0開始的。 如果定義了an,則可使用a0、a1、an-1。但是,不能使用an。 C語言編譯系統(tǒng)不檢查數(shù)組下標越界的錯誤,在編程的時候
8、要注意避免這種錯誤。如:int a2; scanf(“%d,%d”,&a1,&a2); 數(shù)組元素的賦值是逐個元素進行的,不允許把一個數(shù)組作為一個整體賦給另一個數(shù)組。除了數(shù)組初始化外,也不允許用在花括號中列表的方式對數(shù)組整體賦值。例1: int a5= 2 , 4 , 6 , 8 , 10 , b5 ; b5=a5 ;例2 :int a5 ; a5= 2 , 4 , 6 , 8 , 10 ;數(shù)組名a代表的是數(shù)組a在內(nèi)存中的首地址,因此,可以用數(shù)組名a來代表數(shù)組元素a0的地址。 等價于scanf(“%d”,&a0); scanf(“%d”,a); 四、一維數(shù)組應用舉例例1:從鍵盤上輸入10個實型數(shù)
9、存入數(shù)組,然 后按輸入順序的逆序輸出這10個數(shù)。main() float a10; int i; for(i=0 ; i=0 ; i-) printf(“%10.2f”,ai);例7.2:用數(shù)組來處理求斐波納契數(shù)列: 1,1,2,3,5,8的前20個數(shù)。main() int f20=1,1; for(i=2 ; i20 ; i+) /*f2是數(shù)組第3個元素*/ fi=fi-2+fi-1; for(i=0 ; i20 ; i+) printf(“%10d”,fi); if(i%2=0) printf(“n”); /*每行打印2個數(shù)*/ 數(shù)學表示:f(0)=f(1)=1, f(n)=f(n-2)+
10、f(n-1)例7.3:用冒泡法對n=6個數(shù)排序(由小到大)。冒泡法的思路是:將相鄰兩個數(shù)比較,將小的 調(diào)到前頭。 9 8 8 8 8 8 8 9 5 5 5 5 5 5 9 4 4 4 4 4 4 9 2 2 2 2 2 2 9 0 0 0 0 0 0 9 第一輪排序,比較了5次 ,獲得第一次結(jié)果。輪數(shù) 剩數(shù) 比較次數(shù) j= n-j+1 n-11n-1 1 6 5 2 5 4 3 4 3 4 3 2 5 2 1 main() int a7, i , j , t ; printf(Input 6 numbers : n); for(i=1 ; i7 ; i+) scanf(%d,&ai); pr
11、intf(n); for(j=1 ; j=5 ; j+) /* 控制5輪排序 */ for(i=1 ; iai+1) t=ai; ai=ai+1; ai+1=t; for(i=1 ; i=6 ; i+) printf(%d,ai);main() int a6, i , j , t ; printf(Input 6 numbers : n); for(i=0 ; i6 ; i+) scanf(%d,&ai); printf(n); for(j=0 ; j=4 ; j+) /* 控制5輪排序 */ for(i=0 ; iai+1) t=ai; ai=ai+1; ai+1=t; for(i=0 ;
12、i=5 ; i+) printf(%d,ai);7.2 二維數(shù)組的定義和引用先看一個例子: 某校近三年招收各專業(yè)本科生人數(shù)如下: 計算機 電子 管理 數(shù)學 2019 90 40 80 30 2000 100 50 90 40 2019 95 45 100 50 要把這些數(shù)據(jù)組織起來,可以有兩種選擇: 按從左到右從上到下的順序存入一個一維數(shù) 組中。(查詢困難) 每年用一個一維數(shù)組,把這些數(shù)據(jù)分別存入 三個數(shù)組中。 (增加一年數(shù)據(jù)困難)一、二維數(shù)組的定義 定義二維數(shù)組的一般方式:類型說明符 數(shù)組名常量表達式1常量表達式2; 如: int a34; 存儲形式: 二維數(shù)組在內(nèi)存中是按行的順序存放的,即
13、先存放第一行的元素,再存放第二行的元素。 說明:二維數(shù)組除了維數(shù)比一維數(shù)組多一維外, 其它性質(zhì)與一維數(shù)組是全部類似的。 看看下面寫法是否正確? int a03; 用于定義數(shù)組長度的常量表達式的值必須是大于0的正整數(shù)。 int i=3 , j=4 ; int aij ; 定義數(shù)組元素的個數(shù)必須使用常量表達式,而不能使用變量。 二、二維數(shù)組的初始化 這里主要介紹定義時初始化,其它方法初始化和一維數(shù)組類似。定義時初始化有兩種方法: 分行初始化 例如:int a23=1 , 2 , 3 , 4 , 5 , 6 ; 省略掉內(nèi)層的花括號 即按數(shù)組元素在內(nèi)存中排列的順序賦初值。 例如:int a23=1 ,
14、 2 , 3 , 4 , 5 , 6 ;說明: 對二維數(shù)組初始化時,可以只對部分數(shù)組元素初始化,未被初始化的數(shù)組元素將自動賦 0 。int a23=5,6,7,8;int a23=5,6,7,8;如:得到的數(shù)組為: 5 6 0 7 8 0得到的數(shù)組為: 5 6 7 8 0 0對二維數(shù)組初始化時,如果對全部元素都賦初值,或分行賦初值(每行至少一個數(shù)據(jù)),則可以省略第一維數(shù)組長度。但是,第二維數(shù)組長度不允許省略。如:int a3=1,2,3,4,5,6,7,8,9;int a4=1,2,3,4,5,6,7;系統(tǒng)按3行處理 int a10=1,0; float f2=1.1,2.2; 三、二維數(shù)組的
15、引用 與引用一維數(shù)組元素一樣,是用下標法引用二維數(shù)組元素的。表示形式: 數(shù)組名行下標列下標 其中,行下標和列下標是整型常量、整型變量或整型表達式。其編號是從0開始的。例如:若有 int a2*53*4, i=15; 則使用 a3*30, a1i-5都是合法的。說明:(1)數(shù)組名a代表的是a在內(nèi)存中的首地址,因此可以用數(shù)組名a來代表數(shù)組元 素a00的地址。例如:若有 int a34, 設(shè)a的首地址為2000,則aij的地址為2000+i*3+j*4; a00的地址為2000,與a相同。(2)二維乃至多維數(shù)組是若干個比其低一維的數(shù)組的集合。換句話說,二維乃至多維數(shù)組可以化成多個降低維數(shù)后的數(shù)組使用
16、。例如:若有 int a34,則等價于有了3個一維整型數(shù)組a0,a1,a2。四、二維數(shù)組應用舉例例1:使用數(shù)組保存“九九乘法表”,然后輸出。main() int a991010, i, j ; for(i=1; i 10; i+) for(j=1; j=i; j+) a99ij=i*j; for(i=1; i10; i+) for(j=1;j=i; j+) printf(%6d,a99ij); printf(n); 例7.4:矩陣的轉(zhuǎn)置。(書中例7.4)a=1 2 34 5 6b=1 4 2 53 6轉(zhuǎn)換成main() int a23=1,2,3,4,5,6; int b32, i,j; pr
17、intf( array a:n); for(i=0;i=1;i+) for(j=0;j=2;j+) printf(%5d,aij); bji=aij; printf(n); printf(n array b:n); for(i=0;i3;i+) for(j=0;j2;j+) printf(%6d,bij); printf(n); 例7.5:求3*4數(shù)組中的最大值及其下標。main() int max,row,colum,i,j; int a4=1,2,3,4,9,8,7,6,-10,10,-5,2; max=a00; for(i=0;i3;i+) for(j=0;jmax) max=aij;
18、row=i; colum=j; printf(max=%d,row=%d,colum=%d,max,row,colum);7.3 字符數(shù)組和字符串 (Character Array and Strings)一、字符數(shù)組(Character Array ) 當數(shù)組的元素類型為字符型時,被稱為字符數(shù)組。如:char c10; 則c為字符數(shù)組。 字符數(shù)組的定義、初始化和元素的引用與一般的數(shù)組相同。如:main() char ch5=c, h , i , n , a; for(i=0; i5; i+) printf(“%c”,chi); 說明:定義字符數(shù)組的類型說明符一般為char, 如: char
19、c10; 由于字符型與整型的互相通用性, 因此,上面定義也可改為:int c10;初始化賦值的字符個數(shù)允許少于字符數(shù)組的長度,但不能多于字符數(shù)組的長度。當初始化賦值的字符數(shù)(至少要有一個)少于字符數(shù)組的長度時,未初始化部分將被編譯系統(tǒng)自動用空字符0 賦值。如:int c8=H,e,l,l,o; 則:c0=H, c1= e, c2= l, c3= l, c4= ,o c5=0, c6=0, c7=0二、字符串與字符數(shù)組 字符串常量是用雙引號括起來的一串字符,由系統(tǒng)自動加上一個字符串結(jié)束標志0。它占內(nèi)存,但不記入字符串長度。如:“china” 占內(nèi)存6個字節(jié),但字符串長度是5 在C語言中用字符數(shù)組
20、來處理字符串,每個數(shù)組元素存放一個字符型數(shù)據(jù)。 字符型數(shù)組可用一般數(shù)組的初始化方式初始化外,還可以使用字符串常量初始化:如:char message=“Hello”; 或 char message=“Hello”; (這時,字符數(shù)組長度是6,字符串長度是5。)注意:它與一般初始化方式: char message=H, e, l, l, o; 初始化的結(jié)果是不同的。 用一般初始化方式結(jié)果: H e l l o用字符串常量初始化 : H e l l o 0說明:字符數(shù)組本身并不要求它的最后一個元素一定是0,例如:char ch2=A, B;是合法的。當定義字符數(shù)組用字符串常量賦初值時,最后有一個元
21、素其值為0。為了使處理方法一致,在字符數(shù)組中也常常人為地加上一個值為0的元素。如:char message=H, e, l, l, o, 0;例7.7 輸出一個鉆石圖形main() char diamond5 = , ,*, ,*, ,*,*, , , ,*, ,*, ,*, , ,*; int i,j; for(i=0;i5;i+) for(j=0;j5;j+) printf(“%c”,diamondij); printf(“n”); * * * * * * * *三、字符數(shù)組的輸入輸出字符數(shù)組的輸入輸出可以有以下兩種方法:逐個字符輸入輸出 用格式符“%c”輸入或輸出一個字符。將整個字符串一
22、次輸入或輸出 用格式符“%s”輸入輸出字符串。例如:char c=“Hello” ; printf(“%s”, c) ;注意:輸出字符不包括結(jié)束符0。用“%s”格式符輸出字符串時,printf函數(shù)的 輸出項是字符數(shù)組名,而不是數(shù)組元素名。main() char a5; int i=0; while(i0; 串1串2 則:n= n=0; 串1=串2 n0; 串10) puts(str1);注意:不能寫成 if(str1str2)strcmp(“China”,”Korea”);3.字符串連接strcat()函數(shù) 使用形式: strcat(字符數(shù)組1,字符串2)功能:連接兩個字符串,把字符串2連接到
23、字符 串1的后面,連接后的字符串放在字符 數(shù)組1中。 說明:字符數(shù)組1必須足夠大以便能夠容納字符串2。 連接時只在新串最后保留一個0。 4. 字符串復制strcpy()函數(shù) 使用形式: strcpy(字符數(shù)組1,字符串2 )功能:將字符串2復制到字符數(shù)組1中 (其后自動加一個0)。例如:char str120, str210 ; strcpy(str1,“hello world”); strcpy(str2,str1); 其中,字符串2可以是字符串常量或字符數(shù)組。 Strcpy使用舉例: #include #includemain()char filewing20=wing.txt”,file
24、hori20=fuselage.txt”,filefuse20=“tail.txt“; cout“請輸入飛機部件類型 n; cout1-機翼n; cout2-機身n; cout3-尾翼numpart; switch(numpart) case 1: strcpy(filedes,filewing);cout“正在計算機翼, 請稍等.”;break; case 2: strcpy(filedes,filehori);cout正在計算機身, 請稍等.;break; case 3: strcpy(filedes,filefus1);cout“正在計算尾翼, 請稍等.;break; case 4: d
25、efault; ifstream in(filedes,ios:in); if(!in)coutcannot open Inputfile n;exit(1);說明:字符數(shù)組1必須足夠大以便能夠容納被 復制的字符串。 不能用賦值語句將一個字符串常量或字符 數(shù)組直接賦值給一個字符數(shù)組。 例如:char str120, str220; str1=“hello”; str2=str1 ;5.將字符串中大寫字母換成小寫字母strlwr()函數(shù) 使用形式: strlwr(字符串 )6.將字符串中小寫字母換成大寫字母strupr函數(shù)使用形式: strupr(字符串 )五、字符數(shù)組應用舉例例1:(例題7.8
26、)統(tǒng)計字符串中的單詞數(shù)。 #include main() char string81,c; int i,num=0,word=0; gets(string); for(i=0;stringi!=0;i+) if(stringi= ) word=0; else if(word= =0)word=1;num+; printf(“nThere are %d words.”, num);I am a boys0word=0(后面是單詞)s= word=0num+word=1(后面不是單詞)YYNYNNI am a boy學習數(shù)組這一章要注意的幾個問題:1.在C語言中數(shù)組的下標是從0開始;2.C語言不進
27、行下標的越界檢查,不論是在編譯階段還是 在運行階段,這個問題交給程序員。這樣就給初學者 帶來一定的風險。3.數(shù)組名是地址,這在字符串處理中已經(jīng)看到,這個我 們要先強記,以后在講指針時再詳細講。4.字符數(shù)組在定義時必須考慮到串結(jié)束符的位置,因為 它要占一個字符的位置.5.要注意數(shù)組初始化的方法與簡單變量的區(qū)別,特別是 字符數(shù)組的初始化方法。6.字符串的操作有許多專用函數(shù),請注意掌握并運用。本章作業(yè):1.復習本章內(nèi)容,將書中例題看懂,會獨立編寫。2.編寫并上機調(diào)試下列習題:1)用冒泡法對任意輸入的n個數(shù)( n10 )排序(由大到?。?。2)矩陣的轉(zhuǎn)置。a=1 2 3 46 7 89 10 11 12b=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年版企業(yè)融資合同范本
- 化學專業(yè)培訓課件
- 企業(yè)財稅知識
- 功能性腸病的健康宣教
- 公寓天花吊頂合同標準文本
- 個人雇傭合同標準文本標準文本
- 企業(yè)貿(mào)易合同標準文本
- 儲值卡服務合同標準文本
- 臨時超過租房合同范例
- 2025環(huán)保能源項目BOT合同
- 人教版五年級上冊科學第五單元《太陽能熱水器》單元試題(含答案)
- 【骨科-關(guān)節(jié)資料】髕股關(guān)節(jié)置換
- 執(zhí)業(yè)助理醫(yī)師報考執(zhí)業(yè)醫(yī)師執(zhí)業(yè)期考核證明【范本模板】
- 矯治器及其制作技術(shù)-固定矯治器(口腔正畸學課件)
- 新概念二冊課文電子版
- CNAS-GL039 分子診斷檢驗程序性能驗證指南
- 2018年中考化學雙向細目表
- 院內(nèi)按病種分值付費(DIP)專題培訓
- DBJ51-143-2020 四川省公共建筑節(jié)能設(shè)計標準
- 全國英語等級考試一級真題及答案
評論
0/150
提交評論