[計程] 陣列簡介

看板b97902HW作者 (簡子翔)時間15年前 (2008/10/01 18:08), 編輯推噓18(18021)
留言39則, 13人參與, 最新討論串1/3 (看更多)
前言 為什麼要打這一篇呢?因為我做 單班計程 HW 1-2 的時候想不出 不用陣列的方法,又聽說還沒有講過陣列,所以稍微講解一下陣列 要怎麼用。 陣列簡介 我們可以先把陣列想像成表格的儲存格,每一個儲存格可以存一個 數值/元素。拿 int 為例子, int array[5]; 就是宣告一個有五個儲存格的表格,每一個儲存格可以存放一個 int。 而每一個儲存格都有一個索引,從前面開始,依序為 0, 1, 2, 3, 4。如果我要存取第一個儲存格,我就必需要用 array[0] 我們來看下面的表格: array = 0 1 2 3 4 <= 這就是索引   ┌───┬───┬───┬───┬───┐   │7689 │2348 │8608 │90 │1 │<= 這是儲存格(元素)   └───┴───┴───┴───┴───┘ 如果我 printf("%d", array[0]) 會印出 7689,如果我要印其他的 值,則用法如下: printf("%d", array[1]); // 2348 printf("%d", array[2]); // 8608 其餘請自行類推。 陣列宣告 陣列的宣告,原則上是 元素型別 陣列名稱 [ 陣列大小 ] ; * 元素型別 可以是 char, short, int, long, float, double, long double 族繁不及備載。 * 陣列名稱 必需是 合法的 C 語言變數名稱。也就是滿足以下的正 規表達示。/[A-Za-z_]+[A-Za-z0-9_]*/ * 陣列大小 是你想要的大小,也就是有多小儲存格。注意:最大的 索引會比這一個值少 1。 例如: int a[10]; float b[2]; char c[1234]; 還有一些陣列宣告的變化型。我們可以在宣告陣列的時候,同時加上 初始值,方法如下: 元素型別 陣列名稱 [ 陣列大小 ] = { 元素0, 元素1, .... }; 例如: int array[5] = {1, 2, 4, 8, 16}; 會讓我們有: array = 0 1 2 3 4 <= 這就是索引   ┌───┬───┬───┬───┬───┐   │1 │2 │4 │8 │16 │<= 這是儲存格(元素)   └───┴───┴───┴───┴───┘ 如果你有加上初始值,最左邊的維度可以省略(編譯器會幫我們算出 來),如下: int array[] = {1, 2, 4, 8, 16, 32}; 等價 int array[6] = {1, 2, 4, 8, 16, 32}; 陣列元素的存取 如果要存取單一個元素,你可以用下標運算子(subscript),也就是在 陣列名字之後加上 [],例如: int array[5] = {1, 2, 4, 8, 16}; array[0] == 1 array[1] == 2 array[2] == 4 array[3] == 8 array[4] == 16 如果要印出來,可以配合 for 來使用。 for (i = 0; i < 5; ++i) { printf("%d\n", array[i]); } 如果要當成輸入,也是一樣, for (i = 0; i < 5; ++i) { scanf("%d", &(array[i])); } 如果我們要改其中的一個值,就像用一般的變數一樣。例如 array[3] = 12345; 而如果要 複製 一個陣列,我們必需一個元素一個元素去改, 如下,不可以直接指派: int array2[5]; int i; for (i = 0; i < 5; ++i) { array2[i] = array[i]; } 陣列的常見錯誤 <錯> 陣列指派(Assign) int array[5] = {1, 2, 4, 8, 16}; int array2[5] = array; /* 錯!錯!錯!錯!錯!沒有這種寫法 */ 這一個當然也錯: int array[5] = {1, 2, 4, 8, 16}; int array2[5]; array2 = array; <錯> 溢位(通常可以正常編譯,不過會「本程式即將要關閉」或 RE) int array[5] = {1, 2, 4, 8, 16}; int i; for (i = 1; i <= 5; ++i) { printf("%d\n", array[i]); } <錯> 動態的陣列大小 int size; scanf("%d", &size); int array[size]; ...... 結語 這一次陣列暫時介紹到這裡,有機會再向大家介紹其他陣列還有 指標的用法。如果這一篇文有錯,還請大家指教。 還有,我想問:鋼彈在哪裡?這不是鋼彈,這不是鋼彈... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.241.166 ※ 編輯: LoganChien 來自: 140.112.241.166 (10/01 18:38)

10/01 18:40, , 1F
大大風範>///<
10/01 18:40, 1F

10/01 20:34, , 2F
好文推,沒有陣列應該解不了第二題
10/01 20:34, 2F

10/01 21:37, , 3F
收精華了啦
10/01 21:37, 3F

10/01 21:42, , 4F
別急 鋼彈蛋蛋快要開撥了
10/01 21:42, 4F

10/01 22:34, , 5F
C好像不能compile用變數當大小宣告的array ...
10/01 22:34, 5F
※ 編輯: LoganChien 來自: 140.112.241.166 (10/01 22:39)

10/01 22:40, , 6F
我把它改得明顯一點了。
10/01 22:40, 6F

10/01 23:25, , 7F
可是我編譯沒問題ㄟXD~到底是怎麼回事.....
10/01 23:25, 7F

10/01 23:29, , 8F
1. 有可能是 編譯器 的 bonus, 它會處理
10/01 23:29, 8F

10/01 23:29, , 9F
2. 可能編譯器隨便代入一個數字
10/01 23:29, 9F

10/01 23:29, , 10F
Dev-C++會用g++來compile吧 gcc就不會過了...
10/01 23:29, 10F

10/01 23:30, , 11F
因為那在C++裡面是可以的
10/01 23:30, 11F

10/01 23:30, , 12F
至於是哪一種,我們需要強者來反組譯!
10/01 23:30, 12F

10/01 23:34, , 13F
Dev C++是看副檔名的 你副檔名要存成 .c才會用gcc
10/01 23:34, 13F

10/01 23:40, , 14F
我是這樣寫然後上傳批改娘過了XD
10/01 23:40, 14F

10/01 23:41, , 15F
gcc 也會過,而且我高度懷疑是 gcc 的 extension。
10/01 23:41, 15F

10/01 23:42, , 16F
好文.
10/01 23:42, 16F

10/01 23:47, , 17F
找道了,參考 http://tinyurl.com/2aprqb
10/01 23:47, 17F

10/01 23:49, , 18F
不過我個人不鼓勵使用這一種寫法,除非你的環境永遠是
10/01 23:49, 18F

10/01 23:49, , 19F
GCC or Standard C99
10/01 23:49, 19F

10/01 23:53, , 20F
可以補一下歸零的方法
10/01 23:53, 20F

10/02 00:04, , 21F
批改娘能過還奇妙的
10/02 00:04, 21F

10/02 00:07, , 22F
To Ming1053, 我寫到下一集好了,字串、多維陣列、秘密
10/02 00:07, 22F

10/02 00:08, , 23F
To Martinku, 批改娘我猜是 GCC,而且也可以用 C99。
10/02 00:08, 23F

10/02 00:09, , 24F
/usr/bin/gcc-3.4 -c -std=c99 -Wall -fno-builtin -O1
10/02 00:09, 24F

10/02 00:15, , 25F
歸零用memset...
10/02 00:15, 25F

10/02 00:43, , 26F
樓上好用的奧步XD
10/02 00:43, 26F

10/02 00:49, , 27F
快又有效XD
10/02 00:49, 27F

10/02 00:51, , 28F
memset()用來歸零可以 其他的就不一定了XD
10/02 00:51, 28F

10/02 00:54, , 29F
還可以歸-1 XD
10/02 00:54, 29F

10/02 01:08, , 30F
還可以設不小的數(歸infinity?XD)
10/02 01:08, 30F

10/02 01:08, , 31F
還可以歸心似箭
10/02 01:08, 31F

10/02 01:11, , 32F
還可以歸苓膏
10/02 01:11, 32F

10/03 00:46, , 33F
我想出 HW 1-2 不用陣列的方法了,現在才想出來,OTZ。
10/03 00:46, 33F

10/03 17:31, , 34F
我寫出來了XD 一千多行囧RZ
10/03 17:31, 34F

10/03 17:32, , 35F
助教說他寫大概一百多行吧~
10/03 17:32, 35F

10/03 17:32, , 36F
是頂多啦 實際怎樣就不知道了!!
10/03 17:32, 36F

10/03 23:29, , 37F
剛才我試了一下我的想法,沒有問題,49 行。
10/03 23:29, 37F

10/03 23:30, , 38F
提示:小於等於 5 的非負有理數是 6 個。另外,會用到
10/03 23:30, 38F

10/03 23:31, , 39F
for, switch, if
10/03 23:31, 39F
文章代碼(AID): #18uqm9qd (b97902HW)
文章代碼(AID): #18uqm9qd (b97902HW)