《C語言程序設(shè)計(jì)》課件4第7章_第1頁
《C語言程序設(shè)計(jì)》課件4第7章_第2頁
《C語言程序設(shè)計(jì)》課件4第7章_第3頁
《C語言程序設(shè)計(jì)》課件4第7章_第4頁
《C語言程序設(shè)計(jì)》課件4第7章_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論