ArrayStructure數(shù)組和結(jié)構(gòu)PPT教學(xué)課件_第1頁
ArrayStructure數(shù)組和結(jié)構(gòu)PPT教學(xué)課件_第2頁
ArrayStructure數(shù)組和結(jié)構(gòu)PPT教學(xué)課件_第3頁
ArrayStructure數(shù)組和結(jié)構(gòu)PPT教學(xué)課件_第4頁
ArrayStructure數(shù)組和結(jié)構(gòu)PPT教學(xué)課件_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1重談變量重談變量 在源程序中,變量是用于存取數(shù)據(jù)的標識符,具有不同的類型,如:int num;float x,y;double r; 在程序執(zhí)行過程中,變量是相應(yīng)存儲單元(或一組存儲單元)的名字 變量的類型決定 變量占用的存儲單元數(shù)量 存儲單元中二進制數(shù)據(jù)如何構(gòu)成變量的值(變量的內(nèi)容) 變量定義就是建立變量名和存儲單元之間的對應(yīng)關(guān)系 變量使用 在等號左邊,給變量賦值(存儲數(shù)據(jù)到存儲單元) 在“&”表達式中,求得變量的地址(存儲單元的地址) 在其他地方,取變量值參與運算(讀取存儲單元中的數(shù)據(jù))第1頁/共36頁2變量與內(nèi)存變量與內(nèi)存int main()int m;int n;double dbl

2、;m = 123;n = 321;dbl = m * n;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0 xFAC2AB2Cm0 xFAC2AB20dbl011110110000000000000000000000000100000100000001000000000000000000000000000000000000000000000000011000000100011111100

3、011010000000 xFAC2AB28n第2頁/共36頁3數(shù)組的定義和使用數(shù)組的定義和使用當我們需要處理100個人甚至更多人的年齡時,在程序中該如何來表示這100個甚至更多的數(shù)據(jù)?定義100個變量嗎?int x1, x2, x3, , x100;要是1000個人,10000個人呢?第3頁/共36頁41.數(shù)組的定義和使用數(shù)組的定義和使用 什么是數(shù)組 如何聲明數(shù)組 如何給數(shù)組賦值 如何遍歷與訪問數(shù)組中的內(nèi)容 數(shù)組的用途 多維數(shù)組第4頁/共36頁51.1 什么是數(shù)組什么是數(shù)組 數(shù)組是一種復(fù)合數(shù)據(jù)類型 數(shù)組從整體上定義了一組類型相同的變量 數(shù)組中的每個元素都可作為變量使用 數(shù)組元素的類型是相同的

4、 數(shù)組的元素順序地存儲在連續(xù)的內(nèi)存空間中當要處理很多類型相同的數(shù)據(jù)時,可利用數(shù)組以避免在程序中定義大量的變量第5頁/共36頁61.2 數(shù)組的聲明數(shù)組的聲明 數(shù)組聲明方法如下: 數(shù)據(jù)類型 變量名 數(shù)組元素個數(shù) = = 數(shù)組元素初值; 其中“= = 數(shù)組元素初值”部分可以省略 一些數(shù)組聲明的例子:int score5;char cards4 = a, 0, r, W;float point2 = 2.56, 23.43;double distances4 ;第6頁/共36頁7數(shù)組在內(nèi)存中的布局數(shù)組在內(nèi)存中的布局主存儲器score00score10000score2score3score4主存儲器c

5、ards0a0rWcards1cards2cards3int score5;char cards4;第7頁/共36頁8數(shù)組在內(nèi)存中的布局數(shù)組在內(nèi)存中的布局float point2;double distances4 ;第8頁/共36頁9數(shù)組元素數(shù)組元素 聲明一個數(shù)組變量相當于聲明一組變量,這組變量中的每一個都可以通過“數(shù)組變量名數(shù)組變量名 下標下標 ”形式來訪問。例如:score0, score1, score2 等等。 這組變量在內(nèi)存中是連續(xù)存放的,它們的下標從0開始計數(shù)。 在數(shù)組中(設(shè)N是數(shù)組的元素總數(shù)) 第一個數(shù)組元素的下標是0 最后一個數(shù)組元素的下標是N-1第9頁/共36頁101.3

6、數(shù)組元素的賦值與訪問數(shù)組元素的賦值與訪問 每個數(shù)組元素,就是一個變量。 每個數(shù)組元素占用的空間大小是由定義數(shù)組變量時給定的類型決定的 cards每個元素占1字節(jié)(char類型的長度) distance每個元素占8字節(jié)(double 類型的長度)。 數(shù)組元素的賦值可以在定義時給定初始值,也可以在程序中給數(shù)組元素賦值 在給數(shù)組元素賦值時,可以把數(shù)組元素看作單個變量,例如:score0 = 67;score3 = 89;distance2 = 356.24;cards0 = b; 給數(shù)組元素賦值,數(shù)據(jù)類型必須匹配。 數(shù)組元素可以用在任何單個變量可能出現(xiàn)的地方。例如:int score1, score

7、N;score1 = score0;scoreN= score3;第10頁/共36頁111.4 數(shù)組的遍歷數(shù)組的遍歷可以用一個循環(huán)語句給數(shù)組的所有元素賦值,或順序訪問它的每個元素。int student100;int odd=0, even=0;for (int i=0; i studenti;for (int i=0; i100;i+) studenti = i+1;if (studenti % 2) = 0) even+;else odd+;第11頁/共36頁121.5 數(shù)組的用途數(shù)組的用途 當程序要處理一組類型相同、含義類似的數(shù)據(jù)時應(yīng)該使用數(shù)組. 例如: 過年了,村里要慶祝一下。村長對村

8、里的128個村民說:做一個游戲,讓每個人把出生年+月+日得到一個數(shù)。如:1968年10月28日= 1968 + 10 + 28 = 2006。然后把這個數(shù)報上來。村里有一筆錢要作為游戲的獎金,數(shù)額為M元。如果有人報上來的數(shù)字與M相同,就把這筆錢發(fā)給這些人。如果只有一個人得獎,獎金都歸這個人。如果有多于一個人得獎,則他們平分這筆錢。現(xiàn)在讓我們來寫一段程序算算都有哪些人得到了獎金?得到多少?第12頁/共36頁13問題求解問題求解 聲明一個數(shù)組存放所有村民上報的數(shù)據(jù) 聲明一個數(shù)組存放獲獎?wù)叩木幪枺ㄐ疫\者數(shù)組) 聲明一個整數(shù)存放獲獎?wù)呷藬?shù) 村民順序報上數(shù)字,其相應(yīng)的編號就是存放其數(shù)據(jù)的數(shù)組元素下標:0

9、,1,2, 報上數(shù)字與幸運數(shù)相等,則 記錄編號到幸運者數(shù)組中 獲獎?wù)呷藬?shù)加1 最后,打印出獲獎?wù)呔幪柡瞳@得的獎金數(shù)額第13頁/共36頁14#include using namespace std;const int LUCKY_M = 2006; /幸運數(shù)字幸運數(shù)字const int POPULATION = 128; /村民人數(shù)村民人數(shù)int main( ) int peoplePOPULATION; /記錄所有村民上報的年、月、日相加之和記錄所有村民上報的年、月、日相加之和 int luckyPeoplePOPULATION;/幸運者數(shù)組,記錄獲獎?wù)呔幪栃疫\者數(shù)組,記錄獲獎?wù)呔幪?int

10、nLucky=0; /獲獎?wù)呷藬?shù)獲獎?wù)呷藬?shù) for (int i=0; i peoplei; /讀入村民報的數(shù)字,數(shù)組下標就是村民的編號讀入村民報的數(shù)字,數(shù)組下標就是村民的編號 for (int i=0; iPOPULATION; i+) if (peoplei = LUCKY_M) luckyPeoplenLucky = i; /假設(shè)村民從假設(shè)村民從0 0開始編號開始編號 nLucky+; for (int i=0; inLucky; i+)/輸出獲獎?wù)呔幪柤八@獎金數(shù)額輸出獲獎?wù)呔幪柤八@獎金數(shù)額 cout luckyPeoplei LUCKY_M / nLucky endl;第14頁/共

11、36頁15數(shù)組使用中的注意事項數(shù)組使用中的注意事項 數(shù)組必須初始化(或賦值)后方可使用 在C+中可用type aryN = 0形式給ary賦初值0 數(shù)組元素下標范圍從0到N-1,避免訪問越界 整個數(shù)組占用字節(jié)數(shù)可用“sizeof(數(shù)組變量)”獲得 聲明數(shù)組時盡量用常量指明數(shù)組長度 數(shù)組長度與數(shù)組占用字節(jié)數(shù)是兩個不同的概念 數(shù)組長度是數(shù)組中包含的元素的個數(shù) 數(shù)組占用字節(jié)數(shù)是數(shù)組在內(nèi)存中占用的存儲單元數(shù)第15頁/共36頁161.6 多維數(shù)組多維數(shù)組 二維數(shù)組的聲明:數(shù)組的數(shù)組 類型類型 變量名變量名 數(shù)組行數(shù)數(shù)組行數(shù)數(shù)組列數(shù)數(shù)組列數(shù)=初值列表初值列表,初值列表初值列表 二維數(shù)組的例子:intmat

12、rix1010 = 0;intn2323 = 1,2,3,2,4,6;double scoresSTUDENT_NUMCOURSE_NUM; 其他多維數(shù)組可以此類推第16頁/共36頁17多維數(shù)組在內(nèi)存中的布局多維數(shù)組在內(nèi)存中的布局主存儲器n2300123246n2301n2302n2312n2310n2311n230n231n23第17頁/共36頁18多維數(shù)組應(yīng)用舉例多維數(shù)組應(yīng)用舉例11 計算全年級180名學(xué)生每個學(xué)生8門課的平均成績和每門課全年級平均成績 求解過程 定義一個1808的二維數(shù)組記錄各門課成績 錄入每個人各門課成績 計算每名學(xué)生的平均成績并打印出來 計算每門課程的平均成績并打印出

13、來第18頁/共36頁19學(xué)生學(xué)生 課程課程0 01 12 2.0 0838361614141.1 1888896966868.2 2676781817070.3 3777767677373.4 4808067678383.5 5838383837373.6 6767678786262.7 7717149497272.8 8949462627272.9 9757581816767.1010404079797878.1111616178787474.1212898993936565.1313868677777272.1414797976767373.求學(xué)生的平均分求課程平均分第19頁/共36頁20

14、#include #include using namespace std;const int STUDENT_NUM = 180; /學(xué)生人數(shù)學(xué)生人數(shù)const int COURSE_NUM = 8; /課程門數(shù)課程門數(shù)int main( ) float scoresSTUDENT_NUMCOURSE_NUM; /原始成績原始成績 for (int i=0; iSTUDENT_NUM; i+) /錄入學(xué)生成績:錄入學(xué)生成績:這是一個二重循環(huán)這是一個二重循環(huán) for (int j=0; j scoresij; /讀入每門課成績讀入每門課成績 for (int i=0; iSTUDENT_NUM

15、; i+) /計算學(xué)生平均成績計算學(xué)生平均成績 float sum = 0; /總成績總成績 for (int j=0; jCOURSE_NUM; j+) sum+= scoresij; cout Student i : fixed setprecision(3) sum/COURSE_NUM endl; for (int j=0; jCOURSE_NUM; j+) /計算課程平均成績計算課程平均成績 float sum = 0; /總成績總成績 for (int i=0; iSTUDENT_NUM; i+) sum += scoresij; cout Course j : fixed set

16、precision(3) sum/STUDENT_NUM endl; 第20頁/共36頁21多維數(shù)組應(yīng)用舉例多維數(shù)組應(yīng)用舉例 課后思考題:(POJ 2713) 在一個正方形的灰度圖片上,腫瘤是一塊矩形的區(qū)域,腫瘤的邊緣所在的像素點在圖片中用0表示。其它腫瘤內(nèi)和腫瘤外的點都用255 表示?,F(xiàn)在要求你編寫一個程序,計算腫瘤內(nèi)部的像素點的個數(shù)(不包括腫瘤邊緣上的點)。已知腫瘤的邊緣平行于圖像的邊緣。第21頁/共36頁222. 結(jié)構(gòu)的定義和使用結(jié)構(gòu)的定義和使用 通常,我們需要將多個不同類型、但相互之間有著內(nèi)在聯(lián)系的數(shù)據(jù)組合成一個有機的整體,對這個整體進行各種操作。比如, 一個學(xué)生的學(xué)號、姓名、性別、年

17、齡、各門功課的成績等數(shù)據(jù),這些數(shù)據(jù)都與一個學(xué)生相關(guān)聯(lián)。 如果將這些數(shù)據(jù)定義為各獨立的簡單變量:Number、Name、Sex、Age、Course1、Course2、 這樣就難以反映它們之間的內(nèi)在聯(lián)系。 應(yīng)該把它們組織成一個組合項,在一個組合項中包含若干各類型不同(當然也可以相同)的數(shù)據(jù)項。這個組合項就是結(jié)構(gòu)結(jié)構(gòu)。第22頁/共36頁232. 結(jié)構(gòu)的聲明和使用結(jié)構(gòu)的聲明和使用 結(jié)構(gòu)類型及其聲明 結(jié)構(gòu)類型變量及其訪問 結(jié)構(gòu)類型的應(yīng)用 結(jié)構(gòu)分量的類型 結(jié)構(gòu)的內(nèi)存布局、大小與對齊第23頁/共36頁242.1 結(jié)構(gòu)類型及其聲明結(jié)構(gòu)類型及其聲明 把多個緊密關(guān)聯(lián)的變量順序組織在一起,定義成一個新的復(fù)合類型結(jié)

18、構(gòu)類型 聲明一個結(jié)構(gòu)類型struct結(jié)構(gòu)類型名 類型1 1 分量名1;1;類型2 2 分量名2;2;. ; ; 結(jié)構(gòu)分量的類型可以相同,也可不同 同一個結(jié)構(gòu)內(nèi)的分量名不可相同 不同結(jié)構(gòu)內(nèi)的分量名可以重用struct point float x; float y;第24頁/共36頁252.2 結(jié)構(gòu)類型變量的聲明結(jié)構(gòu)類型變量的聲明 定義新結(jié)構(gòu)只是定義了一個新類型 系統(tǒng)并不為這個新類型分配內(nèi)存空間 系統(tǒng)只會為該類型的變量按結(jié)構(gòu)的定義分配空間。 結(jié)構(gòu)類型變量定義的兩種形式: 用已定義的結(jié)構(gòu)定義變量,例如:struct point point1;struct point point1;struct po

19、int point2;struct point point2; 定義結(jié)構(gòu)的同時定義結(jié)構(gòu)類型的變量,例如:struct roof struct roof float x, y;float x, y;int p;int p; roof1, roof2; roof1, roof2;第25頁/共36頁262.3 結(jié)構(gòu)類型變量的訪問結(jié)構(gòu)類型變量的訪問 結(jié)構(gòu)類型變量的值由其各個分量構(gòu)成 對分量的訪問一般通過變量名.分量名完成 結(jié)構(gòu)賦值及訪問的例子:float dx, dy;struct point float x, y; p1, p2, points2;p1.x = p1.y = 3.5f;p2.x =

20、p2.y = 1.5f;dx= p1.x - p2.x;dy= p1.y - p2.y;points0 = p1; /結(jié)構(gòu)變量本身可以作為一個整體來訪問結(jié)構(gòu)變量本身可以作為一個整體來訪問points1 = p2;第26頁/共36頁27示例:用結(jié)構(gòu)求解救援過程示例:用結(jié)構(gòu)求解救援過程 在圖的原點是大本營,救生船每次從大本營出發(fā),救了人之后將人送回大本營。圖中的點代表屋頂,每個屋頂由其位置坐標和其上的人數(shù)表示。救生船每次從大本營出發(fā),以速度50米/分鐘時向下一個屋頂,達到一個屋頂后,救下其上的所有人,每人上船1分鐘,船原路返回,達到大本營,每人下船0.5分鐘。假設(shè)原點與任意一個屋頂?shù)倪B線不穿過其它

21、屋頂。假設(shè)屋頂數(shù)為50,給定屋頂數(shù)以及每個屋頂?shù)淖鴺撕腿藬?shù),求出所有人都到達大本營并登陸所用的時間。并輸出所有屋頂?shù)淖鴺撕腿藬?shù)。第27頁/共36頁28NiiiipspeedyxtotalTime122)5 . 01 (2(第28頁/共36頁29#include #include const int NUM = 50; const float SPEED = 50.0; const float UP = 1.0; const float DOWN = 0.5;int main()struct roof float x, y;/ 屋頂坐標屋頂坐標int p;/ 屋頂上的人數(shù)屋頂上的人數(shù)roofsN

22、UM;int roof_num;/ 屋頂數(shù)屋頂數(shù) printf(Please input roof_num:); scanf(%d, &roof_num);float x, y;int p;for (int i=0;iroof_num;i+) /用循環(huán)輸入每一個屋頂?shù)奈恢眉叭藬?shù)用循環(huán)輸入每一個屋頂?shù)奈恢眉叭藬?shù)scanf(%f%f%d,&x, &y, &p);roofsi.x = x; roofsi.y = y; roofsi.p = p;double totalTime = 0;/ 救援總時間救援總時間for (int i=0; iroof_num; i+) /用循環(huán)處理每一個屋頂,計算救援時

23、間用循環(huán)處理每一個屋頂,計算救援時間x = roofsi.x; y = roofsi.y; p = roofsi.p;totalTime += 2 * sqrt(x*x + y*y) / SPEED; / 計算從大本營到屋頂?shù)碾p程航行時間計算從大本營到屋頂?shù)碾p程航行時間totalTime += p * (UP + DOWN); / 計算被求人員上船和下船所耗費的總時間計算被求人員上船和下船所耗費的總時間printf(Total Time is: %.2lfn, totalTime); / 打印出救援總時間打印出救援總時間for (int i=0; iroof_num; i+) / 依次打印出各

24、屋頂?shù)奈恢眉叭藬?shù)依次打印出各屋頂?shù)奈恢眉叭藬?shù)printf(Roof ID: %d %.2f %.2f %dn, i+1, roofsi.x, roofsi.y, roofsi.p);第29頁/共36頁302.3 結(jié)構(gòu)應(yīng)用示例學(xué)生成績統(tǒng)計 定義一個結(jié)構(gòu),包含學(xué)生的所有信息。struct student int number; char name8; char sex; int age; float course8; ;struct student class1160;第30頁/共36頁312.4 復(fù)合類型的結(jié)構(gòu)分量復(fù)合類型的結(jié)構(gòu)分量結(jié)構(gòu)分量的類型可以是任何類型 結(jié)構(gòu)類型分量struct point float x, y;struct roof struct point location; int p;roof1; (roof1.location).x 數(shù)組類型分量struct city struct point int x, y; location; char na

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論