C語言 一維數組的定義和引用 數組_第1頁
C語言 一維數組的定義和引用 數組_第2頁
C語言 一維數組的定義和引用 數組_第3頁
C語言 一維數組的定義和引用 數組_第4頁
C語言 一維數組的定義和引用 數組_第5頁
已閱讀5頁,還剩42頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第第7 7章章 數數 組組 數組:數組:是構造類型,元素由基類型(整、實是構造類型,元素由基類型(整、實、字符)組成。、字符)組成。 它是有序的、同類型數據的集合。它是有序的、同類型數據的集合。 7.1 7.1 一維數組的定義和引用一維數組的定義和引用 7.1.1 7.1.1 一維數組的定義一維數組的定義 形式:類型說明符形式:類型說明符 數組名數組名 常量表達式常量表達式 如:如:int int a5; a5; float b10; float b10; 說明:說明: 1.1.命名規則命名規則:數組名是由合法的標識符組成。:數組名是由合法的標識符組成。2.2.數組名后是用數組名后是用 括起來

2、的是常量表達式括起來的是常量表達式 包括:整、字符、符號常量表達式。包括:整、字符、符號常量表達式。 如:如: int int a2+3, b5, ca , _d8, a2+3, b5, ca , _d8, xyz# (#=35) xyz# (#=35) #define N 5 #define N 5 main() int aN;printf main() int aN;printf(“%dn”,a1=100); (“%dn”,a1=100); 而:而:intint a(10) , bx, %5, 83, x-y50, 5x100 a(10) , bx, %5, 83, x-y50, 5x10

3、0 是否正確?是否正確? 又如:又如: int i=5; int int i=5; int a5+i a5+i 是否正確性?是否正確性? 3.3.數組的長度數組的長度 int int a5 a0, a1, a2, a3, a4 a5 a0, a1, a2, a3, a4 5 5個元素個元素 ,下標從,下標從0 4 0 4 注意:注意: 在在Turbo C Turbo C 中超過定義的數組下標元素是可以引用的,系中超過定義的數組下標元素是可以引用的,系統不作檢查。統不作檢查。例例T7-0-1.c T7-0-1.c main( ) main( ) int int i, a5; i, a5; for

4、(i=0;i=4;i+) for(i=0;i=4;i+) printf (“a%d=%d n”,i,ai=i+1); printf (“a%d=%d n”,i,ai=i+1); printf (“a5=%dt”,a5); printf (“a5=%dt”,a5); printfprintf (“a6=%d n”,a6); (“a6=%d n”,a6); 運行結果:運行結果: a0=1 a1=2 a2=3 a3=4 a4=5 a5=-30 a6=2854.4.數組大小的定義只能是常量,而不能是變數組大小的定義只能是常量,而不能是變量或動態地定義。量或動態地定義。 例例7-0-2. 7-0-2.

5、C C main( ) main( ) int int n=5,an; n=5,an; a1=100; a1=100; printf printf (“a1=%dn”,a1); (“a1=%dn”,a1); 編譯指出:編譯指出:constant expression constant expression required in function main required in function main (主函數(主函數中要求常量表達式)中要求常量表達式)7.1.2 一維數組元素的引用一維數組元素的引用引用規則:引用規則:1.先定義,后使用。先定義,后使用。 2.引用形式:數組名引用形式:

6、數組名下標下標 下標可以是整、字符下標可以是整、字符 型的常量、變量或表達式。型的常量、變量或表達式。 3.引用方法:針對元素而不是整個數組。引用方法:針對元素而不是整個數組。 如:如:a0=ab - a + a b -96 +a3 - a2*2 例例T7-1. C 對數組對數組a 順序賦值,逆序輸出順序賦值,逆序輸出 main( ) int a5,i; for(i=0; i=0;i- -) printf( “a%d=%dn”, i, ai ); 運行結果:運行結果: a4=4 a3=3 a2=2 a1=1 a0=001234a0a1a2a3a47.1.3 7.1.3 一維數組的初始化一維數組

7、的初始化 實現的方法有:實現的方法有: 1.1.定義時對數組元素初始化定義時對數組元素初始化 如如: : int int a5=1, 2, 3, 4, 5; a5=1, 2, 3, 4, 5; 2. 2. 只給部分元素賦值只給部分元素賦值 如:如: int int a5=1, 3, 5; a5=1, 3, 5; 3. 3. 初始化時給全部元素賦初始化時給全部元素賦0 0值值 如:如:int int a5=0,0,0,0,0; a5=0,0,0,0,0; 或或 int int a5=0; a5=0; 4. 4. 對全部元素賦初值時可以不指出長度對全部元素賦初值時可以不指出長度 如:如:int i

8、nt a5=2,4,6,8,10; a5=2,4,6,8,10; 或或 int int a =2,4,6,8,10; a =2,4,6,8,10; 效果一樣效果一樣。例例T7-1-1.c T7-1-1.c 定義時對數組元素初始化定義時對數組元素初始化 main( ) main( ) int i; int i; int int a5=2,4,6,8,10; a5=2,4,6,8,10; for(i=0;i=4;i+) for(i=0;i=4;i+) printf printf(“%dn”,ai); (“%dn”,ai); 注意:注意:static static 存儲類別,這和新存儲類別,這和新A

9、NSIANSI新標準新標準一致,一致, 若采用若采用staticstatic,數組元素的值被存儲在靜態,數組元素的值被存儲在靜態區。區。 運行結果:運行結果: 2 4 6 8 107.1.4 7.1.4 一維數組程序舉例一維數組程序舉例 例例T7-2.c T7-2.c 求求Fibonacci Fibonacci 數列問題數列問題 關于菲波那契算法:頭兩個數各為關于菲波那契算法:頭兩個數各為1 1, 以后的每個數皆為前兩個數之和。以后的每個數皆為前兩個數之和。 main( ) main( ) int int i;i; int int f20=1,1; f20=1,1; for(i=2;i20;i

10、+) fi=fi-2+fi-1; for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;i20;i+) for(i=0;i20;i+) if(i%5=0) printf (“ n” ); if(i%5=0) printf (“ n” ); printf printf (“%12d”,fi; (“%12d”,fi; i fi=fi-2+fi-1 2 f2=f1+f0=2 3 f3=f2+f1=3 4 f4=f3+f2=5 5 f5=f4+f3=8 6 f6=f5+f4=13 7f7=f6+f5=21 運行結果:運行結果: 1 1 2 3 5 8 13 21 34 55 89

11、 144 233 377 610 987 1597 2584 4181 6765例例T7-3.c 用起泡法對用起泡法對6個數排序個數排序(由小到大由小到大) 思路思路:將相鄰兩數兩兩比較將相鄰兩數兩兩比較,若小則調到前頭若小則調到前頭,不小也要比較不小也要比較 第一輪大數沉底第一輪大數沉底 第二輪第二輪 第三輪第三輪 第四輪第四輪 第五輪第五輪 此處:此處:n=6 外層循環外層循環j(1n-1)次次 內層循環內層循環i (1n-j)次次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 98 5 5 5 5

12、 5 8 4 4 4 4 4 8 2 2 2 2 2 8 0 0 0 0 0 85 4 4 4 4 5 2 2 2 2 5 0 0 0 0 54 2 2 2 4 0 0 0 42 0 0 2main( ) int a7; int i, j , t; printf (“input 6 numbers: n”); for(i=1;i7;i+) scanf(“%d”, &ai ; printf (“ n”); for(j=1; j=5; j+) for(i=1; iai+1) t=ai;ai=ai+1;ai+1=t; printf (“the sorted numbers: n”); for(i=1

13、;i7;i+) printf(“%d _ _”,ai); 運行:運行:input 6 numbers: 輸入:輸入:9 8 5 4 2 0 輸出:輸出:0 2 4 5 8 9985420 xa0a1a2a3a4a5a67.2 7.2 二維數組的定義和引用二維數組的定義和引用 7.2.1 7.2.1 二維數組的定義二維數組的定義 1.1.一般形式:一般形式:類型說明符類型說明符 數組名數組名 常量表達式常量表達式常量常量表達式表達式 如:如:float a34 float a34 定義數組定義數組a a具有三行四列具有三行四列 在在C C中,可將二維數組看著是特殊形式的一維數組。中,可將二維數組

14、看著是特殊形式的一維數組。 如上述定義可看著是具有三個元素的一維數組,如上述定義可看著是具有三個元素的一維數組,而每個元素又可看作是包含四個元素的一維數組。而每個元素又可看作是包含四個元素的一維數組。 因此,上述定義相當于:因此,上述定義相當于: float a04, a14, a24 float a04, a14, a24 注注 :實際應用時若如此定義則被認為是重定義。:實際應用時若如此定義則被認為是重定義。 2.2.二維數組各個元素在內存中的存放順序是:二維數組各個元素在內存中的存放順序是: 按先行后列的順序依次存放按先行后列的順序依次存放例例T7-3-1.c main( ) int i,

15、 j, a23; for(i=0; i2; i+) for(j=0; j3; j+) scanf(“%d”, &aij); for(i=0; i2;i+) for(j=0;j3;j+) printf(“&a%d%d=%x ”, i, j, &aij); printf (“a%d%d=%d n”,i,j,aij); 地址地址值值ffceffd0ffd2ffd4ffd6ffd81357911數組元素數組元素a00a01a02a10a11a12輸入:輸入:1 3 5 7 9 11 輸出:輸出:&a00=ffce a00=1 &a01=ffd0 a01=3 &a02=ffd2 a02=5 &a10=f

16、fd4 a10=7 &a11=ffc6 a11=9 &a12=ffd8 a12=11注:從鍵盤給實型數組元素賦值時,應通過一中間變量進行,注:從鍵盤給實型數組元素賦值時,應通過一中間變量進行, 或采用其它辦法實施。或采用其它辦法實施。 T7-3-2.c 實型數組從鍵盤賦值情況實型數組從鍵盤賦值情況 main() int i,j; float a23,k; for(i=0;i2;i+) for(j=0;j3;j+) scanf(%f,&k); aij=k; for(i=0;i2;i+) for(j=0;j3;j+) printf(&a%d%d=%x ,i,j,&aij); printf(a%d%

17、d=%fn,i,j,aij); for(j=0;j3;j+) scanf(“%f%f”,&a0j,&a1j)3.3.多維數組的定義和在內存中的存放順多維數組的定義和在內存中的存放順序序: 如如 int int a234; a234; 共共2424個元素,在內存中排列的順序是個元素,在內存中排列的順序是:第三維變化最快,然后是第二維,第:第三維變化最快,然后是第二維,第一維最慢。一維最慢。 7.2.2 7.2.2 二維數組的引用二維數組的引用 形式:數組名形式:數組名 下標下標下標下標 其中:下標是整型或字符型的常量,變量或表其中:下標是整型或字符型的常量,變量或表達式。達式。(定義時不能使用變

18、量)(定義時不能使用變量) 如:如: a12 a12 aij aij 1.1.數組元素可出現在表達式中,如:數組元素可出現在表達式中,如: a12=a22/2 a12=a22/2 2.2.使用數組元素時,應注意不要超出其定義的使用數組元素時,應注意不要超出其定義的范圍;范圍; 如:如: int int a23; a23; a23=5; a23=5; 7.2.3 7.2.3 二維數組的初始化二維數組的初始化 1.1.按行給二維數組賦初值按行給二維數組賦初值 如:如: int int a23=1,2,3,4,5,6; a23=1,2,3,4,5,6; 2.2.按數組元素排列的順序賦初值按數組元素排

19、列的順序賦初值 如:如:int int a23=1,2,3,4,5,6; a23=1,2,3,4,5,6; 3.3.對部分元素賦初值,按行賦值對部分元素賦初值,按行賦值較直觀較直觀 如:如:int int a23=2,5,3;a23=2,5,3; 1 2 3 a= 4 5 6 1 2 3 a= 4 5 6 2 5 0 a= 3 0 04.4.全部元素賦值時,第一維下標可省略全部元素賦值時,第一維下標可省略 如:如: intint a 3=1,2,3,4,5,6; a 3=1,2,3,4,5,6; 又如:又如:int int a 4=0,0,3,0,0,10;a 4=0,0,3,0,0,10;

20、1 2 3 a= 4 5 6 0 0 3 0 a= 0 0 0 0 0 10 0 07.2.4 7.2.4 二維數組程序舉例二維數組程序舉例 例例T7-4 T7-4 將一個二維數組的行和列元素互換,將一個二維數組的行和列元素互換,存到另一個二維數組中存到另一個二維數組中 。 1 2 3 a= 4 5 6 1 4 b= 2 5 3 6T7-4.c兩數組行列互換兩數組行列互換 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(“%4d”, aij

21、); bji=aij; printf( n”); printf(“array b: n”); for(i=0;i=2; i+) for(j=0;j=1;j+) printf(“%4d”,bij); printf(“ n”); i j bji aij 0 0 b00 a00=1 1 b10 a01=2 2 b20 a02=3 1 0 b01 a10=4 1 b11 a11=5 2 b21 a12=6運行結果:運行結果: array a: 1 2 3 4 5 6 array b: 1 4 2 5 3 6例例T7-5.c 有有3 4矩陣,求出其中最大元素所在的行號和列號矩陣,求出其中最大元素所在的行

22、號和列號 main( ) int i, j, r=0,c=0, max; int a34=1,2,3,4,9,8,7,6,-10,10,-5,2; max=a00; for(i=0;i=2;i+) for(j=0;jmax) max=aij; r=i;c=j printf(“max=%d,row=%d, colum=%dn”,max,r,c); 1 2 3 4 a= 9 8 7 5 -10 10 -5 2 運行結果運行結果: max=10,row=2,colum=1問題:在比較前問題:在比較前 為什么要把為什么要把a00賦給賦給max? i=02 j=03 比較比較aijmax 嗎嗎 0 0

23、a00max 1 a01max max 2, r=0, c=1 2 a02max max 3, r=0, c=2 3 a03max max 4, r=0, c=3 1 0 a10max max 9, r=1, c=0 1 a11max 2 a12max 3 a13max 2 0 a20max 1 a21max max 10, r=2, c=1 2 a22max 3 a23max 7.3 7.3 字符數組字符數組 字符型數組:用于存放字符型數據。字符型數組:用于存放字符型數據。 一維字符數組:存放一個字符串(每個數組元素存放一個字一維字符數組:存放一個字符串(每個數組元素存放一個字符)符) 二維

24、字符數組:存放多個字符串(行數是字符串的個數)二維字符數組:存放多個字符串(行數是字符串的個數) 7.3.1 7.3.1 字符數組的定義字符數組的定義 形式:形式:char char 數組名數組名 常量表達式常量表達式 char char 數組名數組名 常量表達式常量表達式常量表達式常量表達式 常量表達式:整、字符、符號常量。常量表達式:整、字符、符號常量。 例:例: char a5; char a5; a0=C; a1=H;a2=I; a0=C; a1=H;a2=I; a3=N; a4=A; a3=N; a4=A; C CH HI IN NA Aa0a0a1a1a2a2a3a3a4a4 7.

25、3.2 7.3.2 字符數組的初始化字符數組的初始化 如:如:char a5=C, H, I, char a5=C, H, I, N, A; N, A; char b5=C, H, I, char b5=C, H, I, N, W, U; N, W, U; 編譯時將指出:初始化值太多編譯時將指出:初始化值太多 char c5=C, H, I; char c5=C, H, I; char d =C, H, I, char d =C, H, I, N, A N, A 系統自動確認其長度為系統自動確認其長度為5 5C H I 0 07.3.3 7.3.3 字符數組的引用字符數組的引用 例例T7-6.

26、c T7-6.c 輸出一個字符串輸出一個字符串main( ) main( ) char c10=I, _, a, char c10=I, _, a, m, _, h, a, p, m, _, h, a, p, p, y; p, y; int int i; i; for(i=0;i10;i+)printf for(i=0;i10;i+)printf(“%c”, (“%c”, ci); ci); print(“ n”); print(“ n”); 運行結果:運行結果: I_am_happyI_am_happyT7-7.CT7-7.C輸出一個鉆石圖輸出一個鉆石圖 main() main() char

27、 diamond5= , ,char diamond5= , ,* *, , ,* *, , ,* *, , * *, , , , , , ,* *, , ,* *, , ,* *, , , , ,* *; ; int i; intint i; int j; j; for (i=0;i5;i+) for (i=0;i5;i+) for(j=0;j5;j+) for(j=0;j5;j+) printf(%c,diamondij); printf(%c,diamondij); printf printf(n); (n); 7.3.4 7.3.4 字符串和字符串結束標志字符串和字符串結束標志 幾點說

28、明:幾點說明: (1 1)字符串:用雙引號括起的若干字符,可)字符串:用雙引號括起的若干字符,可將其存放在一維或兩維字符型數組中。將其存放在一維或兩維字符型數組中。 (2 2)字符串結束標志為:)字符串結束標志為: 0 ( 0 (既無動既無動作作, ,又不顯示又不顯示) ) (3 3)字符串的長度:第一個)字符串的長度:第一個 0 0以前字符以前字符的個數的個數 (4 4)在字符型數組或字符串中遇)在字符型數組或字符串中遇 00,即認為該字符結束;,即認為該字符結束; (5 5)字符串可對字符型數組初始化)字符串可對字符型數組初始化 如:如:char c =“ I_am_happy” char

29、 c =“ I_am_happy” ; ; 系統自動在數組的最后加了系統自動在數組的最后加了 0 0 ,長度為,長度為1111 或或char c =“ I_am_happy”; char c =“ I_am_happy”; 系統自動在數組的最后加了系統自動在數組的最后加了 0 0 ,長度為長度為1111 相當于相當于 c = Ic = I,_,aa,mm,_,hh,aa,pp,pp,yy, 0; 0; 而而 char c10=“CHINA ” char c10=“CHINA ” 注意:字符注意:字符 0 0 并不一定都在字符數組的后并不一定都在字符數組的后面,輸出時遇到第一個面,輸出時遇到第一

30、個 0 0 結束;結束; 例例T7-7-1.c T7-7-1.c main( ) main( ) char a = a, b, 0, char a = a, b, 0, 1, 2; 1, 2; char b =“ab 0cd” ; char b =“ab 0cd” ; printfprintf (“%s n%s n”, a,b); (“%s n%s n”, a,b); C H I N A 0 0 0 0 0運行結果:運行結果: a b a b 7.3.5 7.3.5 字符數組的輸入輸出字符數組的輸入輸出 1.1.字符數組的輸出:字符數組的輸出: %c:%c:輸出一個字符輸出一個字符 以數組元素

31、以數組元素格式:格式: %s:%s:輸出一個字符串輸出一個字符串 以數組名以數組名例例T7-7-2.c main( ) int i; char a10= “CHINA” ; char b18=“CHINA 0CHINA 0CHINA” ; for(i=0;i10;i+) printf(“%c”,ai); printf (“ n”); printf (“%s n”,a); for(i=0;i 1 串串2 2 返回值為正數返回值為正數 其值是其值是AsciiAscii碼的差值碼的差值 (3)(3)串串1 1 串串2 2 返回值為負數返回值為負數 其值也是其值也是AsciiAscii碼的差值碼的差值例例T7-7-8.c main( ) int i,j,k; char a1 =“wuhan”, a2 =“beijing” ; i=strcmp(a1,a2); j=strcmp(“china”, “korea”); k=strcmp(a2, “beijing” ); printf

溫馨提示

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

評論

0/150

提交評論