




已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第七章,數(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ù)組的運算。,主要內容,7.1 一維數(shù)組的定義和引用 7.2 二維數(shù)組的定義和引用 7.3 字符數(shù)組,7.1 一維數(shù)組的定義和引用,C語言為這些數(shù)據(jù),提供了一種構造數(shù)據(jù)類型:數(shù)組。所謂數(shù)組就是一組具有相同數(shù)據(jù)類型的數(shù)據(jù)的有序集合。,一個班學生的學習成績 一行文字 一個矩陣 這些數(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; scanf(“%d,,數(shù)組說明中其他常見的錯誤: float a0; /* 數(shù)組大小為0沒有意義 */ int b(2)(3); /* 不能使用圓括號 */ int k, ak; /* 不能用變量說明數(shù)組大小*/,2.一維數(shù)組在內存中的存放,每個數(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+a7-a2*3,2.一維數(shù)組元素引用的程序實例,#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ù)組元素的初值依次放在一對花括弧內。經(jīng)過上面的定義和初始化之后,a0=0,a1=1,a2=2,a3=3,a4=4,a5=5,a6=6,a7=7,a8=8,a9=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個元素,但花括弧內只提供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; 只初始化前5個元素,后5個元素為0。,例7-1:用數(shù)組來處理,求解Fibonacci數(shù)列。,程序實例: #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 144 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次兩兩比較。,程序流程圖如下:,程序實例7.3: #include void main() int a10; int i,j,t; printf(input 10 numbers :n); for (i=0;i10;i+) scanf(“%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ù)組名常量表達式常量表達式; 例如:定義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ù)組中的元素在內存中的排列順序是:按行存放,即先順序存放第一行的元素,再存放第二行的元素,一維數(shù)組在內存中的存放,下圖表示對a34數(shù)組存放的順序,地址 值 數(shù)組元素,b00 b01 b02 b10 b11 b12 b20 b21 b22,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ù)組元素在內存中的排列順序: 第一維的下標變化最慢,最右邊的下標變化最快。,7.2.1二維數(shù)組的定義,三維數(shù)組的元素排列順序,二維數(shù)組元素的表示形式為: 數(shù)組名下標下標 例如: a23 下標可以是整型表達式,如 a2-12*2-1,數(shù)組元素可以出現(xiàn)在表達式中,也可以被賦值 例如:b12=a23/2,7.2.2 二維數(shù)組的引用,常出現(xiàn)的錯誤有: int a34; /* 定義a為34的數(shù)組 */ a34=3;,在使用數(shù)組元素時,應該注意下標值應在已定義的數(shù)組大小的范圍內。,可以用下面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ù)寫在一個花括號內,按數(shù)組排列的順序對各元素賦初值。 例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;,7.2.3二維數(shù)組的引用,.可以對部分元素賦初值。 例如: int 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;,在定義時也可以只對部分元素賦初值而省略第一維的長度,但應分行賦初值。 例如: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;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; printf(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ù)組長度,系統(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 輸出一個鉆石圖形,#include void main() char diamond5= , ,*,*, ,*,*, , , ,*, ,*, ,*, , ,*; int i,j; for (i=0;i5;i+) for (j=0;j5;j+) printf(%c,diamondij); printf(n); ,運行結果 * * * * * * * *,7.3.4字符串和字符串結束標志,為了測定字符串的實際長度,C語言規(guī)定了一個“字符串結束標志”0。,字符數(shù)組并不要求它的最后一個字符為0,甚至可以不包含0。 例如:char c5=C,h,i,n,a;,但是由于系統(tǒng)對字符串常量自動加一個0。因此,為了使處理方法一致,在字符數(shù)組中也常人為地加上一個0。 例如:char c6=C,h,i,n,a,0;,例如: 定義字符數(shù)組 char c=“Pascal program”; 要用一個新的字符串代替原有的字符串”Pascal program” ,從鍵盤向字符數(shù)組輸入Hello 如果不加0的話,字符數(shù)組中的字符如下 Hellol program,7.3.5字符數(shù)組的輸入輸出,字符數(shù)組的輸入輸出可以有兩種方法: 逐個字符輸入輸出。用格式符“%c”輸入或輸出一個字符。 將整個字符串一次輸入或輸出。用“%s”格式符,意思是對字符串的輸入輸出。,在內存中數(shù)組c的狀態(tài),說明: (1)用“%s”格式符輸出字符串時,printf函數(shù)中的輸出項是字符數(shù)組名,而不是數(shù)組元素名。 (2)如果數(shù)組長度大于字符串實際長度,也只輸出到遇0結束。 (3)輸出字符不包括結束符0。 (4)如果一個字符數(shù)組中包含一個以上0,則遇第一個0時輸出就結束。 (5)可以用scanf函數(shù)輸入一個字符串。,如果利用一個scanf函數(shù)輸入多個字符串,則在輸入時以空格分隔。 例如: char strl5,str25,str35; scanf(%s %s %s,str1,str2,str3); 輸入數(shù)據(jù): How are you? 數(shù)組中未被賦值的元素的值自動置0。,分析圖中所示的字符數(shù)組 用8進制形式輸出數(shù)組c的起始地址 printf(%o,c); printf(%s,c);,注意:scanf函數(shù)中的輸入項如果字符數(shù)組名。不要再加地址符&,因為在C語言中數(shù)組名代表該數(shù)組的起始地址。下面寫法不對: scanf(%s,&str);,1. puts函數(shù) 其一般形式為: puts (字符數(shù)組) 其作用是將一個字符串(以0結束的字符序列)輸出到終端。假如已定義str是一個字符數(shù)組名,且該數(shù)組已被初始化為“China“。則執(zhí)行puts(str);其結果是在終端上輸出China。,7.3.6字符串處理函數(shù),用puts函數(shù)輸出的字符串中可以包含轉義字符。例如: char str=ChinanBeijing; puts(str); 輸出結果: China Beijing,在輸出時,將字符串 結束標志0 轉換成n, 即輸出完字符串后換行。,2. gets函數(shù) 其一般形式為:gets(字符數(shù)組) 其作用是從終端輸入一個字符串到字符數(shù)組,并且得到一個函數(shù)值。該函數(shù)值是字符數(shù)組的起始地址。如執(zhí)行下面的函數(shù): gets(str) 從鍵盤輸入: Computer將輸入的字符串“Computer“送給字符數(shù)組str,說明: 函數(shù)值為字符數(shù)組str的起始地址。一般利用gets函數(shù)的目的是向字符數(shù)組輸入一個字符串,而不大關心其函數(shù)值。 注意:用puts和gets函數(shù)只能輸入或輸出一個字符串,不能寫成 puts(str1,str2) 或 gets(str1,str2),3. strcat函數(shù) 其一般形式為:strcat(字符數(shù)組1,字符數(shù)組2) Strcat的作用是連接兩個字符數(shù)組中的字符串,把字符串2接到字符串1的后面,結果放在字符數(shù)組1中,函數(shù)調用后得到一個函數(shù)值字符數(shù)組1的地址。,例如: char str130=Peoples Republic of ; char str2=China; print(%s,strcat(str1,str2); 輸出: Peoples Republic of China,4. strcpy函數(shù) 其一般形式為:strcpy(字符數(shù)組1,字符串2) strcpy是“字符串復制函數(shù)”。作用是將字符串2復制到字符數(shù)組1中去。例如: char str110,str2=China; strcpy(str1,str2);,關于strcpy函數(shù)的幾點說明,(1)字符數(shù)組1必須定義得足夠大,以便容納被復制的字符串。字符數(shù)組1的長度不應小于字符串2的長度。,(2)“字符數(shù)組1”必須寫成數(shù)組名形式(如str1),“字符串2”可以是字符數(shù)組名,也可以是一個字符串常量。如strcpy(str1,China);,(3)復制時連同字符串后面的0一起復制到字符數(shù)組1中。,(4)可以用strcpy函數(shù)將字符串2中前面若干個字符復制到字符數(shù)組1中去。例如:strcpy(str1,str2,2); 作用是將str2中前面2個字符復制到str1中去,然后再加一個0。,(5)不能用賦值語句將一個字符串常量或字符數(shù)組直接給一個字符數(shù)組。如: str1=China; 不合法 str1=str2; 不合法 用strcpy函數(shù)只能將一個字符串復制到另一個字符數(shù)組中去。 用賦值語句只能將一個字符賦給一個字符型變量或字符數(shù)組元素。下面是合法的使用: char a5,c1,c2; c1=A; c2=B; a0=C; a1=h; a2=i; a3=n; a4=a;,5. strcmp函數(shù) 其一般形式為:strcmp(字符串1,字符串2) strcmp的作用是比較字符串1和字符串2。 例如:strcmp(str1,str2); strcmp(China,Korea); strcmp(str1,Beijing);,比較的結果由函數(shù)值帶回 (1) 如果字符串1=字符串2,函數(shù)值為0。 (2) 如果字符串1字符串2,函數(shù)值為一正整數(shù)。 (3) 如果字符串1str2) printf(yes); 而只能用 if(strcmp(str1,str2)0) printf(yes);,6. strlen函數(shù) 其一般形式為:strlen (字符數(shù)組) strlen是測試字符串長度的函數(shù)。函數(shù)的值為字符串中的實際長度(不包括0在內)。 例如:char str10=China; printf(%d,strlen(st
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 消防安全工作實效性分析試題及答案
- 消防設施維護的管理經(jīng)驗試題及答案
- 消防與社會責任的結合點分析試題及答案
- 初級審計師實踐能力提升的試題及答案
- 初級審計師與中級會計結合的備考策略試題及答案
- 醫(yī)療數(shù)據(jù)共享的倫理與法律框架
- 醫(yī)學AI技術在疾病預防中的作用
- 醫(yī)療數(shù)據(jù)驅動的決策支持系統(tǒng)研究與應用
- 急救護理常識試題及答案
- 消防工程的質量管理與控制試題及答案
- 道路工程安全技術交底記錄大全
- 部編版小學一年級語文下冊《口語交際一起做游戲》教學反思(三篇)
- 情感反應與內容反映練習
- DB63-T 1004-2011 青海省既有居住建筑節(jié)能改造技術規(guī)程-(高清現(xiàn)行)
- 班組級教育安全培訓記錄表
- 評標專家聘用協(xié)議范本書
- GB∕T 9125.2-2020 鋼制管法蘭連接用緊固件 第2部分:Class系列
- ASME QME-1-2002核電廠能動機械設備的鑒定
- 浙江省溫州市2021-2022學年高一下學期期末語文試題
- 乙二醇安全技術說明書MSDS
- 一年級數(shù)學上冊 20以內的減法玩撲克做數(shù)學教案 新版冀教版
評論
0/150
提交評論