譚浩強C程序設計(第三版)課件-第7章-數(shù)組_第1頁
譚浩強C程序設計(第三版)課件-第7章-數(shù)組_第2頁
譚浩強C程序設計(第三版)課件-第7章-數(shù)組_第3頁
譚浩強C程序設計(第三版)課件-第7章-數(shù)組_第4頁
譚浩強C程序設計(第三版)課件-第7章-數(shù)組_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第七章,數(shù)組,譚浩強,問題:給一組數(shù)排序,這組 數(shù)該 如何存放呢,? 這些數(shù)據(jù)如何存放才便于排序,1,8,8,8,8,8,8,8,8,8,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,8,8,8,8,8,8,8,8,8,本章要點,掌握一維、二維數(shù)組的定義和引用方法、存儲結構和初始化方法。 掌握有關一維數(shù)組的有關算法 掌握數(shù)組的運算。,主要內(nèi)容,7.1 一維數(shù)組的定義和引用 7.2 二維數(shù)組的定義和引用 7.3 字符數(shù)組,7.1 一維數(shù)組的定義和引用,C語言為這些數(shù)據(jù),提供了一種構造數(shù)據(jù)類型:數(shù)組。所謂數(shù)組就是一組具有相同數(shù)據(jù)類型的數(shù)據(jù)的有序集合。,一個班學生的學習成績 一

2、行文字 一個矩陣 這些數(shù)據(jù)的特點是: 1.具有相同的數(shù)據(jù)類型 2.使用過程中需要保留原始數(shù)據(jù),1.一維數(shù)組的定義格式為: 類型說明符 數(shù)組名常量表達式; 例如: int a10; 它表示定義了一個整形數(shù)組,數(shù)組名為a,此數(shù)組有10個元素。,7.1.1一維數(shù)組的定義,說明: 1.數(shù)組名定名規(guī)則和變量名相同,遵循標識符定名規(guī)則。,2.在定義數(shù)組時,需要指定數(shù)組中元素的個數(shù),方括弧中的常量表達式用來表示元素的個數(shù),即數(shù)組長度。 3.常量表達式中可以包括常量和符號常量,但不能包含變量。也就是說,C語言不允許對數(shù)組的大小作動態(tài)定義,即數(shù)組的大小不依賴于程序運行過程中變量的值。,例如: int n; sc

3、anf(“%d,,數(shù)組說明中其他常見的錯誤: float a0; /* 數(shù)組大小為0沒有意義 */ int b(2)(3); /* 不能使用圓括號 */ int k, ak; /* 不能用變量說明數(shù)組大小*/,2.一維數(shù)組在內(nèi)存中的存放,每個數(shù)據(jù)元素占用的字節(jié)數(shù),就是基類型的字節(jié)數(shù) 一個元素占4個字節(jié),一維數(shù)組: float mark100;,注意: 定義數(shù)組時用到的“數(shù)組名常量表達式” 和引用數(shù)組元素時用到的“數(shù)組名下標” 是有區(qū)別的。 例如 int a10; t=a6;,7.1.2一維數(shù)組元素的引用,1.數(shù)組元素的引用方式 數(shù)組名下標 下標可以是整型常量或整型表達式。 例如: a0=a5+

4、a7-a2*3,2.一維數(shù)組元素引用的程序?qū)嵗?#include void main() int i,a10; for (i=0; i=0; i-) printf(%d ,ai); printf(n); ,運行結果如下: 9 8 7 6 5 4 3 2 1 0 程序使a0到 a9的值為09,然后按逆序輸出。,對數(shù)組元素初始化的實現(xiàn)方法:,1.在定義數(shù)組時對數(shù)組元素賦以初值。 例如:int a10=0,1,2,3,4,5,6,7,8,9; 將數(shù)組元素的初值依次放在一對花括弧內(nèi)。經(jīng)過上面的定義和初始化之后,a0=0,a1=1,a2=2,a3=3,a4=4,a5=5,a6=6,a7=7,a8=8,a

5、9=9。,7.1.3一維數(shù)組的初始化,3. 如果想使一個數(shù)組中全部元素值為0,可以寫成: int a10=0,0,0,0,0,0,0,0,0,0; 或inta10=0; 不能寫成:int a10=0*10;,2. 可以只給一部分元素賦值。 例如: int a10=0,1,2,3,4; 定義a數(shù)組有10個元素,但花括弧內(nèi)只提供5個初值,這表示只給前面5個元素賦初值,后5個元素值為0。,4. 在對全部數(shù)組元素賦初值時,由于數(shù)據(jù)的個數(shù)已經(jīng)確定,因此可以不指定數(shù)組長度。 例如:int a5=1,2,3,4,5; 也可以寫成 int a=1,2,3,4,5; int a10=1,2,3,4,5; 只初始

6、化前5個元素,后5個元素為0。,例7-1:用數(shù)組來處理,求解Fibonacci數(shù)列。,程序?qū)嵗?#include void main() int i; int f20=1,1;,Fibonacci數(shù)列公式:已知: a1=a2=1 an=an-1+an-2 即:1,1,2,3,5,8,13,7.1.4一維數(shù)組程序舉例,for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;i20;i+) if(i%5=0) printf(n); printf(%12d,fi) /*For循環(huán)結束*/ /*程序結束*/,運行結果如下: 1 1 2 3 5 8 13 21 34 55 89 1

7、44 233 377 610 987 1597 2584 4181 6765,if語句用來控制換行,每行輸出5個數(shù)據(jù)。,程序舉例2:用起泡法對10個數(shù)排序(由小到大)。,經(jīng)過第一趟(共5次比較與交換)后,最大的數(shù)9已“沉底” 。然后進行對余下的前面5個數(shù)第二趟比較,,如果有n個數(shù),則要進行n-1趟比較。在第1趟比較中要進行n-1次兩兩比較,在第j趟比較中要進行n-j次兩兩比較。,程序流程圖如下:,程序?qū)嵗?.3: #include void main() int a10; int i,j,t; printf(input 10 numbers :n); for (i=0;i10;i+) scan

8、f(%d,,for(j=0;jai+1) t=ai;ai=ai+1; ai+1=t; printf(the sorted numbers :n); for(i=0;i10;i+) printf(%d ,ai); printf(n); /*程序結束*/,程序運行結果如下: input 10 numbers: 1 0 4 8 12 65 -76 100 -45 123 the sorted numbers: -76 -45 0 1 4 8 12 65 100 123,7.2 二維數(shù)組的定義和引用,7.2.1二維數(shù)組的定義,二維數(shù)組定義的一般形式為 類型說明符 數(shù)組名常量表達式常量表達式; 例如:定

9、義a為34(3行4列)的數(shù)組,b為510(5行10列)的數(shù)組。如下: float a34,b510;,不能寫成 float a3,4,b5,10;,注意:我們可以把二維數(shù)組看作是一種特殊的一維數(shù)組:它的元素又是一個一維數(shù)組。 例如:可以把a看作是一個一維數(shù)組,它有3個元素:a0、a1、a2,每個元素又是一個包含4個元素的一維數(shù)組。,7.2.1二維數(shù)組的定義,二維數(shù)組中的元素在內(nèi)存中的排列順序是:按行存放,即先順序存放第一行的元素,再存放第二行的元素,一維數(shù)組在內(nèi)存中的存放,下圖表示對a34數(shù)組存放的順序,地址 值 數(shù)組元素,b00 b01 b02 b10 b11 b12 b20 b21 b22

10、,3000H 3002H 3004H 3006H 3008H 300AH 300CH 300EH 3010H,例如:整型數(shù)組 b33= 1,2,3, 4,5,6, 7,8,9 ;,1 2 3,4 5 6,789,問題:有了二維數(shù)組的基礎,那么多維數(shù)組如何定義呢?,定義三維數(shù)組: float a234; 注意:多維數(shù)組元素在內(nèi)存中的排列順序: 第一維的下標變化最慢,最右邊的下標變化最快。,7.2.1二維數(shù)組的定義,三維數(shù)組的元素排列順序,二維數(shù)組元素的表示形式為: 數(shù)組名下標下標 例如: a23 下標可以是整型表達式,如 a2-12*2-1,數(shù)組元素可以出現(xiàn)在表達式中,也可以被賦值 例如:b12

11、=a23/2,7.2.2 二維數(shù)組的引用,常出現(xiàn)的錯誤有: int a34; /* 定義a為34的數(shù)組 */ a34=3;,在使用數(shù)組元素時,應該注意下標值應在已定義的數(shù)組大小的范圍內(nèi)。,可以用下面4種方法對二維數(shù)組初始化:,數(shù)據(jù)類型 數(shù)組名 常量表達式1常量表達式2 初始化數(shù)據(jù) ;,.分行給二維數(shù)組賦初值。 例如: int a34=1,2,3,4,5,6,7,8,9,10,11,12;,.可以將所有數(shù)據(jù)寫在一個花括號內(nèi),按數(shù)組排列的順序?qū)Ω髟刭x初值。 例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;,7.2.3二維數(shù)組的引用,.可以對部分元素賦初值。 例如: i

12、nt a34=1,5,9;,1 0 0 0 5 0 0 0 9 0 0 0,也可以對各行中的某一元素賦初值,如 int a34=1,0,6,0,0,11;,1 0 0 0 0 6 0 0 0 0 0 11,1 0 0 0 5 6 0 0 0 0 0 0,也可以只對某幾行元素賦初值。如: int a34=1,5,6;,.如果對全部元素都賦初值,則定義數(shù)組時對第一維的長度可以不指定,但第二維的長度不能省。 例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;它等價于:int a4=1,2,3,4,5,6,7,8,9,10,11,12;,在定義時也可以只對部分元素賦初值而省略

13、第一維的長度,但應分行賦初值。 例如:int a4=0,0,3,0,10;,0 0 3 0 0 0 0 0 0 10 0 0,7.2.4二維數(shù)組程序舉例,例7.4 將一個二維數(shù)組行和列元素互換,存到另一個 二維數(shù)組中。,#include void main() 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); printf(array b:n); for (i=0;i=2;i+) for(j=0;

14、j=1;j+) printf(%5d,bij); printf(n); /*程序結束*/,運行結果如下: array a: 1 2 3 4 5 6 array b: 1 4 2 5 3 6,例7.5: 有一個34的矩陣,要求編程序求出其中值最大的那個元素的值,以及其所在的行號和列號。,N-S流程圖表示算法 如下:,程序: #include void main() int i,j,row=0,colum=0,max; int a34=1,2,3,4,9,8,7,6, -10,10,-5,2; max=a00;,for (i=0;imax) max=aij; row=i; colum=j; pri

15、ntf(max=%d,row=%d,colum=%dn, max,row,colum); /*程序結束*/,7.3 字符數(shù)組,7.3.1字符數(shù)組的定義,定義方法與前面介紹的類似。例如: char c10; c0=I;c1= ;c2=a; c3=m;c4= ;c5=h;c6=a; c7=p;c8=p;c9=y;,對字符數(shù)組初始化,可逐個字符賦給數(shù)組中各元素。 例如: char c10=I,a,m,h,a,p,p,y,7.3.2字符數(shù)組的初始化,如果初值個數(shù)小于數(shù)組長度,則只將這些字符賦給數(shù) 組中前面那些元素,其余的元素自動定為空字符。,如果提供的初值個數(shù)與預定的數(shù)組長度相同,在定義 時可以省略數(shù)

16、組長度,系統(tǒng)會自動根據(jù)初值個數(shù)確定 數(shù)組長度。,char c=I, ,a,m, ,h, a,p,p,y;數(shù)組c的長度自動定為10。,char diamond55= , ,*, ,*, ,*,*, , , ,*, ,*, ,*, , ,*,定義和初始化一個二維字符數(shù)組,7.3.3字符數(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 boy,例7.7 輸出一個鉆石圖形,#

17、include void main() char diamond5= , ,*,*, ,*,*, , , ,*, ,*, ,*, , ,*; int i,j; for (i=0;i0) printf(yes);,6. strlen函數(shù) 其一般形式為:strlen (字符數(shù)組) strlen是測試字符串長度的函數(shù)。函數(shù)的值為字符串中的實際長度(不包括0在內(nèi))。 例如:char str10=China; printf(%d,strlen(str); 輸出結果不是10,也不是6,而是5。也可以直接測試字符串常量的長度,如strlen(China);,7. strlwr函數(shù) 其一般形式為:strlwr

18、 (字符串) strlwr函數(shù)的作用是將字符串中大寫字母換成小寫字母。,8. strupr函數(shù) 其一般形式為:strupr (字符串) strupr函數(shù)的作用是將字符串中小寫字母換成大寫字母。,例7 .8 輸入一行字符,統(tǒng)計其中有多少個單詞,單 詞之間用空格分隔開。,7.3.7字符數(shù)組應用舉例,程序如下: #include void main() char string81; int i,num=0,word=0; char c; gets(string); for (i=0;(c=stringi)!= 0;i+),if(c= ) word=0; else if(word=0) word=1; num+; printf(There are %d words in the line.n,num); ,運行情況如下: I am a boy. There are 4 words in the line.,例7.9 有3個字符串,要求找出

溫馨提示

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

評論

0/150

提交評論