第4章數(shù)組(C語言基礎(chǔ)).ppt_第1頁
第4章數(shù)組(C語言基礎(chǔ)).ppt_第2頁
第4章數(shù)組(C語言基礎(chǔ)).ppt_第3頁
第4章數(shù)組(C語言基礎(chǔ)).ppt_第4頁
第4章數(shù)組(C語言基礎(chǔ)).ppt_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第4章 數(shù)組,4.1 數(shù)組的引人 4.2 一維數(shù)組的定義和應(yīng)用 4.3二維數(shù)組的定義和應(yīng)用 4.4字符數(shù)組和字符串 4.5本章小結(jié),1,4.1數(shù)組的引入,例4.1 現(xiàn)需要編寫一個程序,實(shí)現(xiàn)對一個班級學(xué)習(xí)C語言的學(xué)生的成績輸入,然后分別統(tǒng)計(jì)優(yōu)、良、中、及格和不及格五個等級的人數(shù)并計(jì)算高于平均成績的人數(shù),最后輸出成績清單。假如這個班級共有6名學(xué)生學(xué)習(xí)了C語言。,2,編程分析:,為了保存6名學(xué)生的C語言成績,需要定義6個float型的變量,變量定義如下: float stud1,stud2,stud3,stud4, stud5,stud6; 接著為了輸入這6個學(xué)生的成績,編程如下: scanf(“%

2、d%d%d%d%d%d”, ,3,現(xiàn)在如何來統(tǒng)計(jì)優(yōu)良中差各等級人數(shù)和計(jì)算平均成績呢?我們必須針對每一名學(xué)生,都寫一段程序來完成優(yōu)良中差各等級的判定功能,先對stud1變量判定,編程思路如下: if(stud1 = 90.0)優(yōu)秀人數(shù)+ ; else if(stud1 = 80.0) 良好人數(shù)+ ; else if(stud1 = 70.0)中等人數(shù)+ ; else if(stud1= 60.0) 及格人數(shù)+ ; else不及格人數(shù)+ ; 然后分別對stud2,stud3,stud4, stud5, stud6變量重復(fù)進(jìn)行和上面相同的判定程序,顯然程序代碼將十分冗長而且容易出錯。 特別是:當(dāng)學(xué)生

3、人數(shù)發(fā)生變化,從6增加到80或者甚至增加到1000,我們需要怎樣的耐心來寫如此多的重復(fù)代碼?!這肯定不是我們想要的編程方法,該怎么辦呢? 請數(shù)組來幫忙。,4,4.2.1 一維數(shù)組的定義,定義: 類型標(biāo)識符 數(shù)組名整型常量表達(dá)式; 所以針對例4.1編程需要,可以如下定義一個數(shù)組: float stud6; 以上定義表示:該數(shù)組名為stud,共包含了6個元素, 這6 個元素都是float型變量。如果需要處理100個學(xué)生的C語言的成績,則定義如下: float s100; 說明: 類型標(biāo)識符指明該數(shù)組中所有元素的數(shù)據(jù)類型,可以是char、int、float、double等基本的數(shù)據(jù)類型標(biāo)識符。,5,

4、4.2.1 一維數(shù)組的定義(續(xù)1),2. 數(shù)組名命名規(guī)則和變量名命名規(guī)則相同,都遵循標(biāo)識符命名規(guī)則。 3. 方括號中的數(shù)字指明了數(shù)組共含有多少個變量,也稱數(shù)組的長度,所以必須是大于或等于1的整數(shù),不能為浮點(diǎn)型的常量;其表現(xiàn)形式可以整型常量、符號常量或整型常量表達(dá)式,但不能含有變量的表達(dá)式。 例如:int m=8, xm; /* 數(shù)組的大小不能用變量的值指定 ,所以這是不合法的*/ #define NUMBER 80 float scoreNUMBER; /用符號常量 /* 數(shù)組的大小可用符合常量 ,所以這是合法的*/,6,4.2.1 一維數(shù)組的定義(續(xù)2),4.允許在同一數(shù)據(jù)類型的變量定義中,

5、定義多個變量和多個數(shù)組。 例如: int i , j , a5 , b10; 還可以按如下形式定義一維數(shù)組: float string2; int a5*2+10; 分析: 定義了一個名為string 的數(shù)組,因?yàn)樽址A?的ASCII值為50,所以string 數(shù)組共有50個元素 定義了一個名為a 的數(shù)組,共有20個元素,每個元素的類型是整型。,7,4.2.2 數(shù)組元素的名稱,當(dāng)定義好一個數(shù)組后,數(shù)組中的每個元素的名稱分別是什么呢? C語言標(biāo)準(zhǔn)規(guī)定:當(dāng)定義好一個數(shù)組后,可以通過數(shù)組名加元素下標(biāo)的方式來使用數(shù)組元素,數(shù)組中的每個元素按照在內(nèi)存中排列的順序都有相應(yīng)的編號即下標(biāo),數(shù)組中的元素編號從

6、0開始,依次為1、2、3直到“數(shù)組元素個數(shù)1”為止;下標(biāo)用中括號括起來。因而數(shù)組元素的名稱為: 數(shù)組名下標(biāo) 注意:其中下標(biāo)是一個整型表達(dá)式,可以是變量或常量表達(dá)式,這與數(shù)組定義時要求只能是常量不同,但必須保證下標(biāo)值=0。,8,4.2.2 數(shù)組元素的名稱舉例,例如: int a5; 說明: a數(shù)組中的5個整型變量的名稱分別為:a0 、a1 、 a2 、a3,a4, 這5個元素的 下標(biāo)分別為:0、1、2、3 、4 注意:a 數(shù)組沒有名為 a5 這樣的元素! 數(shù)組a 有如下圖所示的邏輯結(jié)構(gòu)。,9,4.2.3數(shù)組在內(nèi)存中的表示,一個基本類型的變量(如int、char或double類型的 變量)在計(jì)算機(jī)

7、內(nèi)存中是如何表示? 計(jì)算機(jī)內(nèi)存是計(jì)算機(jī)用于存儲程序和數(shù)據(jù)的,內(nèi)存按照各字節(jié)的排列順序依次編號(一個字節(jié)包含8位二進(jìn)制數(shù)),每一個字節(jié)的編號即為其內(nèi)存地址。如下定義一個double類型的變量: double d; 由于double類型的變量長度是64位,變量d需要在內(nèi)存占用8個字節(jié),且在內(nèi)存中這8個字節(jié)是相鄰的,所以變量d共包含8個內(nèi)存地址。我們規(guī)定:當(dāng)說到“一個變量的地址”時,是指該變量所占用的第一個字節(jié)的地址;可以用取地址運(yùn)算符 說明:該數(shù)組共有4個類型為double的變量;根據(jù)數(shù)組f的定義,計(jì)算機(jī)會分配可容納數(shù)組f所有元素的相鄰的連續(xù)內(nèi)存空間:即共48個字節(jié),并把變量f0的地址作為整個數(shù)組

8、的首地址,而數(shù)組名f中存放了數(shù)組的首地址。 所以下面兩個printf語句輸出相同的結(jié)果。 printf(“%f”, ,11,4.2.3數(shù)組在內(nèi)存中的表示(續(xù)2),該數(shù)組的內(nèi)存排列示意圖見下圖:,12,4.2.4 訪問數(shù)組元素,數(shù)組定義好后,當(dāng)需要給數(shù)組元素輸入數(shù)據(jù),則應(yīng)當(dāng)逐個訪問一個個元素。例如: void main() float stud6; /數(shù)組定義 scanf(“%f”, 上面程序也可用如下代碼來實(shí)現(xiàn):,13,4.2.4 訪問數(shù)組元素(續(xù)),void main() float stud6; /數(shù)組定義 int i; for(i=0;i6;i+) scanf(“%f”, 對比上面兩個完

9、成同樣功能的程序,可以清楚地看到: 當(dāng)把循環(huán)用于數(shù)組時可大大簡化程序的編寫。,14,4.2.5 數(shù)組的初始化,C語言標(biāo)準(zhǔn)規(guī)定,在數(shù)組定義的同時對數(shù)組元素賦值,稱之為數(shù)組初始化,其格式如下: 類型標(biāo)識符 數(shù)組名整型常量表達(dá)式 = 表達(dá)式1,表達(dá)式n; (1)定義數(shù)組時對數(shù)組的全部元素賦初值 例:int a4=1,2,3,4; 和 int a4; a0=1; a1=2; a2=3; a3=4;效果一樣 (2) 只給數(shù)組的前面一部分元素設(shè)定初值 例:int e5 = 0, 1, 2; 即:e0=0; e1=1; e2=2; e3=0; e4=0;,15,4.2 .5 一維數(shù)組初始化(續(xù)1),說明:

10、當(dāng)數(shù)組前n個元素被設(shè)定了初值,未明確設(shè)定初值的元素自動被設(shè)定為0。 當(dāng)定義數(shù)組時,如未對它的任何元素指定過初值,則它的元素的值是不確定的。 (3) 當(dāng)對一維數(shù)組的全部元素都明確設(shè)定初值時,可以不指定一維數(shù)組元素的個數(shù)。 例如: int g = 5, 6, 7, 8, 9 ; 說明:由花括號內(nèi)的初值個數(shù)確定數(shù)組的元素個數(shù),16,4.2.5 數(shù)組初始化常見錯誤分析, 數(shù)組初始化時初始值個數(shù)不能大于元素個數(shù) 例如:int a3=1,2,3,4; 系統(tǒng)報(bào)告錯誤如下:初始化的值太多。 不能直接給數(shù)組名賦值,因?yàn)閿?shù)組名是一個地址常量 例如:int b3;b=1,2,3; 系統(tǒng)報(bào)告錯誤如下:賦值運(yùn)算符的左邊

11、不能是常量,17,4.2.5 數(shù)組初始化常見錯誤分析(續(xù)), 如果要給一個數(shù)組中的全部元素初始化為0,不可以寫成:int a5=0*5; “初值列表”的方式只限于數(shù)組的初始化,不能出現(xiàn)在賦值語句中 例如:int c4; c4=1,2,3,4; /錯誤 兩個數(shù)組不能直接進(jìn)行賦值運(yùn)算,但數(shù)組元素可以 例如: int a4=5,6,7,8; int b4;b=a;/錯誤 如果希望將 a數(shù)組中的數(shù)據(jù)送給b數(shù)組,可以使用 如下代碼: for(i=0;i4;i+) bi=ai;,18,例4.2 輸入5個整數(shù),編程求出其中最大和最小的整數(shù)并輸出 編程步驟分析: 1.先定義有 5 個元素的數(shù)組iArr, 然后

12、用for循環(huán)輸入5個整數(shù) 2. 處理: (a) 給變量max和min賦初值:max=min= iArr 0 (b) 依次用iArri(下標(biāo)i依次取值為1、2、3、4) 和max,min比較: 若maxiArri,令min=iArri; 3. 輸出:max和min,19,4.2.6 數(shù)組應(yīng)用舉例,舉例分析: 1.假設(shè)數(shù)組iArr 中的5個元素分別是: 467-1214599 2.給變量max和min賦初值,使max和min 的初值同為4; 第一次用元素iArr1 的值67 分別和max、min 比較大小,因?yàn)?7max, 所以max 的值變?yōu)?7,min 的值不變; 第二次用元素iArr2 的值

13、-12 分別和max、min 比較大小,因?yàn)?12min,所以min 的值變?yōu)?12,而max 的值不變; 依次進(jìn)行第三次和第四次比較,最后得出:max 的值為145,min 的值為-12。 3.用輸出函數(shù)printf 輸出:max和min,20,數(shù)組應(yīng)用舉例1,程序代碼: #include #define SIZE 5 void main() int iArr SIZE,max, min; int i; printf(Enter 5 integers:n); for(i=0;iiArri) min=iArri; printf(Maximum value is: %dn,max); print

14、f(Minimum value is: %dn,min); ,21,數(shù)組應(yīng)用舉例1,例4.3 用選擇排序,對6 個整數(shù)按由小到大進(jìn)行排序 思路分析: 選擇排序的思想是:第一次從數(shù)組的6個元素中尋找最大數(shù)及其下標(biāo),然后將此數(shù)與其下標(biāo)為5的元素進(jìn)行交換;如果求出的最大數(shù)正好是下標(biāo)為5的元素,可以不進(jìn)行交換。第二次在下標(biāo)為0、1、2、3、4 這五個元素中尋找最大的元素及其下標(biāo),并把該次找到的最大數(shù)和其下標(biāo)為4 的元素進(jìn)行交換;類似進(jìn)行第三次、第四次和第五次查找和交換過程,最終實(shí)現(xiàn)將6 個整數(shù)按照由小到大進(jìn)行排序??梢越梃b剛才求最大數(shù)的代碼,來完成選擇排序算法。,22,數(shù)組應(yīng)用舉例2,舉例: 若有六個

15、整數(shù): 49 38 65 97 2 13 算法過程如下: 第一次,從所有6個整數(shù)中找出最大數(shù)97及其下標(biāo)值為3,將此數(shù)與其下標(biāo)為5的元素13進(jìn)行交換(排好序的元素放在小括號內(nèi));變化過程如下: 第一次排序開始前: 49 38 65 97 2 13 第一次排序結(jié)束后: 49 38 65 13 2 (97) 第二次,從剩下的5個數(shù)中找出最大數(shù)及其下標(biāo),將此數(shù)與其下標(biāo)為4的元素交換,變化過程如下: 第二次排序開始前: 49 38 65 13 2 (97) 第二次排序結(jié)束后: 49 38 2 13 (65 97),23,數(shù)組應(yīng)用舉例2,交換,交換,依次下去,直到只剩2個數(shù)時,將大數(shù)與其下標(biāo)為1的元素交

16、換,即完成排序。 最后排序結(jié)果:(2 13 38 49 65 97) 顯然,編程需要兩重循環(huán)來完成此算法,外部循環(huán)控制剩下的數(shù),內(nèi)部循環(huán)實(shí)現(xiàn)從剩下的數(shù)中找出最大數(shù)及其下標(biāo),24,數(shù)組應(yīng)用舉例2,25,數(shù)組應(yīng)用舉例2代碼,#define NUMBER 6 void main() int iArrNUMBER; int iMax; int ind_Max; int i,j,temp; for(i=0;i= 0;i-) iMax = iArri;ind_Max = i; for(j=0;ji;j+) if(iMax iArrj) iMax = iArrj;ind_Max = j; if(ind_Ma

17、x != i) /條件成立則需要交換 temp = iArri; iArri = iArrind_Max;iArrind_Max = temp; for(i = 0;iNUMBER;i+) printf(%dt,iArri); ,例4.4 用數(shù)組求Fibonacci數(shù)列前20個數(shù),#include void main() int i; int f20=1,1; for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;i20;i+) if(i%5=0) printf(n); printf(%12d,fi); ,例 用冒泡法對10個數(shù)排序,排序過程: (1)比較第一個數(shù)與第二個

18、數(shù),若為逆序a0a1,則交換;然后比較第二個數(shù)與第三個數(shù);依次類推,直至第n-1個數(shù)和第n個數(shù)比較為止第一趟冒泡排序,結(jié)果最大的數(shù)被安置在最后一個元素位置上 (2)對前n-1個數(shù)進(jìn)行第二趟冒泡排序,結(jié)果使次大的數(shù)被安置在第n-1個元素位置 (3)重復(fù)上述過程,共經(jīng)過n-1趟冒泡排序后,排序結(jié)束,有n個數(shù),要進(jìn)行(n-1)輪比較,第i輪比較(n-i)次,8 5 5 5 5,5 8 6 6 6,6 6 8 3 3,3 3 3 8 2,2 2 2 2 8,第 二 輪,9 8 8 8 8 8,8 9 5 5 5 5,5 5 9 6 6 6,6 6 6 9 3 3,3 3 3 3 9 2,2 2 2 2

19、 2 9,第 一 輪,#include void main() int a11,i,j,t; printf(Input 10 numbers:n); for(i=1;iai+1) t=ai; ai=ai+1; ai+1=t; printf(The sorted numbers:n); for(i=1;i11;i+) printf(%d ,ai); ,#include void main() int i,j,a10,temp; for(i=0;iai+1) temp=ai;ai=ai+1;ai+1=temp; for(i=0;i10;i+) printf(%dt,ai); ,數(shù)組的基本概念總結(jié),

20、在語言中,數(shù)組類型是這樣一種數(shù)據(jù)結(jié)構(gòu): 數(shù)組中每個元素的數(shù)據(jù)類型相同,每個元素對應(yīng)一個序號(稱為下標(biāo)),各元素按下標(biāo)存取 數(shù)組元素的存儲順序與其下標(biāo)對應(yīng),數(shù)組元素的下標(biāo)從0開始順序編號。 數(shù)組元素是變量,其值是可以變化的。數(shù)組元素和相同類型的獨(dú)立變量同等語法地位,只是變量名的格式不同。 使用數(shù)組元素所需的下標(biāo)個數(shù)由數(shù)組的維數(shù)決定,數(shù)組有一維數(shù)組、二維數(shù)組或多維數(shù)組之分。,31,例4.5 某氣象部門收集了該地區(qū)2006年到2010年各月的降水量數(shù)據(jù),請編寫程序,求年均降水量,以及5年來每一個月的平均降水量。 分析: 我們剛學(xué)過一維數(shù)組,一個自然的方法,可以定義五個一維數(shù)組,每個一維數(shù)組的元素個數(shù)

21、為12,用來分別存放5年中各個月份的降水量,接著,通過輸入函數(shù)輸入五年的各月降水量,最后,處理數(shù)組求出年均降水量和月均降水量。,32,4.3.1 二維數(shù)組的引入,#define MONTHS 12 #define YEARS 5 void main() float a1MONTHS,a2MONTHS,a3MONTHS, a4MONTHS,a5MONTHS; float total=0,rain; int i; /依次輸入五年的各月降水量 for (i=0;i MONTHS;i+) scanf(%f%f%f%f%f, ,分析: 隨著年份數(shù)量的增加,定義一維數(shù)組的個數(shù)也增加,所以會很繁瑣,不可取。

22、如果我們將5年共60個月的數(shù)據(jù)全部放在一個一維數(shù)組中,雖然數(shù)組個數(shù)減少了,但程序邏輯卻變得很復(fù)雜,也不可取。 聯(lián)想到數(shù)學(xué)中的矩陣,如果能夠?qū)?shù)據(jù)存放在類似矩陣的變量中,就可以很好地解決此問題。為了方便解決如例4.5等的實(shí)際問題,C語言中提供二維數(shù)組,34,例4.5程序分析,二維數(shù)組的定義格式為: 數(shù)據(jù)類型標(biāo)識符 數(shù)組名整型常量表達(dá)式1 整型常量表達(dá)式2; 說明: 1.數(shù)據(jù)類型標(biāo)識符、數(shù)組名和一維數(shù)組定義格式中的要求一樣,其中的常量表達(dá)式由一個增加到2個,但整型常量表達(dá)式的取值要求不變,仍要求是正整數(shù)的常量表達(dá)式,其表現(xiàn)形式可以是整型常量、符號常量或整型常量表達(dá)式,但不能是變量或變量表達(dá)式 例如

23、: int aa2*3;,35,4.3.2 二維數(shù)組的定義,2.一維數(shù)組中的每個元素按照在內(nèi)存中排列的順序都有自己的編號即下標(biāo)。數(shù)組中的元素編號從0開始,依次為1、2、3直到“數(shù)組元素個數(shù)1”為止。而二維數(shù)組要確定與矩陣對照,整型常量表達(dá)式1的值相當(dāng)于矩陣的行數(shù),整型常量表達(dá)式2的值相當(dāng)于矩陣的列數(shù),二維數(shù)組的元素個數(shù)= 整型常量表達(dá)式1的值*整型常量表達(dá)式2的值。 所以針對針對例4.5,可以定義如下的二維數(shù)組: float fRain512; 其中的第一維5代表年份,第二維12代表月份,fRain即為一個包含 5*12個元素的二維數(shù)組。,36,4.3.2 二維數(shù)組的定義(續(xù)),在學(xué)習(xí)二維數(shù)組

24、初始化之前,首先應(yīng)當(dāng)了解二維數(shù)組元素在內(nèi)存中的存放順序。 為了形象起見,我們把二維數(shù)組看作是一個矩陣,于是用int iMatrix34;定義的二維數(shù)組iMatrix相當(dāng)于一個3行4列的矩陣,用矩陣表示如下: 其中iMatrix的第一維相當(dāng)于矩陣的行,第二維相當(dāng)于矩陣的列,后面,為簡化起見,簡稱為iMatrix的行和列。,37,4.3.3 二維數(shù)組的初始化,在C語言中,二維數(shù)組元素是按行存放的,即在內(nèi)存中,首先存放第0行,然后依次存放第1行,第2行 ,到最后一行。 二維數(shù)組iMatrix的內(nèi)存排列參右圖,38,4.3.3 二維數(shù)組的初始化(續(xù)1),iMatrix數(shù)組,元素名,針對二維數(shù)組的特點(diǎn),

25、C語言規(guī)定了兩種不同的二維數(shù)組初始化方法。 1、分行初始化 其格式為: 數(shù)據(jù)類型標(biāo)識符 數(shù)組名常量表達(dá)式1 常量表達(dá)式2 = 第0行初始值,第1行初始值, ; 注意: 其中數(shù)據(jù)的行數(shù)不能大于常量表達(dá)式1的值,每一行數(shù)據(jù)的個數(shù)不能大于常量表達(dá)式2的值,否則出現(xiàn)編譯錯誤。 初始化的常見形式: int a23=1,2,3,4,5,6; int b32=1,2,4 ; int c2=1,2,4 ;,39,4.3.3 二維數(shù)組的初始化(續(xù)2),2、按照元素在內(nèi)存中的存放順序初始化 其格式為: 數(shù)據(jù)類型標(biāo)識符 數(shù)組名常量表達(dá)式1 常量表達(dá)式2 = 所有初始化的數(shù)據(jù); 注意: 數(shù)據(jù)的個數(shù)不能多于數(shù)組元素的個

26、數(shù),否則出現(xiàn)編譯錯誤 說明: 與分行初始化不同,按照數(shù)組元素在內(nèi)存中的存放順序,將初始化的數(shù)據(jù)依次賦給數(shù)組元素。同樣,這種初始化格式也允許部分初始化,即允許初始化數(shù)據(jù)的個數(shù)比元素個數(shù)少。,40,4.3.3 二維數(shù)組的初始化(續(xù)3),初始化的常見形式: int a123=1,2,3,4,5,6; /全部元素初始化 int a232= 1,2,4;/部分元素初始化 該數(shù)組的內(nèi)存排列和圖4.5 的b 數(shù)組一樣 int a32= 1,2, 4 /不指定數(shù)組的行數(shù) 根據(jù)初始化數(shù)據(jù)可以得知:有兩行,因而可以省略行數(shù)。該數(shù)組的內(nèi)存排列和圖4.6的 c 數(shù)組一樣。,41,4.3.3 二維數(shù)組的初始化(續(xù)4),

27、關(guān)于省略問題: 當(dāng)一維數(shù)組初始化時,若元素個數(shù)與初始化數(shù)據(jù)個數(shù)相同時,可以省略指定元素個數(shù)。 當(dāng)二維數(shù)組初始化時,由于根據(jù)初始化數(shù)據(jù)可以確切知道行數(shù),可以不指定數(shù)組的行數(shù)即省略行數(shù),但列數(shù)不可省略。 兩種初始化形式的比較: 當(dāng)數(shù)組的行和列很多時,按照元素在內(nèi)存中的存放順序初始化容易出錯,而分行初始化簡單直觀,提倡使用分行初始化方法。,42,4.3.3 二維數(shù)組的初始化(續(xù)5),43,4.3.4 二維數(shù)組的使用,當(dāng)我們定義好二維數(shù)組后,同樣,也存在著如何使用二維數(shù)組元素的問題。與一維數(shù)組類似,也是通過數(shù)組名加元素下標(biāo)的方式來使用數(shù)組元素,由于是二維數(shù)組,因而元素下標(biāo)有兩個,對應(yīng)于該元素在二維數(shù)組

28、的行號和列號,和一維數(shù)組下標(biāo)的編號一樣均從0開始到“該數(shù)組元素個數(shù)1”,所以二維數(shù)組元素的使用格式為: 數(shù)組名下標(biāo)1下標(biāo)2 和一維數(shù)組的使用格式一樣,其中兩個下標(biāo)都是一個整型表達(dá)式,可以是變量或常量表達(dá)式,這與數(shù)組定義時要求只能是常量不同,但必須保證下標(biāo)值=0。,44,4.3.5 二維數(shù)組的應(yīng)用舉例(1),例4.6 用二維數(shù)組編程解決 例4.5 的問題。 根據(jù)前面的分析,定義一個二維數(shù)組fRain,它的行代表年,列代表月 程序代碼: #include #define MONTHS 12 / 每一年的月數(shù)#define YEARS 5 / 年數(shù),45,/主函數(shù)代碼 void main(void)

29、 float fRainYEARSMONTHS; int year, month; float subtot, total; for (year = 0; year YEARS; year+) for (month = 0; month MONTHS; month+) scanf(%f , ,46,4.3.5 二維數(shù)組的應(yīng)用舉例(2),例4.7 試用二維數(shù)組實(shí)現(xiàn)兩個2行3列整數(shù)矩陣相加 分析: 根據(jù)前面的學(xué)習(xí),可以用兩個2行3列的二維數(shù)組來表示兩個2行3列的矩陣,根據(jù)矩陣相加的含義, 設(shè)兩個矩陣為 和 ,其和為 則: 其中i=1,2,j=1,2,3; 用兩個二維數(shù)組iMatrixA和iMatr

30、ixB分別表示矩陣A和B,用一個二維數(shù)組iMatrixC表示它們的和,根據(jù)相加的含義,有: iMatrixCij = iMatrixAij + iMatrixBij, i=1,2,j=1,2,3。,47,應(yīng)用舉例(2)代碼,#include #define ROWS 2 #define COLS 3 void main() int iMatrixAROWSCOLS;/* 定義矩陣A */ int iMatrixBROWSCOLS;/* 定義矩陣B */ int iMatrixCROWSCOLS;/* 定義矩陣C */ int i,j;printf(Please input matrix A:n

31、);/輸入矩陣A元素的值 for(i = 0;i ROWS;i+) for(j = 0;j COLS;j+) scanf(%d, ,【例1】逐行輸入輸出二維數(shù)組元素,#include void main() int a34, i, j; /* 假設(shè)數(shù)組 a 有3行4列 */ for(i = 0; i 3; i+) /* 二維數(shù)組的元素逐行輸入 */ for(j = 0; j 4; j+) /* 每行逐列輸入 */ printf(Enter a%d%d , i, j); scanf(%d, /* 一行元素輸出后換行 */ ,48,程序舉例補(bǔ)充,49,程序舉例補(bǔ)充,例2 將二維數(shù)組行列元素互換,存

32、到另一個數(shù)組中,void main() int a23=1,2,3,4,5,6; int b32,i,j; printf(array a:n); for(i=0;i=1;i+) for(j=0;j=2;j+) printf(%5d,aij); bji=aij; printf(n); ,50,例 3求二維數(shù)組中的最大值及其行列號,void main() int a34; int i,j,row=0,colum=0,max; for(i=0;imax) max=aij; row=i,colum=j; printf(max=%d,row=%d, colum=%dn,max,row,colum); ,

33、除了一維和二維數(shù)組,C語言還可以定義三維、四維等多維數(shù)組,其定義格式為: 數(shù)據(jù)類型標(biāo)識符 數(shù)組名常量表達(dá)式1 常量表達(dá)式2常量表達(dá)式n; 其中n=3。 例 下列語句定義了兩個多維數(shù)組 int iCube342; float fQuart2234; 第一個語句定義了一個3*4*2的三維整型數(shù)組,第二個語句定義了一個2*2*3*4的四維浮點(diǎn)型數(shù)組。 由于四維以上的數(shù)組結(jié)構(gòu)復(fù)雜,很少使用。三維數(shù)組的使用和初始化與二維類似。,51,4.3.6 多維數(shù)組,4.4 字符數(shù)組和字符串,4.4.1 字符數(shù)組的概念 當(dāng)使用數(shù)據(jù)類型char定義數(shù)組時,即定義了 字符數(shù)組。所以,前面介紹的數(shù)組的定義格式、 使用方式

34、也都適用于字符數(shù)組。 例如: char str5; 表示: 數(shù)組str有5個元素,每個元素能存放一個字符,整個數(shù)組最多可存放5個字符。 歸納字符數(shù)組的定義格式如下: char 數(shù)組名整型常量表達(dá)式;,52,4.4.2 字符數(shù)組的初始化,53,字符數(shù)組初始化時有兩種形式: 1. 類似4.2.5 中介紹的初始化方法 ,用數(shù)組定義指定的類型:字符型常量初始化數(shù)組。 (1) 定義數(shù)組時對數(shù)組的全部元素賦初值 例如: char str13= a,1,b; 相當(dāng)于:char str13; str10= a; str11= 1; str12= b; 注意:整型常量 1 和字符型常量 1 可以只給部分?jǐn)?shù)組元素

35、賦初值 例如:char str24= 97,8; 相當(dāng)于:char str24; str20= a; str21= 8; str22= 0;str23= 0 /因?yàn)閍的ASCII值是97 給全部數(shù)組元素賦初值時,可以不指定數(shù)組元素的個數(shù) 例如: char str3=i, A, B; 相當(dāng)于:char str33; str20= i; str31= A;str32= B 系統(tǒng)根據(jù)花括號中初值個數(shù)確定數(shù)組元素個數(shù)為3。這種方式可以方便編程人員修改元素個數(shù)。,4.4.2 字符數(shù)組的初始化(續(xù)1),54,2. 用字符串常量初始化字符數(shù)組。 char string15 = Good; 相當(dāng)于:char

36、string15; string10= G; string11= o; string12= o;string13= d; string14= 0 char string25 = “Good”;/花括號可以省略 char p = “Good”; 相當(dāng)于:char p5; p0= G; p1= o; p2= o;p3= d; p4= 0 數(shù)組p 的元素個數(shù)即數(shù)組長度是5 char q = G, o, o, d; 數(shù)組q 的元素個數(shù)是4 對照分析:當(dāng)用字符串常量初始化字符數(shù)組,系統(tǒng)自動會在字符串常量的最后加上一個字符串結(jié)束標(biāo)志 0,所以數(shù)組長度=4+1;而用單個字符常量初始化字符數(shù)組時,系統(tǒng)不加字符

37、 0,所以數(shù)組長度=4,但這種方式因?yàn)闆]有字符結(jié)束標(biāo)記,所以會給程序留下隱患,不可取。,4.4.2 字符數(shù)組的初始化(續(xù)2),55,關(guān)于二維字符數(shù)組的初始化 和4.3.3 介紹的相同,也有兩種初始化方法: 分行初始化 按照元素在內(nèi)存中的存放順序初始化 和一維字符數(shù)組一樣初始化時有兩種初值形式: 字符型常量初始化數(shù)組。 用字符串常量初始化字符數(shù)組。 例如: char str1210= W,o,r,k,h,a,r,d; char str2210= W,o,r,k,h,a,r,d; char str3210= “Work”,“hard”;,3、字符串結(jié)束標(biāo)志 當(dāng)使用一個字符數(shù)組時,定義的數(shù)組長度常常會大于實(shí)際存放的字符數(shù),此時沒有辦法確定實(shí)際的字符數(shù),為此,C語言中有一個約定

溫馨提示

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

評論

0/150

提交評論