數(shù)組
本節(jié)我們將用C寫一個小程序隨機生成10個數(shù),并對其進行排序。我們將使用一種新的變量結(jié)構(gòu):數(shù)組。 借助數(shù)組可以聲明并使用一組同類型的數(shù)據(jù)。比如您現(xiàn)在需要創(chuàng)建五個整數(shù)。一種辦法是直接進行聲明: int a, b, c, d, e; 這當(dāng)然可以,但如果您需要一千個整數(shù)呢?一種更好的辦法是聲明一個包含五個整數(shù)的數(shù)組: int a[5]; 這個數(shù)組中的五個整數(shù)可以分別使用下標(biāo)進行訪問。C中所有數(shù)組的下標(biāo)都是從零到n-1。所以int a[5];包含了五個元素。例如:
int a[5]; 使用下標(biāo)訪問數(shù)組帶來的一個好處是可以用循環(huán)來遍歷下標(biāo)。例如,下面的代碼把數(shù)組的所有元素初始化為零:
int a[5]; 下面的代碼將數(shù)組元素按順序初始化,然后打印輸出:
#include 在C中到處都會用到數(shù)組。下面的代碼是一種使用數(shù)組的常見情形。請打開編輯器并錄入以下代碼: #include
這段代碼引入了幾個新概念。#define聲明了一個名為MAX的常量并讓它等于10。為在代碼中醒目起見,常量名習(xí)慣上全用大寫字母。int a[MAX];這行告訴我們在C中如何聲明整型數(shù)組。注意,數(shù)組聲明出現(xiàn)的位置決定了它是整個程序的全局變量。 下面的一行int rand_seed=10也聲明了一個全局變量,名為rand_seed。它在每次程序開始時被初始化為10,作為下面隨機數(shù)生成代碼的初始種子。實際中隨機數(shù)發(fā)生器的種子應(yīng)該以一個隨機數(shù)作為初值,如系統(tǒng)時間。本例中的rand函數(shù),在每次程序運行時都會給出相同的隨機數(shù)序列。 int rand()這行代碼是一個函數(shù)聲明:rand函數(shù)沒有參數(shù)且返回一個整數(shù)。后面我們會學(xué)習(xí)更多關(guān)于函數(shù)的知識。下面的四行是rand函數(shù)的實現(xiàn),我們可以暫時忽略。 主函數(shù)沒什么特別的。先聲明了四個整型變量,接下來的for循環(huán)用10個隨機數(shù)填充數(shù)組。注意數(shù)組a包含了10個獨立的整數(shù)。您可以用方括號指明具體元素。例如a[0]代表數(shù)組中的第一個整數(shù),a[1]代表第二個,以此類推。用/*開始并用*/結(jié)束的行稱為注釋。編譯器完全忽略注釋行。您可以把程序說明(自己看或供其他程序員閱讀)放在注釋中。 現(xiàn)在請用下面的代碼替換這里很快會加入新內(nèi)容那行注釋: /* 將數(shù)組用冒泡法排序 */ for (x=0; x < MAX-1; x++) for (y=0; y < MAX-x-1; y++) if (a[y] > a[y+1]) {t=a[y];a[y]=a[y+1];a[y+1]=t;} /* 打印排序后的數(shù)組 */ printf("--------------------n"); for (i=0; i < MAX; i++) printf("%dn",a[i]); 以上代碼將隨機數(shù)排序,并按順序打印。每次運行程序您都會得到同樣的結(jié)果。要想改變參加排序的值,在每次運行程序前請改變rand_seed的值。 要真正讀懂這段代碼的簡單辦法只有一個,就是“手動”執(zhí)行一下程序。為簡單起見令MAX等于4。準(zhǔn)備一張紙并假設(shè)您自己就是計算機。在紙上畫出數(shù)組,然后填入四個隨機、無序的數(shù)字?,F(xiàn)在按照代碼中的排序部分一邊逐行執(zhí)行,一邊在紙上記錄執(zhí)行過程。您會發(fā)現(xiàn)每次執(zhí)行完內(nèi)層循環(huán)后,較大的那些數(shù)被推向數(shù)組尾部,而較小的那些數(shù)則向數(shù)組首部靠攏。
動手一試
C 常見錯誤 |
|