###一維數(shù)組:
定義:具有一定順序關(guān)系的若干變量的一個(gè)集合稿黄,其中每一個(gè)變量稱為數(shù)組的元素归形;
(1):組成數(shù)組的元素都互不相干的獨(dú)立的變量;
(2):數(shù)組元素的數(shù)據(jù)類型必須相同;
(3):變量之間有一定的順序關(guān)系贱案;
數(shù)組屬于構(gòu)造數(shù)據(jù)類型,一個(gè)數(shù)組可以分解為多個(gè)數(shù)組元素止吐。這些數(shù)組元素可以是基本的數(shù)據(jù)類型或構(gòu)造類型宝踪。因此按數(shù)組元素的類型不同,數(shù)組又可分為數(shù)值數(shù)組碍扔,字符數(shù)組瘩燥,指針數(shù)組,結(jié)構(gòu)數(shù)組等不同;
存儲(chǔ)類型是指:auto(自動(dòng)的),register(注冊(cè)),static(靜態(tài)的),extern(申明)厉膀;若省略,相當(dāng)于auto
數(shù)據(jù)類型可以是任意一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型
數(shù)組名是用戶定義的數(shù)組標(biāo)識(shí)符
方括號(hào)中的常量表達(dá)式表示數(shù)據(jù)元素的個(gè)數(shù)二拐,也稱為數(shù)組的長(zhǎng)度服鹅;
對(duì)于數(shù)組的定義,需要注意:
(1):數(shù)組的類型實(shí)際上使指數(shù)組元素的取值類型百新。對(duì)于同一個(gè)數(shù)組企软,其所有元素的數(shù)據(jù)類型是相同的
(2):數(shù)組名不能與其他變量名相同;
(4):方括號(hào)中常量表達(dá)式表示數(shù)組元素的個(gè)數(shù)饭望;
(5):不能在方括號(hào)中用變量來(lái)表示元素的個(gè)數(shù)仗哨,但是可以使符號(hào)常數(shù)或常數(shù)表達(dá)式,如:a[3+2],
(6):允許在同一個(gè)類型說(shuō)明中說(shuō)明多個(gè)數(shù)組和多個(gè)變量铅辞;
###一維數(shù)組的引用:
C語(yǔ)言中規(guī)定了數(shù)組必須逐個(gè)元素引用厌漂,而不能整體引用;通過(guò)數(shù)組下標(biāo)就可以很方便訪問(wèn)數(shù)組中的元素巷挥,但是一定要注意下標(biāo)從0開始桩卵,范圍為0~n-1,其中n為元素個(gè)數(shù)。加入雏节,引用數(shù)組元素時(shí)胜嗓,下標(biāo)越界了,結(jié)果將不可預(yù)料:(可能的結(jié)果)
(1):若越界訪問(wèn)的內(nèi)存空間是空閑的钩乍,程序可能不受影響辞州,任能繼續(xù)運(yùn)行;
(2):若越界訪問(wèn)的空間已經(jīng)被占用寥粹,且寫了很重要的數(shù)據(jù)变过,在這種情況下,若程序執(zhí)行了非法操作涝涤,則程序可能會(huì)異常終止或崩潰媚狰;
(3):若越界訪問(wèn)的空間是空閑的,程序之進(jìn)行了讀操作阔拳,則程序能繼續(xù)運(yùn)行崭孤,但無(wú)法得出正確接果;
###一維數(shù)組初始化:
(1):對(duì)于普通局部數(shù)組糊肠,若定義時(shí)辨宠,沒有初始化,則數(shù)組中元素的值是不確定的货裹;
(2):static 數(shù)組不初始化:對(duì)于全局?jǐn)?shù)組嗤形,若定義時(shí),沒有初始化弧圆,則數(shù)組中元素的值默認(rèn)為0赋兵;
(3):全部初始化:與變量在定義時(shí)初始化一樣,數(shù)組也可以在定義時(shí)初始化墓阀,定義數(shù)組時(shí)毡惜,對(duì)數(shù)組元素初始化,只能寫成一行斯撮,不能換行寫;
(4):全部數(shù)組不初始化:對(duì)于全局?jǐn)?shù)組扶叉,若定義時(shí)勿锅,沒有初始化,則數(shù)組中的元素值默認(rèn)為0枣氧;
(5):部分初始化:數(shù)組定義時(shí)可以對(duì)其中的部分?jǐn)?shù)據(jù)進(jìn)行初始化溢十。當(dāng){ ?}中值的個(gè)數(shù)少于元素個(gè)數(shù)時(shí),只給前面賦值达吞,后面的自動(dòng)賦值為0张弛;
(6):數(shù)組全部賦值:若想對(duì)數(shù)組全部賦值,則可以省略數(shù)組下標(biāo)的常量;
(7):數(shù)組全部初始化為0:int a[10]={0};對(duì)數(shù)組清零還可以使用空函數(shù)memset ,把數(shù)組用0來(lái)填充吞鸭,需要引入頭文件 string.h
例:
int main(){
int a[10];
memset(a,0,sizeof(a));
return 0;
}
可以使用庫(kù)函數(shù)bzero寺董,把數(shù)組清0,需要引用都文件string.h
int main(){
int a[10];
bzero(a,sizeof(a));
return 0;
}
###一維數(shù)組內(nèi)存分配
計(jì)算數(shù)組中元素的個(gè)數(shù):=sizeof(數(shù)組名)/sizeof(數(shù)據(jù)類型)刻剥;
對(duì)數(shù)組名求地址遮咖,其實(shí)就是數(shù)組的第一個(gè)元素的地址,所以可以變相的說(shuō)數(shù)組名就是一個(gè)指針造虏,只不過(guò)是一個(gè)靜態(tài)的指針御吞,一個(gè)數(shù)組內(nèi)存空間是連續(xù)的;
###一維數(shù)組的排序
1.冒泡法:
(1):比較第一個(gè)數(shù)與第二個(gè)數(shù)漓藕,若為逆序a[0]>a[1],則交換陶珠;然后比較第二個(gè)數(shù)與第三個(gè)數(shù);依次類推享钞,直至第n-1個(gè)數(shù)和第n個(gè)數(shù)比較為止--第一趟冒泡排序背率,最終,最大的數(shù)被安置在最后一個(gè)元素位置上嫩与;
(2):對(duì)前n-1個(gè)數(shù)進(jìn)行第二趟冒泡排序寝姿,最終,使次大的數(shù)被安置在第n-1個(gè)元素位置划滋;
(3):重復(fù)上述過(guò)程饵筑,共進(jìn)過(guò)n-1次冒泡排序后,排序結(jié)束处坪;
事例代碼:
#include ?<stdio.h>
#define a N;
int main(){
//第一種
int N,i,j,k;
for(i=0;i<N;i++){
scanf("%d",&a[i]);
}
for(i=0;i<N-1;i++){
? ? for(j=0;j<N-1-i;I++){
? ??????if(a[j]>a[j+1]){
? ??????????????k=a[j];
a[j]=a[j+1];
a[j+1]=k;
}
}
}
printf("\n");
for(i=0;i<N;i++){
printf("%5d",a[i]);
}
//第二種:用sizeofint
int a[ ]={1,23,45,6,58,29},i,j,k,n;
n=sizeof(a)/sizeof(a[0]);
for(i=0;i<n-1;I++){
for(j=0;j<n-1-i;j++){
if(a[j]>a[j+1]){
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
}
}
}
for(i=0;i<n;i++){
printf("%d\n",a[i]);
}
//第三種:循環(huán)剝離
int a[]={1,23,45,6,58,29},ij,k,n,index;
n=sizeof(a)/sizeof(a[0]);
for(i=0;i<n-1;i++){
index=0;
for(j=0;j<n-1-i;j++){
if(a[index]<a[j+1]){
index=j+1;
}
}
k=a[index];
a[index]=a[n-1-i];
a[n-1-i]=k;
}
for(i=0;i<n;i++){
printf("%d\n",a[i]);
}
2.選擇排序法:
(1):首先通過(guò)n-1次比較根资,從n個(gè)數(shù)中找出最小的,將它與第一個(gè)數(shù)進(jìn)行交換———第一次選擇排序同窘,結(jié)果最小的數(shù)被安置在第一個(gè)元素上玄帕;
(2):再通過(guò)n-2次比較,從剩余的n-1個(gè)數(shù)中找出關(guān)鍵次數(shù)小的記錄想邦,將它與第二個(gè)數(shù)交換——第二次選擇排序裤纹;
(3):經(jīng)過(guò)n-1次排序后,排序結(jié)束丧没;
事例代碼:
#include <stdio.h>
int main(){
int a[N],i,j,r,t;
printf("Please input %d numbers\n",N);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N-1;i++){
r=i;
for(j=i+1;j<N;j++){
? if(a[j]<a[r])
r=j;
if(r!=i){
t=a[r];
a[r]=a[i];
a[i]=t;
}
}
printf("the array ?after sort:\n");
for(i=0;i<N;i++)
printf("%5d",a[i]);
prtintf("\n");
}
}