




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第2章章 數組數組1、數組元素的個數必須在定義時確定、數組元素的個數必須在定義時確定2、同一數組中的數組元素的類型是相同的、同一數組中的數組元素的類型是相同的3、數組元素的作用相當于簡單變量、數組元素的作用相當于簡單變量4、同一數組中的數組元素占連續的地址空間、同一數組中的數組元素占連續的地址空間2.12.1 一維數組一維數組2.1.1 一維數組的定義一維數組的定義形式: static ;例: int a 20; float x 100;其中 a 和 x 都是數組名。代表數組元素的個數1. 數組名的確定方法同變量名。2.數組名后方括號 括起來的常量表達式,常量表達式表示元素的個數。對于 in
2、t a5;表示有5個元素, 元素的下標從0開始.數組a的元素分別為:a0,a1, a2, a3, a 4數組數組 a 在內存中的存放順序:在內存中的存放順序:a0的值a1的值a2的值a3的值a4的值注意:注意:在沒有給數組元素賦值以前,沒有確定的值。3. 常量表達式為常量和符號常量。不允許有變量,其表達式的值代表了元素的個數。例: int a20; 表示有20個元素 且元素從0開始編排:a0,a1,a 192.1.2 一維數組的初始化一維數組的初始化1. 對全部元素賦初值。對全部元素賦初值。如:如:int a10=10, 11, 12, 13, 14, 15, 16, 17, 18, 19表示
3、數組元素的值為:a0=10;a1=11; a9=19; 2. 對部分元素賦初值對部分元素賦初值(前面的連續元素前面的連續元素)。如: 在此, 只有前5個元素初值確定。int b10=0,1,2,3,4;表示數組元素的值為:b0=0;b1=1;b2=2;b3=3;b4=4;注意:注意:不能只對不連續部分元素或后面的連續元素賦初值。語句語句: int a10=, , , , ,1,2,3,4,5; int a10=1, ,3, ,5 , ,7, ,9, ,; 是錯誤的。3. 如對數組元素賦同一初值如對數組元素賦同一初值,必須一一寫出必須一一寫出: static int a10=2,2,2,2,2,
4、2,2,2,2,2;不可寫成任何其他形式。如:不可寫成: static int a10*2;4. 若賦全部元素的初值若賦全部元素的初值,可省略常量表達式可省略常量表達式 int a =0,1,2,3; 表示a4,即只有4個元素。 2. 引用方式: 數組名下標 代表了一個元素,等價一個同類型的變量。 3. 一般地,一維數組各元素分配在連續的內存單元之中。1. 須象使用變量那樣,先定義,后使用例: a 05+a1 6 為正確的算術表達式2.2 一維數組使用一維數組使用2.2.1 一維數組引用方式例 : ( Page 44,2-2.2-3)/*exam2_2.c 一維數組在程序中的使用*/#incl
5、ude void main()int i,a5=1,2,3,4,5; /*初始化數組*/printf(輸出數組元素的正確值: n);for(i=0;i5;i+)printf(%dt,ai);printf(n輸出超出下標的元素的值:n);for(i=5;i10;i+) /*使用超出下標的元素*/printf(%dt,ai);printf(n改變數組元素的值:n);a0=(a1+a2)*(a3+a4);printf(a0=%dn,a0);getchar();/*exam2_3.c Fibonaci數列的前20項*/#include #include main()int i,FBNC20;FBNC0
6、=0;FBNC1=1;for(i=2; i20;i+)FBNCi=FBNCi-2+FBNCi-1;printf(FBNC Number is:n);for(i=0;i20;i+)if (i=6 | i=11 | i=16)printf(n);printf(%7d,FBNCi);getch();2.3 2.3 多維數組多維數組形式:形式:例例: : int a4 10; float x8 20; 數組名數組名常量表達式常量表達式1 常量表達式常量表達式2; 行元素個數行元素個數 列元素個數列元素個數2. 可將二維數組的元素看成為若干個特殊可將二維數組的元素看成為若干個特殊的一維數組。的一維數組。
7、 可看成:可看成:有三個特殊的一維數組b0,b1, b2,每一個又有四個元素:1. 不可將定義寫為不可將定義寫為int a4,10。注意:注意:b00, b01, b02, b03,b10, b11, b12, b13,b20, b21, b22, b23,如如: int b3 4;3. 二維數組的存放方式為二維數組的存放方式為: 按行優先。由此可按行優先。由此可推廣至三維、推廣至三維、n維數組的定義和存放。維數組的定義和存放。4. 初始化初始化:即即: 最右邊的下標變化最快。(1) 按行給二維數組賦初值按行給二維數組賦初值:static int a34=1,2,3,4, 5,6,7,8, 9
8、,10,11,12;或:或:static int a34=1,2,3,4,5,6,7,8,9,10,11,12; (2) 可以對部分元素賦初值可以對部分元素賦初值,但需表達清楚。但需表達清楚。則相當于若:若: static int a34=1,2,3,8則相當于000000008321000800030021如如: static int a34=1,2,3,8。(3) 可通過賦初值決定數組大小。如為二維可通過賦初值決定數組大小。如為二維,則只可省略第一維的大小。則只可省略第一維的大小。static int a 4=1,2,3,4,5,6,7,8,9,10,11,12;形式形式: :其中的下標為
9、整型表達式其中的下標為整型表達式, ,但不得越界。但不得越界。與一維數組元素一樣與一維數組元素一樣, ,二維數組元素相當二維數組元素相當于同類型的簡單變量。于同類型的簡單變量。數組名數組名下標下標1下標下標2形式:形式:例例: : int room3 23; float vic7 1269; 數組名數組名表達式表達式1 表達式表達式2. 表達式表達式n; 元素元素1的個數的個數 元素元素2 的個數的個數 a=1 2 34 5 6b=1 42 5 3 6例例1:1: 將一個二維數組行和列元素互換,存到另一個二維數組中。例如:#include main()static int a23=1,2,3,
10、4,5,6;static 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; jmaxmax= aijrow=icolum=j輸出:max和row,colum真假程序如下:程序如下: #include main ( ) int i,j, row=0, colum=0, max; static int a34=1,2,3,4,9,8,7,6, 1
11、0,10, 5, 2; max=a00; for (i=0;i=2; i+) for (j=0; jmax) max=aij; row=i; colum=j; printf( max=%d,row=%d, colum=%dn , max, row, colum);輸出結果為: max=10, row=2, colum=12.4 2.4 字符數組字符數組類型名 數組名大小 char c 10;1. 初始化: (1) 直接給出字符串中的各字符 static char a4= G , o , o , d ;若字符多于元素個數,則語法錯,反之,后面補0。存放字符數據。字符串用字符數組存放。(2)可以去
12、掉定義時的大小設置,而通過自動賦值決定長度(大小) static char x = I , , a , m , , a, , s , t , u , d , e , n , t ;(3) 前面說過,字符串常量用“ ” 表示,且由 0結尾. static char x =I am a student. ; 則長度為15+1=16, 其中x15存放 0,其中 亦可省略。 這種初始化未將結束標記0存入數組中。用于存放字符或字符串。用于存放字符或字符串。如:如:char w7=s, t, u, d, e, n, t;w是一個可以存放7個字符的數組而:char u8=student;(或寫成:char
13、u =student;)u是一個可存放8個字符的數組對上面兩種數組定義,有:對上面兩種數組定義,有:w0=u0=sw1=u1=tw2=u2=uw3=u3=dw4=u4=ew5=u5=nw6=u6=tu7=0(1) 字符串用雙引號字符串用雙引號 括起來。括起來。(2) 字符串的結束標志為字符串的結束標志為0, 由系統提供。由系統提供。例:例:char bn =computer;則:數組則:數組bn的長度為的長度為9bn0=cbn3=pbn6=ebn1=obn4=ubn7=rbn2=mbn5=tbn8=0格式符格式符: : %c 逐個輸入逐個輸入/ /輸出字符輸出字符。 %s 整個串一次輸入整個串
14、一次輸入/ /輸出輸出。1. 輸出輸出 (用用%s) (2) 在在printf中須直接寫數組名中須直接寫數組名. static char c =I am a student; printf(%s, c);(1) 用用%s輸出時輸出時,不輸出不輸出 0.(3) 若數組長度大于字符串長度若數組長度大于字符串長度,則遇到則遇到0即停即停止輸出止輸出 static char c10= china; printf( %s, c);(4) 輸出時遇到第一個輸出時遇到第一個0即結束。即結束。也可用輸出函數也可用輸出函數 puts()() 。2. 輸入輸入(用用%s)(2) 輸入多個字符串輸入多個字符串,可用
15、空格隔開。可用空格隔開。 static char str15, str25, str35; scanf(%s%s%s, str1, str2,str3);(1) 輸入字符串時輸入字符串時,系統自動加上系統自動加上0則則: 輸入 How are you str1: H o w str2: a r e str3: y o u 輸入輸入: : How are you 則只會將How輸入,且存為str: H o w 0 但若但若: : static char str13 scanf(%s, str);注:注: scanf中須用地址量,數組名表示地址量。中須用地址量,數組名表示地址量。scanf()()
16、函數的缺陷:函數的缺陷: 不能完整地讀入含有空格、制表符等字符的字符串。解決方案:用解決方案:用gets()()函數。函數。 gets()函數可讀入包括有空格、制表符 等全部字符。以換行符作為結束。例如有:例如有:char name9; gets(name);若輸入:若輸入:Very hot結果:結果: 數組name的元素如圖所示。name0 V name1 e name2 r name3 y name4 name5 h name6 o name7 t name8 0 #include main( ) char name13; int i; for (i =0; i =12; i +)scan
17、f(“ %c”,&namei); for (i =0; i =12; i +)printf(“ %c”,namei); scanf(“ %s”,name); printf(“ %s”,name);例例:采用不同的方式輸入輸出字符串運行結果運行結果:Pear & Apple Pear & ApplePear & Apple Pear#include #include main( )int i; char name74=sun,mon,tue,wed, thu,wen,sat; printf(Result is:n); name03=& name23=&am
18、p; name53=& for (i=0;i7;i+) printf(%sn,namei); getch();例例: 字符串數組值的改變。程序運行結果程序運行結果:sun&monmontue&wedwedthuwen&satsatNAME0SUN0NAME1MON0NAME2TUE0NAME3WED0NAME4THU0NAME5FRI0NAME6SAT0NAME0SUN&NAME1MON0NAME2TUE&NAME3WED0NAME4THU0NAME5FRI&NAME6SAT0賦初值:改變后:字符串處理函數字符串處理函數用于處理字符串運算
19、的函數,放在頭文件string.h中如: strcpy( )-字符串拷貝 strcat( )-字符串連接 strcmp( )-字符串比較 等等。例例1:字符串復制。#include #include #include main() int i; char name16=pear; char name213=Apple&Banana; printf(Result is:n); printf(1-%sn,name1); printf(2-%sn,name2); strcpy(name2,name1); printf(“copy:1-%sn,name1); printf(“copy:2-%s
20、n,name2); for (i=0;i11;i+) printf(%c,name2i); getch( );拷貝后: 拷貝前:Name1= pe ar 0Name2= A p pl& B anana0eName1= pe ar 0Name2= pe ar& B anana00程序運行結果:程序運行結果: Result is: 1-pear 2-Apple&Banana copy :1-pear copy :2-pear pear &Banana例:輸入一行字符,統計其中有多少個單詞,單詞之間用空格分隔開。# include stdio.hmain ( ) ch
21、ar c ,string81;int i, num=0, word=0; 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 line2.5 數組作為函數參數數組作為函數參數分為兩種情況:1. 數組元素作為實參2. 數組名同時為形、實參使用方法使用方法:把數組元素作為函數的
22、實參。把數組元素作為函數的實參。由于數組元素的性質與相同類型的簡單變由于數組元素的性質與相同類型的簡單變量的性質完全相同,因此,把數組元素作為函量的性質完全相同,因此,把數組元素作為函數的參數也和簡單變量一樣。數的參數也和簡單變量一樣。作用作用:傳值。傳值。int x, a10;如: xa5即a5為一元素,與x完全一樣。例:設有兩個同樣大小的一維數組a10、b10,將相應元素比較,統計a中大于b中對應元素的個數,小于的個數,相等時的個數。#include main()int a10, b10, i, n=0, m=0, k=0;printf(enter array a(10 number):n
23、);for(i=0; i10; i+)scanf(%d, &ai);printf (n);printf(enter array b(10 number):n);for (i=0; i10; i+)scanf(%d, &bi);printf(n);for (i=0; ibi %d timesnai=bi %d timesnaik)printf(array a is larger than array bn);else if (ny)flag=1;else if (xbi 4 times ai=bi 1 times aibi 5 timesarray a is smaller th
24、an array b1. 數組名的作用數組名的作用數組名代表的是數組的起始地址;數組名代表的是數組的起始地址;也就是第也就是第1個元素的地址。個元素的地址。使用數組名作為函數的參數時,形參和使用數組名作為函數的參數時,形參和實參必須是同一類型的數組,系統采用地址實參必須是同一類型的數組,系統采用地址傳送方式進行數據傳遞,即實參的首地址傳傳送方式進行數據傳遞,即實參的首地址傳遞給形參的首地址,實參與形參共享相同的遞給形參的首地址,實參與形參共享相同的數據單元。數據單元。使用方法:使用方法:函數的實參和形參都必須是數組名。函數的實參和形參都必須是數組名。作用:作用:傳址。傳址。2. 把數組名作為函
25、數參數的規則把數組名作為函數參數的規則(可以在函數中修改數組元素的值)#include main()void swap(int x);int a2=2,7;printf(a0:%d, a1:%dn,a0,a1);swap(a);printf(a0:%d, a1:%dn,a0,a1);void swap(int x2)int t;t=x0;x0=x1;x1=t;運行情況如下:a0:2, a1:7a0:7, a1:2注意注意: 二維數組的元素在內存中是按先行后列的順序存放的,因此可以將二維數組當作是一維數組。例例: 有一個34的矩陣如下:21043783113946要求要求: (1) 打印出所有元
26、素的和;(2) 打印出所有大于平均值的元素。#include#includeint add_ave(int m, int n, int arr );void prt_up(int m, int n, float average, int arr );main( )int A3 4=6, 4, 9, 13, 1, 3, 8, 7, 3, 4, 10, 2; int i=3, j=4, sum;float ave;sum=add_ave(i, j, A0);printf (The number or sum=%dn, sum);ave=(float)(sum)/(i j);printf (The
27、number or average=%5.2fn, ave);prt_up (i, j, ave, A0);int add_ave(int m, int n, int arr )int i;int total=0;for (i=0; im n; i+) total=total+arri;return (total);void prt_up(int m, int n, float average, int arr )int i, j;printf(The number of Bigger then average are:);for (i=0; im; i+) for (j=0; javerage) printf(arr%d%d=%dt, i, j, arri n+j);運行結果:運行結果:The number of sum=42The number of average= 3.00The number of Bigger then average are:arr0 0=6arr0 1=4arr0 2=9arr1 2=8arr1 3=7arr2 1=4arr2 2=10二維數組與一維數組的對應關系:6A00A01A02A03A10A11A12A13A20A21
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 思政課中的網絡教學資源開發
- 腦科學研究對人工智能算法創新的啟示與影響
- 有色氨綸包覆紗項目投資可行性研究分析報告(2024-2030版)
- 打造獨特產品故事的策略
- 教師如何利用網絡資源進行自我提升
- 府南基坑松木樁加固方案附圖
- 中國空氣清新器行業調查研究及投資戰略規劃研究報告
- 拼多多在移動時代的市場機會與挑戰
- 醫養結合人才的職業認同提升面臨的挑戰與機遇
- 教育旅游的市場分析
- 高效化學滅菌技術-洞察及研究
- 融媒體保密管理制度
- 2025至2030中國消防產業市場深度調研及發展前景及有效策略與實施路徑評估報告
- 2025江蘇揚州寶應縣“鄉村振興青年人才”招聘67人筆試參考題庫附答案詳解
- 地質災害危險性評估合同模板
- 公司廉政紀律管理制度
- 2025年高考全國二卷數學高考真題解析 含參考答案
- 保密知識競賽試題及答案
- T/CQAGS 3201-2023重慶好糧油壓榨菜籽油
- 2025新譯林版英語八上單詞默寫單(先鳥版)
- 自建門面租房協議書
評論
0/150
提交評論