建設(shè)網(wǎng)站需要的工具廣州seo推廣公司
數(shù)組概念
數(shù)組:是一種構(gòu)造數(shù)據(jù)類型,用以處理批量的同種類型的數(shù)據(jù)。
主要特點:數(shù)據(jù)量大 ,類型相同
一維數(shù)組的定義
語法:
類型說明符 數(shù)組名[整型常量表達(dá)式];
注意:
方括號里面的內(nèi)容用于指明數(shù)組長度,即數(shù)組的元素個數(shù),必須是整型常量表達(dá)式
定義數(shù)組的實質(zhì)是在內(nèi)存中預(yù)留一段連續(xù)的儲存空間以存放數(shù)組的全部元素。數(shù)組名表示這段連續(xù)的存儲空間的起始地址(也稱為首地址),空間大小由數(shù)組類型和元素個數(shù)確定。
一維數(shù)組的使用
- 一維數(shù)組的初始化
同普通變量一樣,數(shù)組元素也要初始化賦值以后才能使用。 數(shù)組屬構(gòu)造數(shù)據(jù)類型,數(shù)組元索是組成數(shù)組的基本單位,每個元素是一個下標(biāo)變量,因此有兩種初始化數(shù)組元素的方法。
(1)在定義數(shù)組的同時初始化數(shù)組元索一般形式如下:
類型說明符 數(shù)組名[整型常量表達(dá)式]={數(shù)據(jù)值 1,數(shù)據(jù)值 2,…數(shù)據(jù)值N};
其中在{}中的各數(shù)據(jù)值即為對應(yīng)的各元素初值,各值之間用逗號間隔。
例如,執(zhí)行語句“int score[10]={90,78,80,85,61,70,95,81,58,76};”后,數(shù)組元素score[0]~score[10]的值依次為90,78,80,85,61,70,95,81,58,76
C語言對數(shù)組的初始化賦值還有以下幾點規(guī)定。
① 可以只給部分元素賦初值。
當(dāng){}中值的個數(shù)少于元素個數(shù)時,這時只給前面部分元素賦值,其余未獲得初值的元素系統(tǒng)默認(rèn)賦值為 0。但{}中值的個數(shù)不能多于元素個數(shù),也不能一個也沒有。例如:
int score[10]={90,78,80,85,61};
表示只給 score[0]~score[4]賦值,而元素 score[5]-score[9]將自動賦0值。
② 只能給元素逐個賦值,不能給數(shù)組整體賦值。例如:給 10個元素全部賦1值,只能寫為: int score[10]={1,1,1,1,1,1,1,1,1,1};
而不能寫為: int a[10]=1;
③ 若給全部元素賦值,則在數(shù)組說明中,可以不給出數(shù)組元素的個數(shù)。系統(tǒng)會自動把(}中的數(shù)據(jù)個數(shù)定義為數(shù)組的長度。
(2)先定義數(shù)組,再初始化數(shù)組元素,這時通常采用循環(huán)結(jié)構(gòu)。
#include <stdio.h>
int main()
{int i, score[10];for (i = 0; i < 10; i++){scanf("%d", &score[i]);}printf("%d", score[1]);return 0;
}
- 一維數(shù)組元素的引用
在C語言中只能逐個地引用數(shù)組元素,而不能對數(shù)組進(jìn)行整體引用。例如:
要輸出 score 數(shù)組中的 50 個數(shù)組元素,必須使用循環(huán)語句逐個輸出各數(shù)組元素 (即下標(biāo)變量):
#include <stdio.h>
int main()
{int i, score[10];for (i = 0; i < 10;){score[i++] = 2 * i;}for (i = 0; i <= 9; i++){printf("%4d", score[i]);}return 0;
}
一維數(shù)組的應(yīng)用舉例
- 刪除數(shù)組元素
已知數(shù)組a已經(jīng)存放有N個其值互不相同的整數(shù)。現(xiàn)從鍵盤輸入一個數(shù) x,要求從數(shù)組中刪除與 x 相等的元素,并將其后的元素逐個向前遞補,且將最后一個元素置 0 值。輸出刪除后的數(shù)組。如原數(shù)組中無此數(shù),則輸出相應(yīng)提示信息,提示不存在該值的元素。
#include <stdio.h>
#define N 10
int main()
{int i, x, flag = 0, k;int a[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};printf("原數(shù)組值:\n");for (i = 0; i < N; i++){printf("%d", a[i]);}printf("請輸入要刪除的元素值:\n");scanf("%d", &x);for (i = 0; i < N; i++){if (a[i] == x){flag = 1;k = i;break;}}if (flag == 0){printf("該數(shù)組中不存在該值!\n");}else{if (k == N - 1){a[N - 1] = 0;}else{for (i = k; i < N - 1; i++){a[i] = a[i + 1];}a[i] = 0;}printf("\n刪除元素%d后的數(shù)組值:", x);for (i = 0; i < N; i++){printf("%4d", a[i]);}}return 0;
}
終端:
- 一維數(shù)組的排序
從鍵盤輸入 N 個整數(shù),將其升序排列
A.冒泡排序法
#include <stdio.h>
#define N 10
int main()
{int a[N], i, j, t; // 定義中間變量 tprintf("請輸入%d個數(shù)據(jù)\n", N);for (i = 0; i < N; i++){scanf("%d", &a[i]);}for (j = 0; j < N - 1; j++) // 一共 N 個數(shù) 要進(jìn)行 N - 1 趟比較{for (i = 0; i <= N - 1 - j; i++) // 每一趟中需要兩兩比較的次數(shù){if (a[i] > a[i + 1]){t = a[i];a[i] = a[i + 1];a[i + 1] = t;}}}printf("升序排列如下:\n");for (j = 0; j < N; j++){printf("%3d", a[j]);}return 0;
}
終端:
B.選則排序法
具體實現(xiàn)思路:
逐次選擇數(shù)組 a中的元素a[i] (i = 0,1,2,3,4,…,N - 2) 與它后邊的每一個元素 a[j] (j = i+1,…,N - 1) 進(jìn)行逐個比較,將a[i]至a[N-1]中的最小值與a[i]交換 (要保證a[i]比任何a[j]都要小)。重復(fù)這個過程 N - 1 次,最后 a 數(shù)組中元素便被升序排列。
#include <stdio.h>
#define N 10
// 定義數(shù)組a[N],下標(biāo)變量i,j,交換使用中間變量 t,記錄 a[i] 至 a[N] 中最小元素的下標(biāo)變量
int main()
{int a[N], i, j, k, t;for (i = 0; i < N; i++){scanf("%d", &a[i]);}for (i = 0; i < N - 1; i++){k = i;for (j = i + 1; j < N; j++){if (a[j] < a[k]){k = j;}if (k != i){t = a[k];a[k] = a[i];a[i] = t;}}}printf("升序排列后的結(jié)果為:\n");for (i = 0; i < N; i++){printf("%3d", a[i]);}return 0;
}
終端:
- 數(shù)組中遞推的應(yīng)用
利用一維數(shù)組,輸出斐波那契數(shù)列:
1,1,2,3,5,8,13,21,34,55,89…
分析:顯然這是一個典型的遞推問題,其遞推公式如下:
{
當(dāng) i = 1; a [i] = 1;
當(dāng) i = 2; a [i] = 2;
當(dāng) 3 <= i <= N; a[i] = a[i-1] + a[i+1];
}
利用循環(huán)結(jié)構(gòu)實現(xiàn)設(shè)計:
#include <stdio.h>
#define N 10
int main()
{long i, a[N] = {1, 1};for (i = 2; i < N; i++){a[i] = a[i - 1] + a[i - 2]; // 用遞推公式依次計算出a[2].......}for (i = 0; i < N; i++){printf("%ld\t", a[i]);if ((i + 1) % 5 == 0){printf("\n"); // 每輸入 5 個數(shù)就換行}}return 0;
}