陣列
文章推薦指數: 80 %
一維陣列的定義方式為: ... C語言對陣列的初始化給予值還有以下幾點規定: ... 前面介紹的陣列只有一個下標,稱為一維陣列,其陣列元素也稱為單下標變數。
高一課程>C語言>陣列
陣列
在程式設計中,為了處理方便,把具有相同類型的若干變數按有序的形式組織起來。
這些按序排列的同類資料元素的集合稱為陣列。
在C語言中,陣列屬於構造資料類型。
一個陣列可以分解為多個陣列元素,這些陣列元素可以是基本資料類型或是構造類型。
因此按陣列元素的類型不同,陣列又可分為數值陣列、字元陣列、指標陣列、結構陣列等各種類別。
本章介紹數值陣列和字元陣列,其餘的在以後各章陸續介紹。
一維陣列的定義和引用
一維陣列的定義方式
在C語言中使用陣列必須先進行定義。
一維陣列的定義方式為:
類型說明符陣列名稱[常量運算式];
其中:
類型說明符是任一種基本資料類型或構造資料類型。
陣列名稱是用戶定義的陣列識別字。
方括號中的常量運算式表示資料元素的個數,也稱為陣列的長度。
例如:
int
a[10]; 說明整型陣列a,有10個元素。
float
b[10],c[20]; 說明實型陣列b,有10個元素,實型陣列c,有20個元素。
char
ch[20]; 說明字元陣列ch,有20個元素。
對於陣列類型說明應注意以下幾點:
1)陣列的類型實際上是指數組元素的取值類型。
對於同一個陣列,其所有元素的資料類型都是相同的。
2)陣列名稱的書寫規則應符合識別字的書寫規定。
3)陣列名稱不能與其他變數名相同。
例如:
main()
{
int
a;
float
a[10];
……
}
是錯誤的。
4)方括號中常量運算式表示陣列元素的個數,如a[5]表示陣列a有5個元素。
但是其下標從0開始計算。
因此5個元素分別為a[0],a[1],a[2],a[3],a[4]。
5)不能在方括號中用變數來表示元素的個數,但是可以是符號常數或常量運算式。
例如:
#defineFD5
main()
{
int
a[3+2],b[7+FD];
……
}
是合法的。
但是下述說明方式是錯誤的。
main()
{
int
n=5;
int
a[n];
……
}
6) 允許在同一個類型說明中,說明多個陣列和多個變數。
例如:
inta,b,c,d,k1[10],k2[20];
一維陣列元素的引用
陣列元素是組成陣列的基本單元。
陣列元素也是一種變數,其標識方法為陣列名稱後跟一個下標。
下標表示了元素在陣列中的順序號。
陣列元素的一般形式為:
陣列名稱[下標];
其中下標只能為整型常量或整型運算式。
如為小數時,C編譯將自動取整。
例如:
a[5]
a[i+j]
a[i++]
都是合法的陣列元素。
陣列元素通常也稱為下標變數。
必須先定義陣列,才能使用下標變數。
在C語言中只能逐個地使用下標變數,而不能一次引用整個陣列。
例如,輸出有10個元素的陣列必須使用迴圈語句逐個輸出各下標變數:
for(i=0;i<10;i++)
printf("%d",a[i]);
而不能用一個語句輸出整個陣列。
下面的寫法是錯誤的:
printf("%d",a);
【例1】
#include
在第一個for語句中,運算式3省略了。
在下標變數中使用了運算式i++,用以修改迴圈變數。
當然第二個for語句也可以這樣作,C語言允許用運算式表示下標。
程式中最後一個printf語句輸出了兩次a[5]的值,可以看出當下標不為整數時將自動取整。
一維陣列的初始化
給陣列給予值的方法除了用給予值語句對陣列元素逐個給予值外,還可採用初始化給予值和動態給予值的方法。
陣列初始化給予值是指在陣列定義時給陣列元素給予予初值。
陣列初始化是在編譯階段進行的。
這樣將減少運行時間,提高效率。
初始化給予值的一般形式為:
類型說明符陣列名稱[常量運算式]={值,值……值};
其中在{}中的各資料值即為各元素的初值,各值之間用逗號間隔。
例如:
inta[10]={0,1,2,3,4,5,6,7,8,9};
相當於a[0]=0;a[1]=1...a[9]=9;
C語言對陣列的初始化給予值還有以下幾點規定:
1) 可以只給部分元素給予初值。
當{}中值的個數少於元素個數時,只給前面部分元素給予值。
例如:
inta[10]={0,1,2,3,4};
表示只給a[0]~a[4]5個元素給予值,而後5個元素自動給予0值。
2) 只能給元素逐個給予值,不能給陣列整體給予值。
例如給十個元素全部給予1值,只能寫為:
inta[10]={1,1,1,1,1,1,1,1,1,1};
而不能寫為:
inta[10]=1;
3) 如給全部元素給予值,則在陣列說明中,可以不給出陣列元素的個數。
例如:
inta[5]={1,2,3,4,5};
可寫為:
inta[]={1,2,3,4,5};
一維陣列程式舉例
可以在程式執行過程中,對陣列作動態給予值。
這時可用迴圈語句配合scanf函數逐個對陣列元素給予值。
【例4】
#include
然後把a[0]送入max中。
在第二個for語句中,從a[1]到a[9]逐個與max中的內容比較,若比max的值大,則把該下標變數送入max中,因此max總是在已比較過的下標變數中為最大者。
比較結束,輸出max的值。
【例5】
#include
在內迴圈中依次讀入某一門課程的各個學生的成績,並把這些成績累加起來,退出內迴圈後再把該累加成績除以5送入v[i]之中,這就是該門課程的平均成績。
外迴圈共迴圈三次,分別求出三門課各自的平均成績並存放在v陣列之中。
退出外迴圈之後,把v[0],v[1],v[2]相加除以3即得到各科總平均成績。
最後按題意輸出各個成績。
二維陣列的初始化
二維陣列初始化也是在類型說明時給各下標變數給予以初值。
二維陣列可按行分段給予值,也可按行連續給予值。
例如對陣列a[5][3]:
1) 按行分段給予值可寫為:
int
a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
2)按行連續給予值可寫為:
int
a[5][3]={80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};
這兩種給予初值的結果是完全相同的。
【例7】
#include
例如:
inta[3][3]={{1},{2},{3}};
是對每一行的第一列元素給予值,未給予值的元素取0值。
給予值後各元素的值為:
100
20
0
30
0
int
a[3][3]={{0,1},{0,0,2},{3}};
給予值後的元素值為:
010
00
2
30
0
2)如對全部元素給予初值,則第一維的長度可以不給出。
例如:
inta[3][3]={1,2,3,4,5,6,7,8,9};
可以寫為:
int
a[][3]={1,2,3,4,5,6,7,8,9};
3) 陣列是一種構造類型的資料。
二維陣列可以看作是由一維陣列的嵌套而構成的。
設一維陣列的每個元素都又是一個陣列,就組成了二維陣列。
當然,前提是各元素類型必須相同。
根據這樣的分析,一個二維陣列也可以分解為多個一維陣列。
C語言允許這種分解。
如二維陣列a[3][4],可分解為三個一維陣列,其陣列名稱分別為:
a[0]
a[1]
a[2]
對這三個一維陣列不需另作說明即可使用。
這三個一維陣列都有4個元素,例如:一維陣列a[0]的元素為a[0][0],a[0][1],a[0][2],a[0][3]。
必須強調的是,a[0],a[1],a[2]不能當作下標變數使用,它們是陣列名稱,不是一個單純的下標變數。
【例】把一個整數按大小順序插入已排好序的陣列中。
為了把一個數按大小插入已排好序的陣列中,應首先確定排序是從大到小還是從小到大進行的。
設排序是從大到小進序的,則可把欲插入的數與陣列中各數逐個比較,當找到第一個比插入數小的元素i時,該元素之前即為插入位置。
然後從陣列最後一個元素開始到該元素為止,逐個後移一個單元。
最後把插入數賦予元素i即可。
如果被插入數比所有的元素值都小則插入最後位置。
#include
然後輸入要插入的整數n。
再用一個for語句把n和陣列元素逐個比較,如果發現有n>a[i]時,則由一個內迴圈把i以下各元素值順次後移一個單元。
後移應從後向前進行(從a[9]開始到a[i]為止)。
後移結束跳出外迴圈。
插入點為i,把n賦予a[i]即可。
如所有的元素均大於被插入數,則並未進行過後移工作。
此時i=10,結果是把n賦於a[10]。
最後一個迴圈輸出插入數後的陣列各元素值。
程式運行時,輸入數47。
從結果中可以看出47已插入到54和28之間。
【例】在二維陣列a中選出各行最大的元素組成一個一維陣列b。
a=(3 1687
65
4 32
11108
10
2512 37)
b=(8710837)
本題的程式思路是,在陣列A的每一行中尋找最大的元素,找到之後把該值賦予陣列B相應的元素即可。
程式如下:
#include
外迴圈控制逐行處理,並把每行的第0列元素賦予l。
進入內迴圈後,把l與後面各列元素比較,並把比l大者賦予l。
內迴圈結束時l即為該行最大的元素,然後把l值賦予b[i]。
等外迴圈全部完成時,陣列b中已裝入了a各行中的最大值。
後面的兩個for語句分別輸出陣列a和陣列b。
字元陣列
<1>字元陣列的宣告方式如下所述:
char陣列的名稱[陣列的大小];
orchar陣列的名稱[列陣列的大小][行陣列大小];
Forexample:chararray1[10];
chararray2[5][25];
<2>宣告陣列的位置為程式之最上端.
<3>我們可以在宣告陣列時,指定字元給陣列.例如:
例一:intstring[6]={'A','B','C','D','E','\0'};
或intstring[5]="ABCDE";
例二:intstring1[2][6]={{'A','B','C','D','E','\0'},
{'F','G','H','I','J','\0'};
或intstring1[2][5]={"ABCDE","FGHIJ"};
延伸文章資訊
- 1一維陣列
資料型態可以是 int 、 float 、 char 等,以下是幾個宣告的範例: int number[10]; // 宣告10 個元素的整數陣列 double score[10]; // 宣告...
- 2二維陣列
以上的表格有2 列3 行, 所以資料總共有2*3 筆資料, 如用陣列的方式來寫則: ReDim X( 2 , 3 ) ; 2 為列, 3為行. 像這樣的陣列我們稱為二維陣列, 而如何存放二維陣列...
- 3二維(多維)陣列 - OpenHome.cc
一維陣列使用陣列名稱與一個索引值來指定存取陣列元素,二維陣列使用陣列名稱與兩個索引值來指定存取陣列元素,宣告方式與一維陣列類似: int maze[5][10]; ...
- 4一維陣列 - C/C++
一個一維陣列,他使用的位元組大小計算如下: ... 針對可能的變化,C/C++提供了一個函式sizeof(data_type)來偵測系統究竟使用幾個bytes來表示某一資料型別。
- 5陣列維度- Visual Basic
二維陣列也稱為矩形陣列。 三維. 有幾個陣列有三個維度,例如三維空間中的值。 這類陣列會使用三個索引,在此 ...