5.1 一維陣列
前面我們使用的都是屬於基本型別(整形、實型、字元型)的資料,c語言還提供了構造型別的資料:陣列、結構體型別、共用體型別。
(一) 一維陣列的定義
型別說明符陣列名[常量表示式]; 例如:int a[10];
說明:1、型別說明指定了陣列的每個元素都屬於某一型別
2、陣列名命名遵循識別符號的使用規則。編譯程式將為陣列在記憶體中開闢連續的儲存單元,陣列名代表了陣列的首位址。
3、常量表示式可以是常量和符號常量,不能是變數。即c不允許對陣列的大小作動態定義。
4、每個元素有乙個下標,c規定每個陣列第乙個元素的下標總為0。稱為陣列下標的下界。對於有8個元素的陣列則7位下標的上界。
(二) 一維陣列元素的引用
陣列必須先定義後使用,c規定只能逐個引用陣列元素而不能一次引用整個陣列。
陣列元素表示形式:陣列名[下標](注:下標可以是整型常量或整型表示式
例如:a[2]=a[0]+a[1*2]
ex:陣列元素的引用
main()
(三)一維陣列的初始化
(1)在定義陣列時對陣列元素賦以初值。例如:int a[5]=;
(2)只給一部分元素賦值。例如:int a[5]=;後3個元素系統自動賦0
(3)使陣列全部元素值為0 int a[5]=;不能對陣列整體賦初值
(4)對全部陣列元素賦初值時,可以不指定陣列長度。
例如:int a=;
(四)程式舉例:
ex1、用陣列來處理求fibonacci數列問題
main()
;for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<20;i++)
if(i%5==0)printf("\n");
printf("%12d",f[i]);
ex2、用冒泡法對10個數從小到大排序
main()
printf("the sorted number:\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
ex3、用選擇法對10個數從下到大排序
main()
printf("\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
}5.2 二維陣列
一、二維陣列的定義
型別說明符陣列名[常量表示式1][常量表示式2];
例如:int a[2][3] 定義乙個2行3列的整型陣列a
可以看成一種特殊的一維陣列,每個元素是乙個一維陣列
二、二維陣列的引用
陣列名[下標][下標]
注:二維陣列的行號列標均從零開始,引用陣列元素時下標不能越界,下標可以是整型常量或整型表示式
三、二維陣列的初始化
1、分行給二維陣列賦初值
2、將所有資料寫在乙個花括號中,按順序給各元素賦初值
3、給部分元素賦初值,其餘元素自動為0
4、只對某幾行賦初值,省略賦值的行的花括號不能省
5、對全部元素賦初值,可以不指定第一維的長度,但第二維的長度不能省
四、二維陣列程式舉例
ex1:將乙個二維陣列行和列元素互換,存到另乙個二維陣列中。
main()
;int b[3][2],i,j;
printf("array a:\n");
for(i=0;i<2;i++)
printf("\n");
}printf("array b:\n");
for(i=0;i<3;i++)
}ex2:有乙個3行4列的二維陣列,求出其中的最大值,並記錄下它所在的行號和列標
程式略ex3:求乙個3行4列的二維陣列的對角線元素之和
程式略5.3 字元陣列
用來存放字元資料的陣列是字元陣列,字元陣列中的乙個元素存放乙個字元
一、字元陣列的定義
char c[10];
二、字元陣列的初始化
逐個字元賦給陣列中各元素
char c[10]=;
把10個字元分別賦給c[0]到c[9]10個元素。
如果花括弧中提供的初值個數大於陣列長度,語法出錯。如果小於陣列長度,則將這些字元賦給前面的元素,其餘的自動賦空字元'\0'.
如果初值個數與預定的陣列長度相同,在定義時可以省略陣列長度,系統能根據初值個數確定陣列長度。如:char=;陣列的長度自動定為5。
也可以定義和初始化乙個二維字元陣列
char c[5][5
三、字元陣列的引用
ex1:
main()
;int i;
for(i=0;i<10;i++)
printf("%c",c[i]);
printf("\n");
}ex2:
main()
}四、字串和字串結束標誌
在c語言中,常用乙個一維的字元陣列存放字串.而有效字串的長度不一定是字元陣列的長度.用'\0'表示字串結束標誌.在程式中往往通過'\0'的位置判斷字串是否結束
說明:'\0'是ascii碼為0的字元,它不是乙個可以顯示的字元,而是乙個空操作符,只是用以辨別字串是否結束的標誌.
可以用字串常量來使字元陣列初始化.如:
char c=;
或char c="i am happy";字串常量的最後由系統加上乙個'\0',故
它們與char c=;等價.陣列的長度為11
字元陣列並不要求它的最後乙個字元為'\0',只是為了與字串常量一致,往往人為地給字元陣列加上乙個'\0'
五、字元陣列的輸入和輸出
(1)逐個字元輸入輸出 "%c" 與一重迴圈配合使用
(2)將整個字串一次輸入或輸出 "%s"
如:char c="china";
printf("%s",c);
輸出字串
說明:輸出字元不包括結束符'\0'
用"%s"格式符輸出字串時,printf函式中的輸出項是字元陣列名,而不是陣列元素.
資料結構習題第五章
5.1 選擇題 1 一維陣列和線性表的區別是 a a 前者長度固定,後者長度可變 b 後者長度固定,前者長度可變 c 兩者長度均固定d 兩者長度均可變 2 設w為乙個二維陣列,其每個資料元素wij 占用6個位元組,行下標i從0到8,列下標j從2到5,則二維陣列w的資料元素共占用 c 個位元組。a 4...
資料結構第五章樹答案
第五章樹 答案 一 選擇題 1 二叉樹的第i層最多有 個結點。a 2i b.2ic.2i 1d.2i 1 2.對於一棵滿二叉樹,高度為h,共有n個結點,其中有m個葉子結點,則 a n h m b.h m 2n c.m h 1d.n 2h 1 3.在一棵二叉樹中,共有16個度為2的結點,則其共有個葉子...
資料結構作業系統第五章答案
k n else if a.data k i else if k a.tu while n b.tu else while k a.tu c.mu a.mu c.nu a.nu c.tu p 1 return true 5.23 三元組表的一種變型是,從三元組表中去掉 行下標域得到二元組表,另設乙個...