小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

C語言入門教程-數(shù)組

 ldjsld 2016-07-31

數(shù)組

“數(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];
a[0] = 12;
a[1] = 9;
a[2] = 14;
a[3] = 5;
a[4] = 1;

使用下標(biāo)訪問數(shù)組帶來的一個好處是可以用循環(huán)來遍歷下標(biāo)。例如,下面的代碼把數(shù)組的所有元素初始化為零:

int a[5];
int i;
for (i=0; i<5; i++)
a[i] = 0;

下面的代碼將數(shù)組元素按順序初始化,然后打印輸出:

#include
int main()
{int a[5];int i;for (i=0; i<5; i++)
a[i] = i;for (i=0; i<5; i++)
printf("a[%d] = %dn", i, a[i]);}

在C中到處都會用到數(shù)組。下面的代碼是一種使用數(shù)組的常見情形。請打開編輯器并錄入以下代碼:

#include 
#define MAX 10
int a[MAX];
int rand_seed=10;
/* 摘自 K&R
   - 返回0-32767之間一個隨機數(shù)字。*/
int rand()
{rand_seed = rand_seed * 1103515245 +12345;return (unsigned int)(rand_seed / 65536) % 32768;}
int main()
{int i,t,x,y;/* fill array */
for (i=0; i < MAX; i++){a[i]=rand();printf("%dn",a[i]);} 

/* 這里很快會加入新內(nèi)容 */
return 0;}

這段代碼引入了幾個新概念。#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ù)組首部靠攏。

動手一試
在代碼前一部分,試將填充數(shù)組的for循環(huán)縮減為一行代碼。請確保結(jié)果和原來的程序相同。
將冒泡排序的代碼提出來建立它自己的函數(shù)。函數(shù)頭是void bubble_sort()。然后將冒泡排序使用的變量也移入函數(shù)變成局部變量。因為數(shù)組是全局的,所以不需要傳遞參數(shù)。
改變隨機數(shù)種子的初始值。 
 

C 常見錯誤
C不提供邊界檢查。所以如果您的數(shù)組指標(biāo)越界了,C不會有任何提示。程序會最后崩潰或輸出無意義的數(shù)據(jù)。
即使不傳遞參數(shù),函數(shù)調(diào)用也要包含()。例如,C接受x=rand;,但這不能完成函數(shù)調(diào)用,而是把rand函數(shù)的內(nèi)存地址賦值給了x。必須寫成x=rand();才行。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多