程式語言一 · 導覽投影片
→ / space 前進 ← 回 Esc 總覽 F 全螢幕要存 100 個成績不可能宣告 100 個變數。陣列把一排同型態資料用一個名字管理、用索引(從 0 起)存取。
本投影片只建地圖;每站完整程式在 PDF 與 index。
int a[5]; // 未初始化=垃圾值
int a[5] = {10,20,30,40,50}; // 宣告 + 初始化
int a[5] = {0}; // 全部補 0
int a[] = {10,20,30}; // 編譯器算長度=3
大小在宣告時就固定、必須是常數,不能中途改。
int s = 0;
for (int i = 0; i < n; i++) s += a[i]; // 遍歷標準式:i < n
a[n] 不存在(最後是 a[n-1])。C 不檢查邊界、是未定義行為,可能改到別的變數或 crash。本地用 -fsanitize=address 可當場抓到。void f(int x){x=99;} → a 不變void f(int a[]){a[0]=99;} → 真的變代價:函式內 sizeof(a) 是位址大小、不是長度 → 要另外傳 n。
int cnt[10] = {0};
for (int i = 0; i < n; i++) cnt[data[i]]++; // 值當索引,O(n) 統計頻率
| 演算法 | 複雜度 | 前提 |
|---|---|---|
| 線性搜尋 | O(n) | 無 |
| 二分搜尋 | O(log n) | 須先排序 |
| 氣泡 / 選擇排序 | O(n²) | — |
| 症狀 | 成因 |
|---|---|
| 結果不穩 / crash | 越界:arr[n]、遍歷用 i <= n |
| 讀到怪數字 | 未初始化(垃圾值);需要時 ={0} |
| 大輸入爆掉 | 陣列開太小 |
| 函式內長度錯 | 忘了另傳 n(sizeof 失效) |
| 二分搜尋找錯 | 資料沒先排序 |