C語言基礎 C語言第七章

2021-06-25 14:32:07 字數 3904 閱讀 3833

溫習:三種迴圈結構

while(條件表示式) 迴圈體

dowhile(條件表示式);

for(表示式1;表示式2;表示式3)          表示式1

==         迴圈體

表示式3      

}第七章 陣列

【一維陣列的定義與引用】

之前講到的資料基本上都是屬於基本型別(整型、字元型、實型)的資料,c語言還提供了構造型別的資料,他們有陣列型別、結構體型別和共用體型別。構造型別資料是由基本型別資料按照一定規則組成的,因此他們又被稱為「匯出型別」。

本章只介紹陣列。陣列是有序資料的集合。陣列中的每乙個元素都屬於同乙個資料型別。我們會用到陣列的下表符號。

定義陣列的方法:int a[100];  --→這一語句表示開了乙個大小為100個int的陣列a

例:結合之前學過的for迴圈,輸入a[0]到a[10],讓後倒著輸出。

解:首先因為0到10一共有11個數,所以至少開11個數的陣列

int a[11];

然後以for迴圈的形式依次輸入a[0],a[1],...,a[10]

for(i=0;i<11;i++)

scanf("%d" , &a[i]);

倒著輸出 == 從a[10]一直到a[0]輸出,也是用for迴圈

for(i=10;i>=0;i--)

prnitf("%d\n" , a[i]);

上面分別就是一維陣列定義與引用的方法了~~

【一維陣列的初始化】

對陣列元素的初始化可以用以下方法實現。

(1)在定義陣列時對陣列元素賦初值。例如:

int a[10]=;

(2)可以只給一部分元素賦值。例如:

int a[10]=;            --沒有賦初值的元素全為0

(3)在對全部元素賦初值時,由於資料的個數已經確定,因此可以不指定資料長度。例如:

int a[5]=;

可以寫成

int a=;

第二種寫法中,花括號中有5個數,系統就會據此自動定義a陣列的長度為5。

例題:輸入n個數,給他們從小到大排序,然後輸出。

【二維陣列的定義和引用】

二維陣列定義的一般形式為:

型別說明符 陣列名[常量表示式][常量表示式];

二維陣列在記憶體空間中其實是連續的,但是在抽象的空間中應該是這樣的(以a[3][4]為例):

----------------------------------------

|  a[0][0]  a[0][1]  a[0][2]  a[0][3]  |

|  a[1][0]  a[1][1]  a[1][2]  a[1][3]  |

|  a[2][0]  a[2][1]  a[2][2]  a[2][3]  |

----------------------------------------

對應的為3行4列~

例如:float a[3][4],b[5][10];

二維陣列的引用:

二維陣列元素的表示形式為

陣列名[下標][下標]

陣列元素可以出現在表示式中,也可以被賦值,例如:

b[1][2] = a[2][3]/2;

--二維陣列裡面的每乙個元素就相當於乙個變數

【二維陣列的初始化】

可以用下面的方法對二維陣列初始化。

(1)分行給二維陣列賦初值。例如:

int a[3][4]=,,};

不妨輸出看看~~

(2)可以將所有資料寫在乙個花括號內,按陣列排列的順序對各元素賦初值。例如:

int a[3][4]=;

這種方法效果與第(1)種方法相同(因為在記憶體空間中二維陣列也還是連續的)。但是以第一種方法為好,一行對一行,界限清楚。用第二種方法如果資料多,寫成一大片,容易遺漏,也不易檢查。

(3)可以對部分元素賦初值。例如:

int a[3][4] = ,,};

1  0  0  0

5  0  0  0

9  0  0  0

int a[3][4] = ,,};

1  0  0  0

0  6  0  0

0  0 11  0

(4)如果對全部元素都賦初值(及提供全部初始資料),則定義陣列時對第一位的長度可以不指定,但第二維的長度不能省略。例如:

int a[3][4]=;

與下面的定義等價:

int a[4]=;

系統會根據資料總個數和第二維的長度算出第一維的長度。陣列一共有12個元素,每行4列,顯然可以確定行數為3。

在定義時也可以只對部分元素賦初值而省略第一維的長度,但應分行賦初值。例如:

int a[4]=,{},};

這樣的寫法,能通知編譯系統;陣列共有三行。陣列個元素為

0  0  3  0

0  0  0  0

0 10  0  0

二維陣列程式舉例:

(1)page.139 例7.5

(2)小明爬山問題(擴充套件)

34 2

5 6 9

1 4 7 3

8 5 6 1 2

9 3 4 5 6 7

5 8 9 3 2 1 7

2 4 5 6 7 3 2 1

8 7 6 3 5 9 7 5 3

1 4 6 3 2 7 6 8 9 4

小明爬山摘果子,每次只能從下面一層做到上面一層他的左上側或者右上側的,他每到乙個點就能得到他所在那個點的果子的重量,問:按上述規則從第十層走到第一層,小明最多能夠採到的果實的重量是多少?

f(i,j) = max

【字元陣列】

字元陣列的定義方法與前面介紹的類似。例如:

char c[10];

c[0]='i';c[1]=' ';c[2]='a';c[3]='m';c[4]=' ';

c[5]='h';c[6]='a';c[7]='p';c[8]='p';c[9]='y';

【字元陣列的初始化】

char c[10]=;

也可以是沒有"10":

char c=;

因為編譯系統自動會識別。

也可以定義和初始化乙個二維陣列,例如:

char diamond[5][5]=,,,,};

字串的初始化還可以這麼寫

字元形式的輸出乙個字串練習:page.141 例7.6 ,例7.7

字串的結束標誌'\0'

【字元陣列的輸入輸出】

字元陣列的輸入輸出可以有兩種方法。

(1)逐個字元輸入輸出。用格式符"%c"輸入或輸出乙個字元,如例7.6

(2)將整個字元一次輸入或輸出。用"%s"格式符,意思是對字串(string)的輸入輸出。例如:

char c=;

printf("%s" , c);

在記憶體中陣列c的狀態如下:

--------------------------------------

|  c  |  h  |  i  |  n  |  a  |  \0  |

--------------------------------------

字串的輸入:

char c[100];

scanf("%s" , s);  --為什麼字串不僅能夠一次性的輸入輸出,而且輸入還沒有"&"呢?

→位址概念+字串這麼輸出有意義~

【字串處理函式】

puts(字元陣列)

gets(字元陣列)

strcat(字元陣列1,字元陣列2)

strcpy(字元陣列1,字串2)

strncpy(字元陣列1,字串2,n)

strcmp(字串1,字串2)

strlen(字串)

strlwr(字串)

strupr(字串)

例題:page.151 例7.9

課後練習:7.3,7.5

C語言 第七章

一 在計算機中,位 bit 是表示和儲存資訊的最小單位,1b 8bit。c 語言提供一種在位一級進行操作的機制。它允許在乙個結構體中以位為單位來指定其成員所佔記憶體的長度,這種以位為單位的成員稱為 位段 或 位域 例如 struct a unsigned aa 1 unsigned bb 1 uns...

C語言第七章(7 1 7 4)

7.3 呼叫函式 7.3.2 函式呼叫時的資料傳遞 7.1 為什麼要用函式 7.3 呼叫函式 7.3.4 函式的返回值 7.4 對被呼叫函式的宣告和函式原型 執行結果 在這裡插入描述 how do you do include intmain void print star void print m...

C語言 第七章 陣列

c語言支援一維陣列和多維陣列。如果乙個陣列的所有元素都不是陣列,那麼該陣列稱為一維陣列。在c語言中使用陣列必須先進行定義。一維陣列的定義方式為 型別說明符 陣列名 常量表示式 型別說明符是任一種基本資料型別或構造資料型別。陣列名是使用者定義的陣列識別符號。方括號中的常量表示式表示資料元素的個數,也稱...