b97902HW 板


LINE

前言 為什麼要打這一篇呢?因為我做 單班計程 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)
1F:推 hrs113355:大大風範>///< 10/01 18:40
2F:推 iForests:好文推,沒有陣列應該解不了第二題 10/01 20:34
3F:推 enhuang:收精華了啦 10/01 21:37
4F:推 jimmyken793:別急 鋼彈蛋蛋快要開撥了 10/01 21:42
5F:推 ming1053:C好像不能compile用變數當大小宣告的array ... 10/01 22:34
※ 編輯: LoganChien 來自: 140.112.241.166 (10/01 22:39)
6F:→ LoganChien:我把它改得明顯一點了。 10/01 22:40
7F:→ martinku:可是我編譯沒問題ㄟXD~到底是怎麼回事..... 10/01 23:25
8F:→ LoganChien:1. 有可能是 編譯器 的 bonus, 它會處理 10/01 23:29
9F:→ LoganChien:2. 可能編譯器隨便代入一個數字 10/01 23:29
10F:推 ming1053:Dev-C++會用g++來compile吧 gcc就不會過了... 10/01 23:29
11F:→ ming1053:因為那在C++裡面是可以的 10/01 23:30
12F:→ LoganChien:至於是哪一種,我們需要強者來反組譯! 10/01 23:30
13F:推 jimmyken793:Dev C++是看副檔名的 你副檔名要存成 .c才會用gcc 10/01 23:34
14F:→ martinku:我是這樣寫然後上傳批改娘過了XD 10/01 23:40
15F:→ LoganChien:gcc 也會過,而且我高度懷疑是 gcc 的 extension。 10/01 23:41
16F:推 pangfeng:好文. 10/01 23:42
17F:→ LoganChien:找道了,參考 http://tinyurl.com/2aprqb 10/01 23:47
18F:→ LoganChien:不過我個人不鼓勵使用這一種寫法,除非你的環境永遠是 10/01 23:49
19F:→ LoganChien:GCC or Standard C99 10/01 23:49
20F:→ ming1053:可以補一下歸零的方法 10/01 23:53
21F:→ martinku:批改娘能過還奇妙的 10/02 00:04
22F:→ LoganChien:To Ming1053, 我寫到下一集好了,字串、多維陣列、秘密 10/02 00:07
23F:→ LoganChien:To Martinku, 批改娘我猜是 GCC,而且也可以用 C99。 10/02 00:08
24F:推 ckclark:/usr/bin/gcc-3.4 -c -std=c99 -Wall -fno-builtin -O1 10/02 00:09
25F:推 hrs113355:歸零用memset... 10/02 00:15
26F:推 ming1053:樓上好用的奧步XD 10/02 00:43
27F:推 hrs113355:快又有效XD 10/02 00:49
28F:推 anfranion:memset()用來歸零可以 其他的就不一定了XD 10/02 00:51
29F:推 ckclark:還可以歸-1 XD 10/02 00:54
30F:推 sa072686:還可以設不小的數(歸infinity?XD) 10/02 01:08
31F:推 hrs113355:還可以歸心似箭 10/02 01:08
32F:推 averangeall:還可以歸苓膏 10/02 01:11
33F:→ LoganChien:我想出 HW 1-2 不用陣列的方法了,現在才想出來,OTZ。 10/03 00:46
34F:推 Poplarysl:我寫出來了XD 一千多行囧RZ 10/03 17:31
35F:→ Poplarysl:助教說他寫大概一百多行吧~ 10/03 17:32
36F:→ Poplarysl:是頂多啦 實際怎樣就不知道了!! 10/03 17:32
37F:→ LoganChien:剛才我試了一下我的想法,沒有問題,49 行。 10/03 23:29
38F:→ LoganChien:提示:小於等於 5 的非負有理數是 6 個。另外,會用到 10/03 23:30
39F:→ LoganChien:for, switch, if 10/03 23:31







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP