版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第8章 數(shù)組,本章學(xué)習(xí)內(nèi)容, 對(duì)數(shù)組名特殊含義的理解 數(shù)組類型,數(shù)組的定義和初始化 向函數(shù)傳遞一維數(shù)組和二維數(shù)組 排序、查找、求最大最小值等常用算法,為什么使用數(shù)組(Array)?,【例8.1】要讀入10人的成績(jī),然后求平均成績(jī) 需定義10個(gè)不同名整型變量,需要使用多個(gè)scanf() int score1,score2,score10; scanf(%d, ,保存大量同類型的相關(guān)數(shù)據(jù),8.1一維數(shù)組的定義和初始化,一維數(shù)組的定義 存儲(chǔ)類型 數(shù)據(jù)類型 數(shù)組名 整數(shù)1 整數(shù)2 整數(shù)n;,a9,a8,a7,a1,a0,int a10; 定義一個(gè)有10個(gè)int型元素的數(shù)組 系統(tǒng)在內(nèi)存分配連續(xù)的10個(gè)i
2、nt空間給此數(shù)組 直接對(duì)a的訪問(wèn),就是訪問(wèn)此數(shù)組的首地址,基類型,下標(biāo)從0開(kāi)始,8.1一維數(shù)組的定義和初始化,a9,a8,a7,a1,a0,int a10; 數(shù)組大小必須是值為正的常量,不能為變量 一旦定義,不能改變大小 數(shù)組大小最好用宏來(lái)定義,以適應(yīng)未來(lái)可能的變化 #define SIZE 10 int aSIZE;,一維數(shù)組的定義 存儲(chǔ)類型 數(shù)據(jù)類型 數(shù)組名 整數(shù)1 整數(shù)2 整數(shù)n;,8.1一維數(shù)組的定義和初始化,數(shù)組定義后的初值仍然是隨機(jī)數(shù) 一般需要我們來(lái)初始化 int a5 = 12, 34, 56 ,78 ,9 ; int a5 = 0 ; int a = 11, 22, 33, 4
3、4, 55 ;,8.1一維數(shù)組的定義和初始化,數(shù)組的引用 數(shù)組名 下標(biāo) 數(shù)組下標(biāo)(index)都是從0開(kāi)始 使用a0、a1、a2、a9這樣的形式訪問(wèn)每個(gè)元素 下標(biāo)既可是常量,也可是整型表達(dá)式,允許快速隨機(jī)訪問(wèn),如ai 可以像使用普通變量一樣使用它們,如何使兩個(gè)數(shù)組的值相等?,main() int a4 = 1,2,3,4, b4; b = a; ,解決方法 方法1:逐個(gè)元素賦值 b0=a0; b1=a1; b2=a2; b3=a3; 方法2:通過(guò)循環(huán)賦值 int i; for (i=0;i4;i+) bi = ai; ,原因: 數(shù)組名表示數(shù)組的首地址,其值不可改變!,8.1一維數(shù)組的定義和初始
4、化,【例8.2】編程實(shí)現(xiàn)顯示用戶輸入的月份(不包括閏年的月份)擁有的天數(shù),8.1一維數(shù)組的定義和初始化,下標(biāo)越界是大忌! 編譯程序不檢查是否越界 下標(biāo)越界,將訪問(wèn)數(shù)組以外的空間 那里的數(shù)據(jù)是未知的,不受我們掌控,可能帶來(lái)嚴(yán)重后果,【例8.3】當(dāng)下標(biāo)值小于0或超過(guò)數(shù)組長(zhǎng)度時(shí) 會(huì)出現(xiàn)什么情況?,運(yùn)行程序或單步執(zhí)行觀察變量變化情況可以看到,變量c和a的值因數(shù)組越界而被悄悄破壞了,1,2,3,4,5,6,1,2,0,7,8,9,10,11,8.2二維數(shù)組的定義和初始化,一維數(shù)組 用一個(gè)下標(biāo)確定各元素在數(shù)組中的順序 可用排列成一行的元素組來(lái)表示 如 int a5; 二維數(shù)組 用兩個(gè)下標(biāo)確定各元素在數(shù)組中
5、的順序 可用排列成i行,j列的元素組來(lái)表示 如 int b23; n維數(shù)組 用n個(gè)下標(biāo)來(lái)確定各元素在數(shù)組中的順序 如 int c324; n3時(shí),維數(shù)組無(wú)法在平面上表示其各元素的位置,【例】以下程序的運(yùn)行結(jié)果是什么? int main() int a3=1,2,3,4,5,6,0; printf(%d,%d,%dn,a11,a21,a31); return 0; ,1 2 3 4 5 0 6 0 0 0 0 0,結(jié)果:5, 0, 0,【例】若int a 3=1, 2, 3, 4, 5, 6, 7, 則a數(shù)組的第一維大小是多少?,1 2 3 4 5 6 7 0 0,二維數(shù)組的初始化,數(shù)組的數(shù)據(jù)類
6、型和存儲(chǔ)類型,根據(jù)數(shù)組的數(shù)據(jù)類型,為每一元素安排相同長(zhǎng)度的存儲(chǔ)單元 根據(jù)數(shù)組的存儲(chǔ)類型,將其安排在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)、靜態(tài)存儲(chǔ)區(qū)或寄存器區(qū) 用sizeof(a)來(lái)獲得數(shù)組a所占字節(jié)數(shù),short int a23;,a10,a11,a12,a00,a01,a02,存放順序:按行存放 先順序存放第0行元素,再存放第1行元素,需知道數(shù)組每行列數(shù)才能從起始地址開(kāi)始正確讀出數(shù)組元素,二維數(shù)組的存儲(chǔ)結(jié)構(gòu),二維數(shù)組實(shí)例,【例8.4】從鍵盤輸入某年某月(包括閏年),編程輸出該年的該月?lián)碛械奶鞌?shù),8.3向函數(shù)傳遞一維數(shù)組,傳遞整個(gè)數(shù)組給另一個(gè)函數(shù),可將數(shù)組的首地址作為參數(shù)傳過(guò)去 用數(shù)組名作函數(shù)參數(shù) 只復(fù)制一個(gè)地址
7、自然比復(fù)制全部數(shù)據(jù)效率高 由于首地址相同,故實(shí)參數(shù)組與形參數(shù)組占用同一段內(nèi)存 在該函數(shù)內(nèi),不僅可以讀這個(gè)數(shù)組的元素,還可以修改它們,簡(jiǎn)單變量和數(shù)組作函數(shù)參數(shù)的區(qū)別,【例8.5】計(jì)算平均分,計(jì)數(shù)控制的循環(huán),【例8.5】計(jì)算平均分,計(jì)數(shù)控制的循環(huán),【例8.6】計(jì)算平均分 當(dāng)輸入負(fù)值時(shí),表示輸入結(jié)束,標(biāo)記控制的循環(huán)負(fù)值作為輸入結(jié)束標(biāo)記,【例8.6】計(jì)算平均分 當(dāng)輸入負(fù)值時(shí),表示輸入結(jié)束,標(biāo)記控制的循環(huán)負(fù)值作為輸入結(jié)束標(biāo)記,【例8.7】計(jì)算最高分,#include #define N 40 int ReadScore(int score); int FindMax(int score, int n);
8、 int main() int scoreN, max, n; n = ReadScore(score); printf(Total students are %dn, n); max = FindMax(score, n); printf(The highest score is %dn, max); return 0; ,max(i=0),max(i=2),max(i=3),計(jì)算最大值算法,假設(shè)其中的一個(gè)學(xué)生成績(jī)?yōu)樽罡?maxScore = score0; 對(duì)所有學(xué)生成績(jī)進(jìn)行比較,即 for (i=1; i maxScore 則修改maxScore值為scorei 打印最高分maxScor
9、e,【例8.7】計(jì)算最高分,【例8.7】計(jì)算最高分,8.4排序和查找,排序(Sorting)算法 交換法排序 選擇法排序,交換法排序,交換法排序,【例8.8】交換法從高到低排序,交換法排序 for (i=0; i scorei) 交換成績(jī)scorej和scorei ,如何實(shí)現(xiàn)兩數(shù)交換?,temp = scorej; scorej = scorei; scorei = temp;,70,50,70,【例8.8】交換法從高到低排序,void DataSort(int score, int n) /*交換法排序*/ int i, j, temp; for (i=0; i scorei) /*從高到低
10、*/ temp = scorej; scorej = scorei; scorei = temp; ,選擇法排序,k=1,k=2,k=0,k=1,選擇法排序,k=3,k=4,k=3,k=4,選擇法排序,選擇法排序 for (i=0; i scorek) 記錄此輪比較中最高分的元素下標(biāo) k = j; 若k中記錄的最大數(shù)不在位置i,則 交換成績(jī)scorek和scorei, 交換學(xué)號(hào)numk和numi; ,void DataSort(int score, long num, int n) /*選擇法*/ int i, j, k, temp1; long temp2; for (i=0; i scor
11、ek) k = j; /*記錄最大數(shù)下標(biāo)位置*/ if (k != i) /*若最大數(shù)不在下標(biāo)位置i*/ temp1 = scorek; scorek = scorei; scorei = temp1; temp2 = numk; numk = numi; numi = temp2; ,【例8.8】成績(jī)從高到低順序,8.4排序和查找,查找(Searching)算法 順序查找 折半查找,【例8.10】順序查找學(xué)號(hào),int LinSearch(long num, long x, int n) int i; for (i=0; in; i+) if (numi = x) return (i); re
12、turn (-1); ,哈,找到了!,【例8.11】折半查找學(xué)號(hào),哈,找到了!,10122 10124 10126 10128 10130,【例8.11】折半查找學(xué)號(hào),唉,沒(méi)找到!,10122 10124 10126 10128 10130,int BinSearch(long num, long x, int n) int low, high, mid; low = 0; high = n - 1; while (low nummid) low = mid + 1; else if (x nummid) high = mid - 1; else return (mid); return(-1
13、); ,若未按學(xué)號(hào)排序, 則如何修改程序?,void DataSort(int score, long num, int n) /*選擇法*/ int i, j, k, temp1; long temp2; for (i=0; in-1; i+) k = i; for (j=i+1; jn; j+) if (numj numk) k = j; /*記錄最大數(shù)下標(biāo)位置*/ if (k != i) /*若最大數(shù)不在下標(biāo)位置i*/ temp1 = scorek; scorek = scorei; scorei = temp1; temp2 = numk; numk = numi; numi = te
14、mp2; ,8.5向函數(shù)傳遞二維數(shù)組,實(shí)際傳送的是數(shù)組第一個(gè)元素的地址,short a23;,8.5向函數(shù)傳遞二維數(shù)組,在聲明二維數(shù)組形參時(shí),不能省略數(shù)組第二維的長(zhǎng)度(列數(shù)),為什么? 想想數(shù)組在內(nèi)存中是如何分布的? 元素aij在數(shù)組a中的位置是: i * N + j 元素地址: 首地址 + 偏移量,實(shí)際傳送的是數(shù)組第一個(gè)元素的地址,short aMN;,偏移1*3+2,例8.12 計(jì)算每門課程的總分和平均分,void AverforCourse(int scoreCOURSE_N, int sum, float aver, int n) int i, j; for (j=0; jCOURSE_N; j+) sumj = 0; for (i=0; in; i+) sumj = sumj + scoreij; averj = (float) sumj / n; ,可省略數(shù)組第一維的長(zhǎng)度 不能省略第二維的長(zhǎng)度,例8.12 計(jì)算每門學(xué)生的總分和平均分,void AverforStud(int scoreCOURSE_N, int
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025 小學(xué)六年級(jí)數(shù)學(xué)上冊(cè)比的風(fēng)化物理比例課件
- 2018營(yíng)改增培訓(xùn)課件
- 神經(jīng)內(nèi)科體格檢查65499
- 高中歷史第5單元烽火連綿的局部戰(zhàn)爭(zhēng)第7課海灣戰(zhàn)爭(zhēng)
- 鄭州酒店培訓(xùn)課件
- 2026年口腔醫(yī)療管理公司營(yíng)業(yè)執(zhí)照年度報(bào)告公示管理制度
- 2026年口碑服務(wù)公司質(zhì)量投訴處理管理制度
- 邵陽(yáng)燃?xì)獍踩R(shí)培訓(xùn)課件
- 課件插入邊框
- 春風(fēng)安全駕駛培訓(xùn)中心課件
- 南方航空安全員培訓(xùn)
- 2025-2026學(xué)年嶺南美版(新教材)初中美術(shù)七年級(jí)上冊(cè)期末綜合測(cè)試卷及答案
- DB11∕T 2398-2025 水利工程巡視檢查作業(yè)規(guī)范
- 2025秋國(guó)家開(kāi)放大學(xué)《政府經(jīng)濟(jì)學(xué)》期末機(jī)考精準(zhǔn)復(fù)習(xí)題庫(kù)
- PCB設(shè)計(jì)規(guī)范-MD元器件封裝庫(kù)尺寸要求
- 番茄的營(yíng)養(yǎng)及施肥
- 脫硫塔制作安裝施工技術(shù)方案
- 心身疾病護(hù)理科普要點(diǎn)
- 2025-2026學(xué)年遼寧省遼南協(xié)作校高二數(shù)學(xué)第一學(xué)期期末檢測(cè)試題含解析
- 校外輔導(dǎo)員培訓(xùn)
- 2025年大學(xué)《應(yīng)急管理-應(yīng)急管理法律法規(guī)》考試參考題庫(kù)及答案解析
評(píng)論
0/150
提交評(píng)論