C語言數(shù)組詳解_第1頁
C語言數(shù)組詳解_第2頁
C語言數(shù)組詳解_第3頁
C語言數(shù)組詳解_第4頁
C語言數(shù)組詳解_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)組,什么是數(shù)組?,就是一組具有固定數(shù)目的、有序的、類型相同的數(shù)據(jù)的集合。根據(jù)數(shù)組下標(biāo)的多少,數(shù)組可以分為一維數(shù)組和多維數(shù)組。,例如:一個班級有30個學(xué)生,可以用g1,g2,g30代表學(xué)生的成績,其中g(shù)是數(shù)組名,下標(biāo)代表學(xué)生的序號。由于在C語言中無法表示下標(biāo),所以就引入了 表示下標(biāo)。 g1:第1個學(xué)生的成績 gi:第i個學(xué)生的成績等等,為標(biāo)識數(shù)組中的每個元素,C語言對其進(jìn)行編號。這個編號稱之為數(shù)組元素下標(biāo)。(C語言規(guī)定下標(biāo)從0開始)。,指定該數(shù)組的數(shù)據(jù)個數(shù),用于訪問的、具有相同的數(shù)據(jù)類型。在程序設(shè)計中相當(dāng)于變量名的用法。,一個數(shù)組就是一組連續(xù)的內(nèi)存空間,用來保存 數(shù)據(jù),數(shù)組中的每一項稱為一個元

2、素。,(一)一維數(shù)組(1)定義及使用,類型說明符 數(shù)組名常量表達(dá)式 int a10,任一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型。,用戶自定義的數(shù)組名字,其定名規(guī)則與變量名定名規(guī)則一樣,都需遵循標(biāo)識符定名規(guī)則,表示元素的個數(shù),即數(shù)組長度。,下標(biāo)運算符 單目運算符 優(yōu)先級(1) 左結(jié)合 不能用( ),注意: 1.數(shù)組名不能與其它變量名相同,void main() int a; float a10; ,(一)一維數(shù)組(1)定義及使用,2. 不能在方括號中用變量來表示元素的個數(shù),但可以是符號常數(shù)或常量表達(dá)式。, int n; scanf(%d,#define FD 5 void main() int a3+2,

3、b7+FD; ,(一)一維數(shù)組(1)定義及使用,3. 方括號中常量表達(dá)式表示數(shù)組元素的個數(shù)。如int a5: 數(shù)組a有5個元素,其下標(biāo)從0開始,分別為a0,a1,a2,a3,a4。,4.允許在同一個類型說明中說明多個數(shù)組和多個變量。 例如: int a,b,c,d,k110,k220;,如果出現(xiàn)數(shù)組越界,編譯系統(tǒng)沒有提示的。,(一)一維數(shù)組(1)定義及使用,數(shù)組必須先定義,然后使用。 數(shù)組元素的表示形式為: 數(shù)組名下標(biāo) C語言規(guī)定只能逐個引用數(shù)組元素而不能一次引用整個數(shù)組。,可以是整型常量或整型表達(dá)式,(一)一維數(shù)組(2)引用,全部初始化 部分初始化 使用輸入函數(shù)scanf初始化 使用表達(dá)式賦

4、值,int a10=0,1,2,3,4,5,6,7,8,9;,a0=0; a1=1; a2=2; a3=3; a4=4; a5=5; a6=6; a7=7; a8=8; a9=9;,int a10=0,1,2,3;,a0=0; a1=1;a2=2; a3=3; a4=0; a5=0;a6=0; a7=0; a8=0; a9=0;,int a10;,for(int i=0;i10;i+) scanf(%d,int a10=0,1,2,3;,a4=a3+2;,對全部數(shù)組元素賦初值時,數(shù)組長度可以省略,(一)一維數(shù)組(3)初始化,一維數(shù)組元素的存儲方式,int a5 = 1,2,3,4,5;,一維數(shù)

5、組元素的存儲方式,#include void main() int a5=0,1,2,3,4; for(int i=0;i5;i+) printf(a%d=%d,其地址是%dn,i,ai, ,數(shù)組名表示數(shù)組的起始地址,是一個地址常量,程序舉例1:用選擇排序法進(jìn)行排序。,選擇排序法是編程中經(jīng)常用的一種排序算法。具體如下: 先將5個數(shù)中最小的數(shù)與a0對換,再將a1到a4中最小的數(shù)與a1對換,這樣每比較一輪,找出一個未經(jīng)排序的數(shù)中最小的一個。共比較4輪。,int a5 = 3,6,1,9,4;, 1.4一維數(shù)組程序舉例,a0 a1 a2 a3 a4 3 6 1 9 4 未排序的情況 1 6 3 9

6、4 將5個數(shù)中最小的數(shù)1與 a0對換 1 3 6 9 4 將余下的4個數(shù)中最小的數(shù) 3與a1 對換 1 3 4 9 6 將余下的3個數(shù)中最小的數(shù) 4與a2 對換 1 3 4 6 9 將余下的2個數(shù)中最小的數(shù) 6與 a3 對換,main() int i,j,k,t; int a5 = 3,6,1,9,4; for( i = 0; i sizeof(a)/sizeof(int) 1; i+) k = i; for( j = i + 1; j sizeof(a); j+ ) if(aj ak ) k = j; if( k != i ) t = ai; ai = ak; ak = t; ,容易出錯的地

7、方,數(shù)組的起始下標(biāo)、最后一個元素的下標(biāo) 定義數(shù)組時不指定長度(動態(tài)數(shù)組) 對數(shù)值型數(shù)組進(jìn)行整體操作 用scanf語句時,數(shù)組元素前應(yīng)加,小結(jié),一維數(shù)組的定義、初始化、引用、輸入、輸出概念、操作必須掌握 數(shù)組中的所有元素,數(shù)據(jù)類型都一致 數(shù)組名字代表數(shù)組的首地址,是一個常量 數(shù)組元素具有和相同單個變量一樣的屬性,凡允許使用單個變量的地方均可以使用數(shù)組元素,(二)二維數(shù)組定義及使用,這兒只討論二維數(shù)組,多維數(shù)組可由二維數(shù)組推導(dǎo)得出,二維數(shù)組定義的一般形式為: 類型說明符 數(shù)組名常量表達(dá)式常量表達(dá)式,第一常量表達(dá)式為行數(shù),第二個為列數(shù),int a34;,float a3,4,b5,10; /*錯誤*

8、/,二維數(shù)組中的元素在內(nèi)存中的排列順序是:按行存放,即先順序存放第一行的元素,再存放第二行的元素,二維數(shù)組在內(nèi)存中的存放,下圖表示對a34數(shù)組存放的順序,int a23=1,2,3,4,5,6;,(二)二維數(shù)組存儲方式,#include void main() int a23=1,2,3,4,5,6,i,j; for(i=0;i2;i+) for(j=0;j3;j+) printf(第a%d%d元素=%d,其地址為:%dn,i,j,aij, ,(二)二維數(shù)組引用,二維數(shù)組的表示形式:數(shù)組名下標(biāo)下標(biāo),注意: 下標(biāo)可以是整型表達(dá)式,如a2-12*2-1 數(shù)組元素可以出現(xiàn)在表達(dá)式中,也可以被賦值 b

9、12=a23/2; 在使用數(shù)組元素時,應(yīng)該注意下標(biāo)值應(yīng)在已定義的數(shù)組大小范圍內(nèi) int a34; a34=5; 嚴(yán)格區(qū)分在定義數(shù)組時用的a34和引用元素時的a34,全部初始化 部分初始化 使用輸入函數(shù)scanf初始化,int a23=0,1,2,3,4,5; int a23=0,1,2,3,4,5;,a00=0; a01=1; a02=2; a10=3; a11=4; a12=5;,int a23=0,1,2; int a23=0,1;,a00=0; a01=1;a02=2; a10=0; a11=0;a12=0;,int a23;,for(int i=0;i2;i+) for(int j=0

10、;j3;j+) scanf(%d,對全部數(shù)組元素賦初值時,第一維的長度可以省略,(二)二維數(shù)組初始化,(二)二維數(shù)組程序舉例,例3:一個學(xué)習(xí)小組有5個人,每個人有三門課的考試成績。求全組分科的平均成績和各科總平均成績。,(二)二維數(shù)組程序舉例,例3:一個學(xué)習(xí)小組有5個人,每個人有三門課的考試成績。求全組分科的平均成績和各科總平均成績。,#include #define N 3 #define M 5 void main() float scoreNM,avg1=0,avgN,sumN=0; int i,j; for(i=0;iN;i+) for(j=0;jM;j+) printf(第%d門課,

11、第%d個學(xué)生的成績:,i,j); scanf(%f, ,小結(jié),二維數(shù)組在內(nèi)存中是按行存放 數(shù)組元素的下標(biāo)每一維都是從0開始的 數(shù)值型數(shù)組不能夠整體引用 可以把二維數(shù)組看成是一個特殊的一維數(shù)組,即其元素是一個一維數(shù)組 二維數(shù)組初始化有兩種方法:按行賦值或者一行賦值,(三)字符數(shù)組定義,字符數(shù)組:用來存放字符數(shù)據(jù)的數(shù)組就是字符數(shù)組。 定義方式:char 數(shù)組名長度,一維數(shù)組:char a10; 二維數(shù)組: char a45;,(三)字符數(shù)組初始化,對字符數(shù)組初始化,最容易理解的方式是逐個字符賦給數(shù)組中各元素。如: Char c10= I, ,a,m, ,h,a, p,p,y;,如果在定義字符數(shù)組時

12、不進(jìn)行初始化,則數(shù)組中各元素的值是不可預(yù)料的。,如果花括弧中提供的初值個數(shù)(即字符個數(shù))大于數(shù)組長度,則按語法錯誤處理。,注意:,char c=I, ,a,m, ,h, a,p,p,y;數(shù)組c的長度自動定為10。,#include void main() char c10=I, ,a,m, ,a, ,b,o,y; int i; for (i=0;i10;i+) printf (“%c”,ci); printf(“n”); ,(三)字符數(shù)組引用,可以引用字符數(shù)組中的一個元素,得到一個字符,在實際編程中,最常用的是字符串。在中是用字符數(shù)組存放字符串。字符串以0作為串結(jié)束符,因此當(dāng)把字符串存入數(shù)組時

13、,也把0 存入數(shù)組,并以此作為該字符串是否結(jié)束的標(biāo)志。 程序中通過循環(huán)掃描字符數(shù)組元素,讀到0 時候便認(rèn)為字符串結(jié)束。,(三)字符數(shù)組字符串和字符串結(jié)束標(biāo)志,用字符串方式賦值比用字符逐個賦值要多占一個字節(jié), 用于存放字符串結(jié)束標(biāo)志0。 例如:數(shù)組char c = “c program”在內(nèi)存中的實際存放情況為:,(三)字符數(shù)組字符串和字符串結(jié)束標(biāo)志,0是由C編譯系統(tǒng)自動加上的。由于采用了0標(biāo)志,所以在用字符串賦初值時一般無須指定數(shù)組的長度, 而由系統(tǒng)自行處理。,在內(nèi)存中數(shù)組c的狀態(tài),(三)字符數(shù)組字符數(shù)組的輸入輸出,字符數(shù)組的輸入輸出可以有兩種方式: 逐個字符輸入輸出。用”%c”輸入或輸出一個

14、字符 將整個字符串一次輸出。用“%s”格式符,,char c=“China”; printf(“%s”,c);,China,(三)字符數(shù)組字符數(shù)組的輸入輸出,注意: 輸出字符不包括結(jié)束符0; 用“%s”格式符輸出字符串時,printf函數(shù)中的輸出項時字符數(shù)組名,而不是數(shù)組元素名。 printf(“%s”,c); 如果數(shù)組長度大于字符串實際長度,也只輸出遇0結(jié)束 如果一個字符數(shù)組中包含一個以上0 ,則遇到第一個0時結(jié)束。,#include void main() char st15; printf(input string:n); scanf(%s,st); printf(%sn,st); ,(

15、三)字符數(shù)組字符數(shù)組的輸入輸出,本例中由于定義數(shù)組長度為15, 因此輸入的字符串長度必須小于15,以留出一個字節(jié)用于存放字符串結(jié)束標(biāo)志0。 對于字符數(shù)組,如果不作初始化賦值,則須說明數(shù)組長度。 應(yīng)該特別注意的是,當(dāng)用scanf函數(shù)輸入字符串時,字符串中不能含有空格,否則將以空格作為串的結(jié)束符。例如運行上例,當(dāng)輸入的字符串中含有空格時,運行情況為:,(三)字符數(shù)組字符數(shù)組的輸入輸出,#include void main() char st16,st26,st36,st46; printf(input string:n); scanf(%s%s%s%s,st1,st2,st3,st4); prin

16、tf(%s %s %s %sn,st1,st2,st3,st4); ,從輸出結(jié)果可以看出空格以后的字符都未能輸出。 為了避免這種情況, 可多設(shè)幾個字符數(shù)組分段存放含空格的串。程序可改寫如下:,(三)字符數(shù)組字符數(shù)組的輸入輸出,重要一點: 在前面介紹過scanf的各輸入項必須以地址方式出現(xiàn),如 puts(c); ,從程序中可以看出puts函數(shù)中可以使用轉(zhuǎn)義字符, 因此輸出結(jié)果成為兩行。puts函數(shù)完全可以由printf函數(shù)取代。當(dāng)需要按一定格式輸出時,通常使用printf函數(shù)。,字符串輸出函數(shù) puts,(三)字符數(shù)組字符串處理函數(shù),格式: gets (字符數(shù)組名),功能:從標(biāo)準(zhǔn)輸入設(shè)備鍵盤上輸

17、入一個字符串。 本函數(shù)得到一個函數(shù)值,即為該字符數(shù)組的首地址。,#includestdio.h“ void main() char st15; printf(input string:n); gets(st); puts(st); ,可以看出當(dāng)輸入的字符串中含有空格時,輸出仍為全部字符串。說明gets函數(shù)并不以空格作為字符串輸入結(jié)束的標(biāo)志,而只以回車作為輸入結(jié)束。這是與scanf函數(shù)不同的。,字符串輸入函數(shù)gets,3. strcat函數(shù) 其一般形式為:strcat(字符數(shù)組1,字符數(shù)組2) strcat的作用是連接兩個字符數(shù)組中的字符串,把字符串2接到字符串1的后面,結(jié)果放在字符數(shù)組1中,函

18、數(shù)調(diào)用后得到一個函數(shù)值字符數(shù)組1的地址。,(三)字符數(shù)組字符串處理函數(shù),例如: 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是“字符串復(fù)制函數(shù)”。作用是將字符串2復(fù)制到字符數(shù)組1中去。例如: char str110,str2=China; strcpy(str1,str2);,1.字符數(shù)組1必須定義得足夠大,以便容納被復(fù)制的字符串。字符數(shù)

19、組1的長度不應(yīng)小于字符串2的長度。,2.“字符數(shù)組1”必須寫成數(shù)組名形式(如str1),“字符串2”可以是字符數(shù)組名,也可以是一個字符串常量。如strcpy(str1,China);,3.復(fù)制時連同字符串后面的0一起復(fù)制到字符數(shù)組1中。,4.可以用strcpy函數(shù)將字符串2中前面若干個字符復(fù)制到字符數(shù)組1中去。例如:strcpy(str1,str2,2); 作用是將str2中前面2個字符復(fù)制到str1中去,然后再加一個0。,5.不能用賦值語句將一個字符串常量或字符數(shù)組直接給一個字符數(shù)組。如下面兩行都是不合法的: char str110,str210; str1=China; str1=str2

20、; 而只能用strcpy函數(shù)將一個字符串復(fù)制到另一個字符數(shù)組中去。用賦值語句只能將一個字符賦給一 個字符型變量或字符數(shù)組元素。如下面是合法的: char a5,c1,c2; c1=A; c2=B; a0=C; a1=h; a2=i; a3=n; a4=a;,(三)字符數(shù)組字符串處理函數(shù),測字符串長度函數(shù)strlen,格式: strlen(字符數(shù)組名),功能:測字符串的實際長度(不含字符串結(jié)束標(biāo)志0) 并作為函數(shù)返回值。,#includestring.h“ #include “stdio.h” void main() int k; char st=C language; k=strlen(st); printf (The lenth of the string is %dn,k); ,Strlen()與sizeof()的區(qū)別,容易出錯的地方,將字符數(shù)組定義為一個字符 混淆c和”c”的意義 字符數(shù)組整體輸入時用取地址符號是不對的 在實際應(yīng)用中,字符數(shù)組,在使用前先格式化。調(diào)用函數(shù)memset. char a100; memset( a, 0, sizeof(a);,小結(jié),字符數(shù)組可以通過數(shù)組名進(jìn)行整體引用 C語言沒有字符串類型數(shù)據(jù),字符串的操作通過一維字符數(shù)組實現(xiàn) C語言規(guī)定以0作為字符串結(jié)束標(biāo)志 字符數(shù)組的輸入

溫馨提示

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

最新文檔

評論

0/150

提交評論