第五章資料型別 陣列 結構體 共用體

2022-08-23 15:54:03 字數 3000 閱讀 5168

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 三元組表的一種變型是,從三元組表中去掉 行下標域得到二元組表,另設乙個...