在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...