二維數(shù)組的定義和引用_第1頁
二維數(shù)組的定義和引用_第2頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

4/4二維數(shù)組的定義和引用二維數(shù)組的定義和引用

1.1二維數(shù)組的定義

前面介紹的數(shù)組只有一個下標(biāo),稱為一維數(shù)組,其數(shù)組元素也稱為單下標(biāo)變量。在實(shí)際問題中有很多量是二維的或多維的,因此C語言允許構(gòu)造多維數(shù)組。多維數(shù)組元素有多個下標(biāo),以標(biāo)識它在數(shù)組中的位置,所以也稱為多下標(biāo)變量。本節(jié)只介紹二維數(shù)組,多維數(shù)組可由二維數(shù)組類推而得到。

二維數(shù)組定義的一般形式是:

類型說明符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]其中常量表達(dá)式1表示第一維下標(biāo)的長度,常量表達(dá)式2表示第二維下標(biāo)的長度。

例如:

inta[3][4];

說明了一個三行四列的數(shù)組,數(shù)組名為a,其下標(biāo)變量的類型為整型。該數(shù)組的下標(biāo)變量共有3×4個,即:

a[0][0],a[0][1],a[0][2],a[0][3]

a[1][0],a[1][1],a[1][2],a[1][3]

a[2][0],a[2][1],a[2][2],a[2][3]

二維數(shù)組在概念上是二維的,即是說其下標(biāo)在兩個方向上變化,下標(biāo)變量在數(shù)組中的位置也處于一個平面之中,而不是象一維數(shù)組只是一個向量。但是,實(shí)際的硬件存儲器卻是連續(xù)編址的,也就是說存儲器單元是按一維線性排列的。如何在一維存儲器中存放二維數(shù)組,可有兩種方式:一種是按行排列,即放完一行之后順次放入第二行。另一種是按列排列,即放完一列之后再順次放入第二列。在C語言中,二維數(shù)組是按行排列的。

即:

先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四個元素也是依次存放。由于數(shù)組a說明為int類型,該類型占四個字節(jié)的內(nèi)存空間,所以每個元素均占有四個字節(jié))。

1.2二維數(shù)組元素的引用

二維數(shù)組的元素也稱為雙下標(biāo)變量,其表示的形式為:數(shù)組名[下標(biāo)][下標(biāo)]

其中下標(biāo)應(yīng)為整型常量或整型表達(dá)式。

例如:

a[3][4]

表示a數(shù)組三行四列的元素。

下標(biāo)變量和數(shù)組說明在形式中有些相似,但這兩者具有完全不同的含義。數(shù)組說明的方括號中給出的是某一維的長度,即可取下標(biāo)的最大值;而數(shù)組元素中的下標(biāo)是該元素在數(shù)組中的位置標(biāo)識。前者只能是常量,后者可以是常量,變量或表達(dá)式?!纠?】一個學(xué)習(xí)小組有5個人,每個人有三門課的考試成績。

再設(shè)一個一維數(shù)組v[3]存放所求得各分科平均成績,設(shè)變量average為全組各科總平均成績。編程如下:

voidmain()

{

inti,j,s=0,average,v[3],a[5][3];

printf("inputscore\n");

for(i=0;i0)printf("st1>st2\n");

if(kst2”。

6.6.測字符串長度函數(shù)strlen

格式:strlen(字符數(shù)組名)

功能:測字符串的實(shí)際長度(不含字符串結(jié)束標(biāo)志…\0?)并作為函數(shù)返回值。

【例12】

#include"string.h"

voidmain()

{intk;

staticcharst[]="Clanguage";

k=strlen(st);

printf("Thelenthofthestringis%d\n",k);

}

小結(jié):

1.數(shù)組是程序設(shè)計(jì)中最常用的數(shù)據(jù)結(jié)構(gòu)。數(shù)組可分為數(shù)值數(shù)組(整數(shù)組,實(shí)數(shù)組),字符數(shù)組以及后面將要介紹的指針數(shù)組,結(jié)構(gòu)數(shù)組等。

2.數(shù)組可以是一維的,二維的或多維的。

3.數(shù)組類型說明由類型說明符、數(shù)組名、數(shù)組長度(數(shù)組元素個數(shù))三部分組成。數(shù)組元素又稱為下標(biāo)變量。數(shù)組的類型是指下標(biāo)變量取值的類型。

4.對數(shù)組的賦值可以用數(shù)組初始化賦值,輸入函數(shù)動態(tài)賦值和賦值語句賦值三種方法實(shí)現(xiàn)。對數(shù)值數(shù)組不能用賦值語句整體賦值、輸入或輸出,而必須用循環(huán)語句逐個對數(shù)組元素進(jìn)行操作。

2.7程序舉例

【例13】把一個整數(shù)按大小順序插入已排好序的數(shù)組中。

為了把一個數(shù)按大小插入已排好序的數(shù)組中,應(yīng)首先確定排

序是從大到小還是從小到大進(jìn)行的。設(shè)排序是從大到小進(jìn)序的,則可把欲插入的數(shù)與數(shù)組中各數(shù)逐個比較,當(dāng)找到第一個比插入數(shù)小的元素i時,該元素之前即為插入位置。然后從數(shù)組最后一個元素開始到該元素為止,逐個后移一個單元。最后把插入數(shù)賦予元素i即可。如果被插入數(shù)比所有的元素值都小則插入最后位置。

voidmain()

{

int

i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18};

for(i=0;ia[i])

{for(s=9;s>=i;s--)a[s+1]=a[s];

break;}

a[i]=n;

for(i=0;ia[i]時,則由一個內(nèi)循環(huán)把i以下各元素值順次后移一個單元。后移應(yīng)從后向前進(jìn)行(從a[9]開始到a[i]為止)。后移結(jié)束跳出外循環(huán)。插入點(diǎn)為i,把n賦予a[i]即可。如所有的元素均大于被插入數(shù),則并未進(jìn)行過后移工作。此時i=10,結(jié)果是把n賦于a[10]。最后一個循環(huán)輸出插入數(shù)后的數(shù)組各元素值。

程序運(yùn)行時,輸入數(shù)47。從結(jié)果中可以看出47已插入到54和28之間。

【例14】在二維數(shù)組a中選出各行最大的元素組成一個一維數(shù)組b。

a=(3168765

43211108

10251237)

b=(8710837)

本題的編程思路是,在數(shù)組A的每一行中尋找最大的元素,找到之后把該值賦予數(shù)組B相應(yīng)的元素即可。程序如下:

voidmain()

{

inta[][4]={3,16,87,65,4,32,11,108,10,25,12,27};

intb[3],i,j,l;

for(i=0;il)l=a[i][j];

b[i]=l;}

printf("\narraya:\n");

for(i=0;i<=2;i++)

{for(j=0;j<=3;j++)

printf("%5d",a[i][j]);

printf("\n");}

printf("\narrayb:\n");

for(i=0;i<=2;i++)

printf("%5d",b[i]);

printf("\n");

}

程序中第一個for語句中又嵌套了一個for語句組成了雙重循環(huán)。外循環(huán)控制逐行處理,并把每行的第0列元素賦予l。進(jìn)入內(nèi)循環(huán)后,把l與后面各列元素比較,并把比l大者賦予l。內(nèi)循環(huán)結(jié)束時l即為該行最大的元素,然后把l值賦予b[i]。等外循環(huán)全部完成時,數(shù)組b中已裝入了a各行中的最大值。后面的兩個for語句分別輸出數(shù)組a和數(shù)組b。

【例15】輸入五個國家的名稱按字母順序排列輸出。

本題編程思路如下:五個國家名應(yīng)由一個二維字符數(shù)組來處理。然而C語言規(guī)定可以把一個二維數(shù)組當(dāng)成多個一維數(shù)組處理。因此本題又可以按五個一維數(shù)組處理,而每一個一維數(shù)組就是一個國家名字符串。用字符串比較函數(shù)比較各一維數(shù)組的大小,并排序,輸出結(jié)果即可。

編程如下:

voidmain()

{

charst[20],cs[5][20];

inti,j,p;

printf("inputcountry'sname:\n");

for(i=0;i<5;i++)

gets(cs[i]);

printf("\n");

for(i=0;i<5;i++)

{p=i;strcpy(st,cs[i]);

for(j=i+1;j<5;j++)

if(strcmp(cs[j],st)<0){p=j;strcpy(st,cs[j]);}

if(p!=i)

{

strcpy(st,cs[i]);

strcpy(cs[i],cs[p]);

strcpy(cs[p],st);

}

puts(cs[i]);}printf("\n");

}

本程序的第一個for語句中,用gets函數(shù)輸入五個國家名

字符串。上面說過C語言允許把一個二維數(shù)組按多個一維數(shù)組處理,本程序說明cs[5][20]為二維字符數(shù)組,可分為五個一維數(shù)組cs[0],cs[1],cs[2],cs[3],cs[4]。因此在gets函數(shù)中使用cs[i]是合法的。在第二個for語句中又嵌套了一個for語句組成雙重循環(huán)。這個雙重循環(huán)完成按字母順序

溫馨提示

  • 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

提交評論