C 語言支持數組數據結構,它可以存儲一個固定大小的相同類型元素的順序集合。數組是用來存儲一系列數據,但它往往被認為是一系列相同類型的變量。
一、一維數組
一維數組的定義
數據類型 數組名[常量表達式];
數組特點:[ ] :數組運算符,單目運算符,優先級(1),左結合,不能用( )
編譯時分配連續內存
內存字節數=數組維數*
sizeof(元素數據類型)
數組名表示內存首地址,
是地址常量
二、數組的引用
int data[5];
data[5]=10; //C語言對數組不作越界檢查,使用時要 注意
數組必須先定義,后使用v只能逐個引用數組元素,不能一次引用整個數組v數組元素表示形式: 數組名[下標]其中:下標可以是常量或整型表達式。
例 int a[10];
printf(“%d”,a);
必須 for(j=0;j<10;j++)
printf(“%d\\t”,a[j]);
int a[5]={1,2,3,4,5};
等價于:a[0]=1; a[1]=2; a[2]=3; a[3]=4; a[4]=5;
說明:
數組不初始化,其元素值為隨機數
對static數組元素不賦初值,系統會自動賦以0值
只給部分數組元素賦初值
當全部數組元素賦初值時,可不指定數組長度
static int a[5];
等價于:a[0]=0; a[1]=0; a[2]=0; a[3]=0; a[4]=0;
int a[]={1,2,3,4,5,6};
編譯系統根據初值個數確定數組維數
三、程序舉例
用冒泡法對10個數排序
算法分析:如果有n個數,則要進行n-1趟比較。
在第1趟比較中要進行n-1次相鄰元素的兩兩比較,
在第j趟比較中要進行n-j次兩兩比較。
比較的順序從前往后,經過一趟比較后,
將最值沉底(換到最后一個元素位置),
最大值沉底為升序,最小值沉底為降序。
排序過程:
(1)比較第一個數與第二個數,若為逆序a[0]>a[1],則交換;然后比較第二個數與第三個數;依次類推,直至第n-1個數和第n個數比較為止——第一趟冒泡排序,結果最大的數被安置在最后一個元素位置上
(2)對前n-1個數進行第二趟冒泡排序,結果使次大的數被安置在第n-1個元素位置.
(3)重復上述過程,共經過n-1趟冒泡排序后,排序結束
#include
int main()
{
int i,j,t,a[10]={5,4,8,3,6,9,7,222,64,88};
//排序
for(i=1;i<10;i++) //外循環控制排序趟數,n個數排n-1趟
{
for(j=0;j<10-1;j++) //內循環每趟比較的次數,第j趟比較n-i次
{
if(a[j]>a[j+1]) //相鄰元素比較,逆序則交換
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
printf("排序后的結果是:\\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\\n");
return 0;
}
四、多維數組
定義方式:
數據類型數組名[常量表達式][常量表達式];
例 int a[3][4];
float b[2][5];
int c[2][3][4];
int a[3,4]; (x)
數組元素的存放順序l原因:內存是一維的
二維數組:按行序優先
多維數組:最右下標變化最快
五、二維數組
二維數組a是由3個元素組成,每個元素a[i]由包含4個元素的一維數組組成
二維數組元素的引用
形式:數組名[下標][下標]
將二維數組行列元素互換,存到另一個數組中
#include
main()
{ int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf("array a:\\n");
for(i=0;i<=1;i++)
{ for(j=0;j<=2;j++)
{ printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\\n");
}
求二維數組中最大元素值及其行列號
#include
main()
{ int a[3][4]={{1,2,3,4},
{9,8,7,6},
{-10,10,-5,2}};
int i,j,row=0,colum=0,max;
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max)
{ max=a[i][j];
row=i;
colum=j;
}
printf("max=%d,row=%d, \\
colum=%d\\n",max,row,colum);
}
發布評論請先 登錄
C語言數組的學習教程說明

評論