版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1第八章數(shù) 組1一數(shù)組概述一維數(shù)組的定義與引用一維數(shù)組的初始化6學(xué)時(shí)安排 參考計(jì)劃二二維數(shù)組的定義與引用二維數(shù)組的初始化應(yīng)用舉例(一)三應(yīng)用舉例(二)2內(nèi)容提要概述一維數(shù)組和二維數(shù)組的定義與使用常用算法:查找、排序等38.1 概述 數(shù)組:按序排列的同類數(shù)據(jù)元素的集合。數(shù)組是由若干 類型相同 的相關(guān)數(shù)據(jù)按 一定順序存儲(chǔ) 在一起形成的 一組數(shù)據(jù) 集合。 數(shù)組的用途保存大量同類型的相關(guān)數(shù)據(jù)例如:矩陣運(yùn)算,表格數(shù)據(jù)等數(shù)組的特點(diǎn)快速地隨機(jī)訪問一旦定義,不能改變大小均由連續(xù)的存儲(chǔ)單元組成,最低地址對(duì)應(yīng)于數(shù)組的第一個(gè) 元素,最高地址對(duì)應(yīng)于最后一個(gè)元素引用時(shí)可使用同一名字并利用下標(biāo)進(jìn)行區(qū)分?jǐn)?shù)組可分為一維、二維
2、、多維數(shù)組 48.2.1 一維數(shù)組的定義和引用一維數(shù)組的定義定義方式為: 類型說明符 數(shù)組名常量表達(dá)式例如:int a10;說明: 常量表達(dá)式用中括號(hào)括起 下標(biāo)從0開始,int a10 a0,a1,.a9 常量表達(dá)式必須是常量,不能是變量。 a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 1 20 4 60 9 3 98 0 11 5058.2.1 一維數(shù)組的定義和引用 例如: int score100;/*數(shù)組*/ 數(shù)組的數(shù)據(jù)類型數(shù)組名:數(shù)組首址2000200220042006200820102012score0score1score2score3score4score5 sco
3、re=2000數(shù)組元素個(gè)數(shù)6一維數(shù)組元素的引用通過下標(biāo) ,每次可引用一個(gè)數(shù)組元素,但不能引用整個(gè)數(shù)組。一個(gè)數(shù)組元素就如同一個(gè)簡單變量。a0=a5+a7-a2*3 常量和表達(dá)式做下標(biāo)ai=ai+1; 變量做下標(biāo)aa0=a1 數(shù)組元素做下標(biāo)書上例8-1,說明了對(duì)一維數(shù)組的定義和引用的基本方法。8.2.1 一維數(shù)組的定義和引用7注意:1)對(duì)數(shù)組定義時(shí)所聲明的類型實(shí)際上是指數(shù)組元素的取值類型;對(duì)于同一個(gè)數(shù)組,其所有元素的數(shù)據(jù)類型必須是相同的。2)數(shù)組名的命名應(yīng)符合標(biāo)識(shí)符的定義規(guī)則。3)數(shù)組名不能與其它變量名相同。4)數(shù)組定義時(shí),方括號(hào)中的常量表達(dá)式說明了數(shù)組元素的個(gè)數(shù),如a5表示數(shù)組a有5個(gè)元素。但是
4、其下標(biāo)是從0開始編號(hào)的 。8.2.1 一維數(shù)組的定義和引用8注意:5)在定義時(shí),不能在方括號(hào)中用變量來表示元素的個(gè)數(shù),但是可以是符號(hào)常數(shù)或常量表達(dá)式。6)允許在同一個(gè)類型說明中,同時(shí)說明多個(gè)數(shù)組和多個(gè)變量。例如:int a,b,c,d,k110,k220;7)可以越界訪問數(shù)組的元素,但這樣做會(huì)導(dǎo)致不可預(yù)料的結(jié)果,甚至于造成系統(tǒng)的崩潰(執(zhí)行寫操作)。8.2.1 一維數(shù)組的定義和引用9一維數(shù)組的定義、賦值和引用。 【exp8-1】#include void main() int i,a10; for(i=0;i=0;i-) printf(%d ,ai); /依次倒序輸出各個(gè)元素程序運(yùn)行結(jié)果:9 8
5、 7 6 5 4 3 2 1 08.2.1 一維數(shù)組的定義和引用10 在實(shí)際的應(yīng)用軟件中,數(shù)組大小一般都用宏來定義,以適應(yīng)未來可能的變化。#define SIZE 10 int aSIZE;8.2.1 一維數(shù)組的定義和引用118.2.2 一維數(shù)組的初始化 數(shù)組的初始化是指在定義數(shù)組時(shí)給數(shù)組初值。1. 在定義數(shù)組時(shí)賦初值;int a10=0,1,2,3,4,5,6,7,8,9;2. 部分賦值,未明確寫出的均初始化為0;int a10=0,1,2,3,4;3. 賦值時(shí)不指定數(shù)組長度。int a=0,1,2,3,4; /*數(shù)組只有5個(gè)元素*/128.3.1 二維數(shù)組的定義與引用定義:類型說明符 常量
6、表達(dá)式常量表達(dá)式例如:float a34 a00 a03 a10 a13 a20 a23138.3.1 二維數(shù)組的定義與引用二維數(shù)組的定義 數(shù)組由若干 類型相同 的相關(guān)數(shù)據(jù)按 一定順序存儲(chǔ) 在一起形成的 一組數(shù)據(jù) 集合 例如: int score1005; 數(shù)組的數(shù)據(jù)類型數(shù)組名:數(shù)組首址行 訪問數(shù)組元素:score00、score01、 score04 、score994 訪問數(shù)組:score 系統(tǒng)在內(nèi)存中分配連續(xù)100*5 個(gè)int數(shù)據(jù)類型的空間給數(shù)組。存放順序:按行存放,先順序存放第一行的元素,再存放第二行的元素 列148.3.1 二維數(shù)組的定義與引用引用程序中引用的是數(shù)組中一個(gè)元素,必須
7、用下標(biāo)來指定。如:數(shù)組名下標(biāo)下標(biāo)float a44 a00 a01 a02 a03a10 a11 a12 a13 a20 a21 a22 a23a30 a31 a32 a33其中a23指的是第三行第四個(gè)元素。158.3.1 二維數(shù)組的定義與引用三維數(shù)組的定義與二維數(shù)組相同。如:float a234 234共有24個(gè)元素。 float a100100100有1000000個(gè)元素a010a000a999999168.3.1 二維數(shù)組的定義與引用在程序中為數(shù)組賦值的方法1. 用scanf語句由用戶依次輸入:for (i=1;i=3;i+) for (j=1;j=4;j+) scanf(“%d”,&a
8、ij);2. 由循環(huán)變量用循環(huán)賦值: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 for (i=0;i4;i+) (for j=0;j4;j+) aij = 4*i+j+1;178.3.1 二維數(shù)組的定義與引用二維數(shù)組程序舉例將一個(gè)二維數(shù)組行和列元素互換,存到另一個(gè)數(shù)組中 1 4a= 1 2 3 b= 2 5 4 5 6 3 6分析:對(duì)數(shù)組a,列先于行變化,對(duì)于數(shù)組b,行先于列變化.for (i=0;i2;i+) for (j=0;j3;j+) bji=aijfor (i=0;i3;i+) for (j=0;j2;j+) bij=aji18數(shù)組定義后,其元素值
9、是隨機(jī)數(shù)。在定義數(shù)組的同時(shí),為其元素賦值,稱為賦初值。int a5 = 12, 34, 56 ,78 ,9 ;int a22=1,2,3,4;int a22=0,2,1,3;int a5 = 0 ;int Arr23=0,1,2;int a = 11, 22, 33, 44, 55 ;int matrix4=1,2,3,4,1對(duì)多維數(shù)組,可以且只可以省略最高維長度說明切記切記!/*數(shù)組賦初值,整體賦值 */*數(shù)組賦初值,所有未顯式 指定值元素賦值為”0” */*由計(jì)算機(jī)自動(dòng)計(jì)算 數(shù)組大小 */8.3.2 二維數(shù)組的初始化19int matrix = 1,2,3,4,5,6,7,8,9,10,1
10、1,12;int matrix4=1,2,3,4,1;int matrix4 = 1,2,3,4,5,6,7,8,9;int matrix4 = 1,2,3,4,5,6,7,8,9,10;編譯通不過3434348.3.2 二維數(shù)組的初始化20課堂練習(xí)1.以下對(duì)一維數(shù)組a的正確說明是: A) char a(10) ; B) int a10 ; C) int k=5,ak; D) char a =a,b,c;2.以下對(duì)二維數(shù)組a的正確說明是: A) char a105 ; B) int a23 ; C) int k=5,akk-2; D) char a43=“abc”,“bcd”,“cde”; E
11、) int a34 = 1,5,9;21將數(shù)組中的元素顛倒順序排放1 2 3 4 5 6 7 8 9 10分析:1) a0 與a9交換, a1 交換 a8,依此類推。 錯(cuò)誤的寫法 a0=9;a9=a0; 2) 如何控制循環(huán), 只需循環(huán)到一半 k=n/2; for (i=1,j=n;i=k;i+;j-) t=ai;ai=aj;aj=t 還可以寫成 for (i=1,j=n;ij;i+,j-)8.4 應(yīng)用舉例22輸入100個(gè)050的整數(shù),統(tǒng)計(jì)每個(gè)數(shù)出現(xiàn)的次數(shù)【exp8_2】分析:1) 需要51個(gè)變量用于統(tǒng)計(jì) int count51。2) 讀一個(gè)字符,在相應(yīng)的變量上加1countn+n=0 coun
12、t0+n=1 count1+ n=50 count50+0n0n1n50.000000000000011111111111111111111111150505050505050505050505050505050505050505050505050505050505050508.4 應(yīng)用舉例233) 如果用if 語句,需要判斷多少次? if (n=0) count0+; if (n=1) count1+;4)用switch(n) case 0:count0+; case 1:count1+;. 5)采用數(shù)組:讀入的數(shù)字就是累加變量的下標(biāo)索引 countk+;6)需要循環(huán)多少次?100次?8.4
13、 應(yīng)用舉例24程序:#include stdio.hmain() int count51; int i,n; for (i=0; i=50; i+) counti=0; for (i=0; i=99; i+) scanf(%d,&n); countn+; for (i=0;i=50;i+) printf(%d,counti);8.4 應(yīng)用舉例25求Fibnacci數(shù)列1,1,2,3,5,8,13,21,.【exp8_3】 初值 f0=1,f1=1 循環(huán)體:fi=fi-2+fi-1 循環(huán)控制 (for i=2,i=20;i+) 完整程序:void main() int f20=1,1; for
14、(i=2;i=20;i+) fi=fi-2+fi-1; for (i=2;i=20;i+) if (i%5=0) printf(n); printf(%12d,fi); 8.4 應(yīng)用舉例26選擇排序算法 【exp8_4】第1次, 將最小數(shù)0和第一位的3交換第2次,將次小數(shù)1和第2位的6交換發(fā)現(xiàn)的規(guī)律:for(i=0;iN-1;i+) 將當(dāng)前i元素的位置記入min; for(j=i+1;jN;j+) 如果j元素的值更小,記錄到min如果min和i不同,則交換兩元素 8.4 應(yīng)用舉例3 6 2 5 8 1 0 4 7 90 6 2 5 8 1 3 4 7 90 1 2 5 8 6 3 4 7 90
15、 1 2 5 8 6 3 4 7 90 1 2 3 8 6 5 4 7 90 1 2 3 4 6 5 8 7 90 1 2 3 4 5 6 8 7 90 1 2 3 4 5 6 8 7 90 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 927#include #define N 10void main() int i,t,j,min,dataN=3,6,2,5,8,1,0,4,7,9; / 定義i,j for(i=0;iN-1;i+) / 有N個(gè)數(shù),則需要查找從0N-2位置的數(shù),最后一 個(gè)N-1為僅僅剩下的一個(gè),就不需要排序了 min=i; /認(rèn)為當(dāng)前i為最小的數(shù)的位
16、置 for(j=i+1;jN;j+) /從第i個(gè)直至數(shù)組最后一個(gè)數(shù) if(datajdatamin) min=j; /記錄比當(dāng)前min小的數(shù)的位置 8.4 應(yīng)用舉例28 if(min!=i) /將找到的最小數(shù)datamin放到它對(duì)應(yīng)的位置去,如果假設(shè)為真,即min就是i,則不用交換 t=datai; datai= data min; datamin=t;/交換數(shù)據(jù) /對(duì)于當(dāng)前位置i的數(shù)排序完畢,還剩下i+1N-1下標(biāo)的數(shù) for(i=0;iN;i+) printf(%d ,datai); /輸出8.4 應(yīng)用舉例29在數(shù)組中查找數(shù)據(jù)【exp8_5】情況1:在無序數(shù)組中查找給定值首次出現(xiàn)的位置 如
17、:10 1 20 39 9 4 12 43 33 4 19(找4的位置)從第0個(gè)元素到最后一個(gè)元素一次與被找元素比較,相等則停止查找。循環(huán)結(jié)束條件: (已經(jīng)找到)|所有的數(shù)組都已經(jīng)找遍8.4 應(yīng)用舉例30void main() int a10,i,num; for (i=0;i10;i+) scanf(“%d”,&ai); printf(“輸入被查找的數(shù)n”); scanf(“%d”,&num); for (i=0;i10;i+) if (ai=num) break; if (i=9) printf ( “被查找的數(shù)是第%d個(gè)數(shù)n,i+1); else printf(“沒找到!n”);8.4
18、應(yīng)用舉例318.4 應(yīng)用舉例考慮另外一種情況,在有序數(shù)組中插入一個(gè)數(shù)。首先需要確定該元素的位置。1 3 5 7 9 116i從第0個(gè)元素開始比較,當(dāng)6小于或等于某個(gè)數(shù)時(shí)停止,該數(shù)的位置即為所求。 i = 0; while (i =num) break; else i+; 如果沒找到,i的值為10328.4 應(yīng)用舉例數(shù)組右移一位 從最后一個(gè)元素右移for (i=6;i=1;i-) ai+1=ai;不能寫成a1=a0;a2=a1;1 2 3 4 5 6 71 1 2 3 4 5 6 733如果需要將給定的某個(gè)數(shù)插入到有序的數(shù)組中,可以使用如下的五個(gè)步驟:建立數(shù)組排序找出被插入值所在的位置從該位置起到最后的所有元素右移一位將待插入數(shù)值放入上一步空出的位置參考【exp8_6】8.4 應(yīng)用舉例348.4 應(yīng)用舉例#include stdio.hvoid main() int a21; int i,p,k,num,found; char c; printf(“輸入20個(gè)整數(shù)n); for (i=0;i20;i+) scanf(“%d”,&a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 房東托管物業(yè)合同模板
- 委托財(cái)務(wù)審計(jì)合同模板
- 賓館床墊銷售合同范例
- 建筑范例木材銷售合同范例
- 廣告攝像合同范例
- 出售合院別墅合同范例
- 2024年蘭州駕駛員客運(yùn)資格證考試試題題庫
- 2024年牡丹江客運(yùn)資格證題庫及答案
- 2024年陜西客運(yùn)從業(yè)資格證理論考試答題技巧
- 2024年朝陽駕校資格證模擬考試題
- 大學(xué)生心理健康教育智慧樹知到課后章節(jié)答案2023年下安徽中醫(yī)藥大學(xué)
- 裝配式混凝土結(jié)構(gòu)連接節(jié)點(diǎn)構(gòu)造
- 曲靖市數(shù)字經(jīng)濟(jì)產(chǎn)業(yè)餐廚垃圾資源化再利用項(xiàng)目(重新報(bào)批)環(huán)評(píng)報(bào)告
- 小學(xué)語文跨學(xué)科學(xué)習(xí)任務(wù)群學(xué)習(xí)任務(wù)設(shè)計(jì)策略
- 編施工方案的目的
- 亮化工程安全施工方案
- 廣西南寧市西鄉(xiāng)塘區(qū)2023-2024學(xué)年四年級(jí)數(shù)學(xué)第一學(xué)期期末調(diào)研試題含答案
- ul2464電線線徑標(biāo)準(zhǔn)
- 《鄉(xiāng)土中國》整本書閱讀公開課
- 氣排球比賽規(guī)則課件
- NB/T 11123-2023煤礦安全雙重預(yù)防機(jī)制規(guī)范
評(píng)論
0/150
提交評(píng)論