C語言基礎之陣列

2021-08-02 03:44:32 字數 4490 閱讀 2057

在c語言中,陣列屬於構造資料類。陣列元素可以是基本資料型別也可以是構造型別。

一維陣列定義:

型別識別符號 陣列名[常量表示式]

例: int a[10]            /*下標從0開始

陣列元素的表示式為:  陣列名[下標]        /*下標可以是整型常量或者表示式

陣列元素初始化

1.在定義陣列時賦初值  例:int a[10]=;

2.給陣列部分元素賦值  例:static int a[5]=;   /*表明只給兩個元素賦值,即a[0]=7,a[1]=6,其他值自動為0

3.對全部元素賦初值時,可以不指定陣列長度  例: static int a=;

4.只能給元素逐個賦值,不能給陣列整體賦值 即不能寫成 int a[10]=1;

例:求陣列中的最大值

#include

main()

printf("the max number is:%d\nthe order is:%d\n",max,id);

例:十進位制轉八進位制

分析:十進位制轉八進位制的方法是把十進位制不斷地整除8,直到商為0為止,每次整除後的餘數構成了相應的

八進位制數(由低位到高位)的第一位,第二位…,定義乙個一位陣列,將計算後的八進位制證書的每位數儲存在陣列中,當轉換結束後,逆序輸出陣列內容即可。

main()

for(j=i-1;j>=0;j--)

printf("%d\n",trans[j]); }

字元陣列的定義和初始化

由於字元型和整型通用, char a[5]也可以定義為 int a[5] 但這時每個陣列元素佔2個位元組的記憶體單元

字元陣列也可以是二維或多維陣列

初始化: char c[10]=;   //不足的自動賦0值

當對全體元素賦初值時也可省去長度說明

字元陣列的引用

(1)格式化輸入是緩衝讀,必須在接收到回車命令的時候,scanf()才開始讀取資料。

(2)讀字元資料時,空格是有效字元,被儲存進字元陣列

(3)按enter鍵時,輸入的字元少於scanf()迴圈讀取的字元時,scanf()繼續等待使用者將剩下的字元輸入,

多餘的話,scanf()只將前面的字元讀入

(4)逐個讀入字元結束後,不會自動在末尾加『\0』。所以輸出時,最好也是用逐個字元輸出。

在scanf()和printf()函式中用格式字元%s整體輸出字串,一次呼叫者兩個函式,便可以實現字串的整體輸入輸出。

源程式:

#include "stdio.h"

main()

執行結果:

hello

olleh

系統自動在字串末尾增加乙個『\0』c語言規定陣列名代表陣列元素在記憶體中連續存在的起始位址,因此在scanf()函式中直接用str即可

說明:(1)系統自動在字串末尾加乙個『\0』,它只代表字串的結束,它本身不是字串的組成部分。

(2)按照%s格式輸入字串時,自動在最後加字元結束標誌,並且可用%c格式逐個輸出或用%s格式整體輸出

(3)用%s格式輸入字串時,scanf和printf韓式的引數都要求字串陣列的首位址,即字元陣列名。

(4)如果陣列長度大於字串實際長度,也只輸出到\0結束

(5)按照%s格式輸出字串時,輸出的字串不能有空格,空格是輸入資料的結束標誌。這時scanf函式會認為輸入的是兩個字串,如果要

輸入含有空格的字串可以使用系統標準函式gets(). 例:

char s1[5],s2[5],s3[5];

scanf("%s%s%s\n",s1,s2,s3);

輸入資料:

how are you h

ow\0a

re\0y

ou\0 s1,s2,s3儲存結構

如果改為

char str[13];

scanf("%s",str); h

ow\0

字串

字串在c中沒有專門的字串變數,通常用乙個字元陣列來存放乙個字串,字串總是以\0作為串的結束符

c語言中允許用字串的方式對陣列作初始化賦值

例: char c=;

可寫成 char c=;

或 char c="c program";

用字串賦值比用字元逐個賦值要多佔乙個位元組,用於存放字串結束標誌\0.

例: main()

說明:本例中定義的陣列長度是15,因此輸入的字串長度必須小於15,以留出乙個位元組用於存放字串結束標誌\0,

當scanf函式輸入字串時,字串中不能有空格,否則以空格作為串的結束符。為了避免這種情況,可多設幾個字元陣列分段以存放空格的串。

在前面介紹過,scanf的各輸入項必須以位址的方式出現,如&a等,但在前例中卻以陣列各方式出現,因為在c語言中規定,陣列名就代表了該

陣列的首位址,整個陣列是以首位址開頭的一塊連續的記憶體單元。

字串操作常用的庫函式

1.puts(字元陣列名);   //把字元陣列中的字串輸出顯示到顯示器,可以使用轉義字元\n等

2.gets(字元陣列名);  //從標準輸入裝置鍵盤上輸入乙個字串,並不以空格作為輸入結束標誌

例: char st[15];

printf("input string:\n");

gets(st);

puts(st);

3.strcat(字元陣列名1,字元陣列名2);

功能:將2 中的字元鏈結到1 的後面並去掉1 中的結束符\0,函式返回是字元陣列1 的首位址。注意1必須定義足夠長度,否則有可能不能裝下2.

4.strcopy(字元陣列名1,字元陣列名2);

功能:把2中的字串賦值到1中,串結束符\0也一起複製。

5.strcmp

(字元陣列名1,字元陣列名2);

功能:按照ascii碼順序比較兩個陣列中的字串,並由函式返回值返回比較結果。

1=2,返回值=0;

1>2,返回值》0;

1<2,返回值<0;

6.strlen(字串陣列名)

功能:測字串的實際長度(不包含結束符),並作為函式返回值

字串常用演算法

1.字元傳計數

int countchar(char list)

2.單詞計數

int countword(char list)

#define yes 1

#define no 0

} return(count); }

3.逆序字串

for(n=0;str[n]!='\0';n++)  //這個語句在這計算出str陣列中的實際字元的個數

for(i=0,j=n-1;i

二維陣列

因實際的硬體儲存器是連續編址的,所以資料放完一行順次放入第二行。。

二維陣列初始化

1.分段賦值:int a[5][3]=,,,,}

2.連續賦值:int a[5][3]=

3.對部分元素賦值,未賦值部分取0

int a[3][3]=,,}

4.如對全部元素賦值 ,第一行長度可不給

int a[3][3]=

可寫成int a[3]=

5.a[3][4]可以分解成3個一維陣列,器陣列名為a[0],a[1],a[2]

這三個一維陣列不需要另外說明即可使用,它們是陣列名,不是乙個單純的下標變數

例:氣泡排序:資料由最小值排到最大值

#include

#define size 10   //定義陣列的大小以及進入迴圈判斷的條件

void main() ;

int i,pass,hold;

printf("data items in original order:\n");

for(i=0;i

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

for(pass=1;pass

for(i=0;i

if(a[i]>a[i+1])

printf("data items in ascending order:\n");

for(i=0;i)

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

00return 0;

}例:選擇排序

選擇排序就是找出陣列中的最小值與第0個值對換,再從剩下的數中找出最小的數與第乙個數對換等。

main()

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

if(p!=i) }

C語言基礎之陣列

定義乙個陣列,10個元素為int型別的陣列 型別名 int 10 變數名 arr int arr 10 printf sizeof arr d.n sizeof arr 列印結果為40位元組,即為整個陣列大小 printf szieof int 10 d.n sizeof arr 10 列印結果為4...

C 語言基礎 陣列

二維陣列,就是以陣列作為元素的陣列。挺拗口的,看看它跟一維陣列的對比 左邊的 a 是一維陣列,陣列中包含 4 個 int 型變數 a 0 a 1 a 2 a 3 右邊的 b 是二維陣列,陣列中包含 2 個 int 型一維陣列 b 0 b 1 而 b 0 和 b 1 中又分別包含 3 個 int 型變...

C 語言基礎 陣列

一維陣列 資料型別 陣列名 new 資料型別 長度 陣列經過初始化以後,陣列元素有預設的初始值,double型別為 0.0 int型別為 0 char型別為 a bool型別為 false,string型別為 null。二維陣列 char ch console.writeline ch 1,1 ch...