版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第7章數(shù)組7.1數(shù)組概述7.2一維數(shù)組7.3二維數(shù)組7.4多維數(shù)組7.5案例學(xué)習(xí)
7.1數(shù)組概述
7.1.1數(shù)組的引入及優(yōu)點(diǎn)
【例7-1】從鍵盤上隨機(jī)輸入3個(gè)整數(shù),求3個(gè)數(shù)的和。
方法一:可以定義3個(gè)整型變量,每個(gè)變量存儲(chǔ)一個(gè)整數(shù),再定義第4個(gè)整型或?qū)嵭妥兞縼泶鎯?chǔ)3個(gè)整數(shù)的和,最后輸出第4個(gè)變量的值即可。程序源碼如下:方法二:用循環(huán)語句來解決以上問題。
通過分析我們發(fā)現(xiàn),由于在上述求和的過程中,每個(gè)數(shù)只使用一次,也就是說,在求和的過程中,雖然數(shù)較多,但每個(gè)數(shù)在計(jì)算過程中只使用一次。因此我們可以考慮只定義一個(gè)變量,用后面輸入的值來覆蓋前面變量的值,這樣可以避免定義過多的變量。程序源碼如下:圖7.1求10個(gè)數(shù)的和的運(yùn)行結(jié)果
【例7-2】從鍵盤上輸入3個(gè)數(shù),由小到大進(jìn)行排序輸出。
分析:對(duì)于從鍵盤上輸入3個(gè)數(shù)并由小到大排序的問題,在第5章的例5-11已經(jīng)做過介紹,其解決辦法也是定義3個(gè)變量,同時(shí)定義1個(gè)臨時(shí)變量用來實(shí)現(xiàn)值的交換。圖7.2例7-2運(yùn)行效果圖7.3例7-2運(yùn)行結(jié)果7.1.2C語言中數(shù)組的分類
C語言中數(shù)組的分類較為簡單,一般根據(jù)數(shù)組元素的數(shù)據(jù)類型和數(shù)組的維數(shù)來分類。
(1)根據(jù)數(shù)組元素的數(shù)據(jù)類型分類。
(2)根據(jù)數(shù)組的維數(shù)分類。
7.2一維數(shù)組
7.2.1一維數(shù)組的定義
在C語言中,如同定義簡單變量,數(shù)組也必須先進(jìn)行定義,再進(jìn)行使用。
一維數(shù)組具有一個(gè)下標(biāo),其一般定義形式如下:
類型說明符數(shù)組名[常量表達(dá)式];例如,下面定義了3個(gè)不同類型的數(shù)組。
(1)?inta[10];定義了一個(gè)整型數(shù)組a。數(shù)組長度為10,即含有10個(gè)數(shù)組元素;數(shù)組中每個(gè)數(shù)組元素的數(shù)據(jù)類型為基本整型;整個(gè)數(shù)組一共設(shè)定為20個(gè)字節(jié)的連續(xù)存儲(chǔ)空間。
(2)?floatb[20];定義了一個(gè)單精度數(shù)組b。數(shù)組長度為20,即含有20個(gè)數(shù)組元素;數(shù)組中每個(gè)數(shù)組元素的數(shù)據(jù)類型為單精度浮點(diǎn)型;整個(gè)數(shù)組一共設(shè)定為80個(gè)字節(jié)的連續(xù)存儲(chǔ)空間。
(3)?charc[20];定義了一個(gè)字符數(shù)組c。數(shù)組長度為20,即含有20個(gè)數(shù)組元素;數(shù)組中每個(gè)數(shù)組元素的數(shù)據(jù)類型為字符型;整個(gè)數(shù)組一共設(shè)定為20個(gè)字節(jié)的連續(xù)存儲(chǔ)空間。
【例7-3】以下數(shù)組定義語句中,錯(cuò)誤的是()。7.2.2一維數(shù)組的初始化
1.一次性初始化
一次性初始化指在定義一維數(shù)組時(shí),在后面大括號(hào)中給出每個(gè)數(shù)組元素的值,也就是在定義數(shù)組時(shí)按順序?qū)?shù)組元素賦以初值。例如:
inta[5]={1,2,3,4,5};
floatb[6]={4.2,2.3,1.0,6.3,7.4,9.1};
charc[3]={'a','b','c'};
2.逐元素初始化
逐元素初始化指在定義完一維數(shù)組后,對(duì)其數(shù)組元素分別進(jìn)行初始化。例如:
inta[5];
a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;
charc[3];
c[0]=‘a(chǎn)’;
c[1]=‘b’;
c[2]='c';
3.用循環(huán)語句初始化
用循環(huán)語句初始化指用定義的循環(huán)變量來控制數(shù)組的下標(biāo),對(duì)數(shù)組元素進(jìn)行初始化的過程。例如:
inti;
for(i=0;i<10;i++)
a[i]=i+1;
或者
for(i=0;i<10;i++)
scanf("%d",&a[i]);
【例7-4】以下程序的輸出結(jié)果是(?)。7.2.3一維數(shù)組的引用
從數(shù)組的定義可以看出,對(duì)于一維數(shù)組,由于各元素在內(nèi)存中的存儲(chǔ)空間是連續(xù)的且字節(jié)數(shù)相同,因此各元素之間是等間距的,這樣就可以對(duì)所有連續(xù)的數(shù)組元素用一個(gè)連續(xù)的整數(shù)序列進(jìn)行編號(hào),以識(shí)別各元素在整個(gè)數(shù)組中的位置,這一整數(shù)序列稱為下標(biāo)。數(shù)組名和下標(biāo)構(gòu)成了數(shù)組元素。
【例7-5】一維數(shù)組元素的賦值和輸出。
【例7-6】一維數(shù)組元素的賦值和輸出。
【例7-7】讀取10個(gè)整數(shù)存入數(shù)組,找出其中的最大值以及最大值所對(duì)應(yīng)的下標(biāo)。
分析:根據(jù)題意,可以定義一個(gè)包含10個(gè)整數(shù)的數(shù)組a和一個(gè)用于存放最大值的變量max。用scanf()函數(shù)從鍵盤上輸入數(shù)組元素的值,可以認(rèn)為第一個(gè)元素為最大值,然后依次比較后面的元素,如果比max的值大,則用此值替換max的值。
(1)尋找最大值。
(2)最大值所對(duì)應(yīng)的下標(biāo)。
分析:另定義一個(gè)變量m用來存儲(chǔ)最大值最對(duì)應(yīng)的下標(biāo),m初始值為0,每當(dāng)最大值改變,則修改下標(biāo)的值。程序可修改為:
【例7-8】編寫程序,用冒泡法對(duì)10個(gè)數(shù)按照由小到大的順序排序。
由于在排序過程中總是小數(shù)往前放,大數(shù)往后放,相當(dāng)于氣泡往上升,所以稱作冒泡排序。程序源碼如下:
【例7-9】用數(shù)組求出Fibonacci數(shù)列前20項(xiàng)之和。
分析:問題的數(shù)學(xué)模型請(qǐng)參閱例6-15。在這里定義了一個(gè)一維整型數(shù)組來實(shí)現(xiàn)對(duì)Fibonacci數(shù)列的存儲(chǔ)。
7.3二維數(shù)組
7.3.1二維數(shù)組的定義
前面介紹的數(shù)組只有一個(gè)下標(biāo),如a[4]、b[5]、c[6],我們稱這樣的數(shù)組為一維數(shù)組,其數(shù)組元素也稱為單下標(biāo)變量。在實(shí)際問題中有很多量是二維的,因此C語言允許構(gòu)造二維數(shù)組。二維數(shù)組元素有兩個(gè)下標(biāo),以標(biāo)識(shí)它在數(shù)組中的位置,如可以定義a[3][4]這樣的數(shù)組。圖7.4二維數(shù)組示意圖7.3.2二維數(shù)組的初始化
1.按行賦初值
按行賦值指將二維數(shù)組的每一行元素的值用一對(duì)花括號(hào)括起來。
inta[2][3]={{1,2,3},{4,5,6}};
將1,2,3三個(gè)元素用一對(duì)花括號(hào)括起來表示第1行元素,將4,5,6三個(gè)元素用一對(duì)花括號(hào)括起來表示第2行元素。初始化后的結(jié)果如下:
2.按數(shù)組元素在內(nèi)存中排列的順序?qū)Ω髟刭x初值
將各初始值全部連續(xù)地寫在一個(gè)花括號(hào)內(nèi),在程序編譯時(shí)會(huì)按數(shù)組在內(nèi)存中的排列順序?qū)⒏鞒跏贾捣謩e賦給數(shù)組各元素,這種情況非常類似于一維數(shù)組中的一次性賦值。
inta[2][3]={1,2,3,4,5,6};
這條語句初始化后結(jié)果和前面按行賦初值的例子完全相同。
3.給部分元素賦初值
給部分元素賦初值也就是對(duì)二維數(shù)組中的一部分元素賦值,這時(shí)未賦值元素全部置0。
inta[2][3]={{1},{4}};
初始化后結(jié)果如下:
4.?dāng)?shù)組初始化時(shí),行長度可省略,但列長度不能省略
inta[][3]={1,2,3,4,5,6,7};
結(jié)果如下:結(jié)果如下:
但不能寫成以下形式:
inta[2][]={1,2,3,4,5,6,7};
intb[2][]={{1},{4,5}};
【例7-10】以下數(shù)組定義中不正確的是(?)。
A.inta[2][3]
B.intb[][3]={0,1,2,3}
C.intc[100][100]={0}
D.intd[3][]={{1,2}{1,2,3}{1,2,3,4}}
解析:二維數(shù)組初始化時(shí),行長度可以省略,但列長度不能省略,故答案為D。7.3.3二維數(shù)組的引用
二維數(shù)組的元素也稱為雙下標(biāo)變量,其引用與一維數(shù)組的引用原理完全相同。二維數(shù)組引用的一般表示形式為:
數(shù)組名[下標(biāo)][下標(biāo)];
其中下標(biāo)應(yīng)為整型常量或整型表達(dá)式。例如,a[3][4]表示a數(shù)組第4行第5列的元素。
【例7-11】定義一個(gè)二維數(shù)組,初始化并求其元素的最大值及其位置。
(1)求二維數(shù)組的最大值。
分析:和求一維數(shù)組的最大值的思路一樣,定義max變量用來存放最大值,然后依次掃描二維數(shù)組元素,如果后續(xù)元素比當(dāng)前max的值大,則修改max的值。最后輸出max變量的值。程序源碼如下:
(2)求最大值的位置。
分析:定義兩個(gè)變量m,n存儲(chǔ)最大值元素的行下標(biāo)和列下標(biāo),當(dāng)max的值有變化時(shí),修改m和n的值。最后輸出m和n的值。程序源碼如下:
【例7-12】一個(gè)學(xué)習(xí)小組有5個(gè)人,每個(gè)人有三門課的考試成績。求全組各分科的平均成績和各科總平均成績。分析:可設(shè)一個(gè)二維數(shù)組a[3][5]存放五個(gè)人三門課的成績。再設(shè)一個(gè)一維數(shù)組v[3]存放所求得各分科平均成績,設(shè)變量average為全組各科總平均成績。程序源碼如下:圖7.5例7-12的運(yùn)行結(jié)果
7.4多維數(shù)組
7.4.1多維數(shù)組的定義
多維數(shù)組的定義類似于二維數(shù)組的定義,其一般格式可表示為:
類型標(biāo)識(shí)符多維數(shù)組名[下標(biāo)1][下標(biāo)2]?…?[下標(biāo)n];
類型標(biāo)識(shí)符、數(shù)組名及下標(biāo)和一維、二維數(shù)組完全相同,這里不再重復(fù)。
注意:多維數(shù)組的存儲(chǔ)順序?yàn)樽钭筮叺南聵?biāo)變化最慢,越往右變化越快,最右邊的下標(biāo)變化最快。這里我們以三維數(shù)組為例來說明多維數(shù)組。
intsal[20][25][50];
上面的定義表明數(shù)組sal具有20個(gè)25行和50列的表,這樣數(shù)組的第1個(gè)元素所在的位置為sal[0][0][0],第2個(gè)元素為sal[0][0][1],第3個(gè)為sal[0][0][2],依此類推。
例如:數(shù)組元素sal[10][20][30]所代表的意思為第11張表的第21行第31列。7.4.2多維數(shù)組的初始化
①例如,有以下三維數(shù)組:
inta[3][2][3];
對(duì)其可初始化:
inta[3][2][3]={{{1,2,3},{4,5,6}},{{7,8,9},{10,11,12}},
{{13,14,15},{16,17,18}}};
由于第一維的大小為3,所以可以認(rèn)為a數(shù)組由3個(gè)二維數(shù)組(此處每個(gè)二維數(shù)組為一頁)組成,每個(gè)二維數(shù)組為2行3列,如圖7.6如示。②由于多維數(shù)組和二維數(shù)組一樣,采用線性分配空間,也可對(duì)其進(jìn)行如下初始化:
inta[3][2][3]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
16,17,18};
即將三維數(shù)組中全部元素連續(xù)寫在一個(gè)花括號(hào)內(nèi),按元素在內(nèi)存中的排列順序依次給各數(shù)組元素賦初值。圖7.6多維數(shù)組初始化示意圖③也可以省略第一維的大小,上面的定義也可改寫為:
inta[][2][3]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18};
系統(tǒng)會(huì)根據(jù)初值個(gè)數(shù),算出第一維的大小為2。例如以下三維數(shù)組:
inta[][3][2]={{{1,2},{3},{5}},{{0,7},{8},{10}}};
顯然這是一個(gè)大小為2?×?3?×?2的三維數(shù)組,其各元素值如圖7.7所示。圖7.7多維數(shù)組初始化示意圖7.4.3多維數(shù)組的引用
多維數(shù)組是對(duì)一維數(shù)組與二維數(shù)組的擴(kuò)展,其引用基本原理與一、二維數(shù)組完全相同。多維數(shù)組引用格式可表示為:
多維數(shù)組名[下標(biāo)1][下標(biāo)2][下標(biāo)3]…[下標(biāo)n]
其中下標(biāo)的取值范圍類似于二維數(shù)組,并且多維數(shù)組的元素同樣可以賦值和出現(xiàn)在表達(dá)式中。例如:
x[i][j][k]=45+2*k;
7.5案例學(xué)習(xí)
【例7-13】在二維數(shù)組a中選出各行最大的元素組成一個(gè)一維數(shù)組b。
本題的編程思路是,在數(shù)組a的每一行中尋找最大的元素,找到之后把該值賦予數(shù)組b中相應(yīng)的元素即可。圖7.8例7-13運(yùn)行結(jié)果
【例7-14】有一個(gè)已經(jīng)按由小到
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年智能防盜門安裝與系統(tǒng)集成服務(wù)協(xié)議3篇
- 2024技術(shù)支持協(xié)議書范本
- 2024版聘用合同勞動(dòng)合同
- 2025年度苯板銷售與產(chǎn)業(yè)鏈整合合同2篇
- 二零二五年度環(huán)保型廣告車租賃服務(wù)協(xié)議6篇
- 2024延期支付科研經(jīng)費(fèi)合同協(xié)議書3篇
- 2024昆明市二手房買賣合同及其空氣質(zhì)量保證協(xié)議
- 二零二五年金融衍生品交易合同公證協(xié)議3篇
- 二零二五年度賓館客房租賃合同解除協(xié)議2篇
- 武漢信息傳播職業(yè)技術(shù)學(xué)院《空間數(shù)據(jù)庫》2023-2024學(xué)年第一學(xué)期期末試卷
- 常用靜脈藥物溶媒的選擇
- 當(dāng)代西方文學(xué)理論知到智慧樹章節(jié)測試課后答案2024年秋武漢科技大學(xué)
- 2024年預(yù)制混凝土制品購銷協(xié)議3篇
- 2024-2030年中國高端私人會(huì)所市場競爭格局及投資經(jīng)營管理分析報(bào)告
- GA/T 1003-2024銀行自助服務(wù)亭技術(shù)規(guī)范
- 《消防設(shè)備操作使用》培訓(xùn)
- 新交際英語(2024)一年級(jí)上冊Unit 1~6全冊教案
- 2024年度跨境電商平臺(tái)運(yùn)營與孵化合同
- 2024年電動(dòng)汽車充電消費(fèi)者研究報(bào)告-2024-11-新能源
- 湖北省黃岡高級(jí)中學(xué)2025屆物理高一第一學(xué)期期末考試試題含解析
- 上海市徐匯中學(xué)2025屆物理高一第一學(xué)期期末學(xué)業(yè)水平測試試題含解析
評(píng)論
0/150
提交評(píng)論