溫習:三種迴圈結構
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語言中使用陣列必須先進行定義。一維陣列的定義方式為 型別說明符 陣列名 常量表示式 型別說明符是任一種基本資料型別或構造資料型別。陣列名是使用者定義的陣列識別符號。方括號中的常量表示式表示資料元素的個數,也稱...