把助教課的筆記整理成一篇,內容很雜又囉唆,應該只有我自己看得懂,有些跟課程內容重複到,但還是再看一次加深記憶力。
助教課程目錄:
影片連結:Array

array_1[] 有 n 個數量array_1[0]array_1[n-1]int array_1[] = {1, 2 ,3};
array[3] 的出現( 最後一個為 array[2] )陣列的宣告方式: 資料類型 名稱[數量]


也可以用以下方式宣告,兩種是完全一樣的

當然也可以製造出二維的陣列,定義一個 2 * 3 的陣列:
int array_2[2][3] = {
{1, 2, 3},
{4, 5, 6}
};

這邊有一點要特別小心,在 C 語言中,我們沒辦法直接複製陣列,將 陣列一 直接賦值到 陣列二 是不被允許的,我們能做的就只有使用迴圈、將所有的內容一個一個複製過去。
例如下圖,這樣是不允許的。

正確的方式是使用迴圈複製。

在 C 語言中,大部分的資料型態都是 Pass by value(傳值), 但陣列是 Pass by reference (傳參考)。
這是什麼意思呢?先從傳值來探討
當我們將變數複製給另一個變數時,int a = b;,其實並不是真的把 b 複製到 a,電腦在背後默默多了一個步驟,他將 b 先複製一個副本,再將那副本複製給 a。可以想像成 a、b 都在記憶體佔去一部分空間,彼此不相干。
那傳參考呢?
可以想像成傳送者與接收者是共用同一塊空間,會互相影響到。 仔細想想也是合理的設計,因為陣列通常比較大,如果用傳值的方式,會浪費掉許多空間。
來看看以下練習:

如果你搞清楚了 Pass by value or reference 的差別,那應該知道印出的答案是什麼?
試著自己想想解答,再繼續往下看
如果算出來的答案是 10 22,恭喜你!
課程連結:Functions
當我們架構越來越多時,不可能所有都塞在主程式裡,所以需要 function 來分化,也比較好 debug。
可以把 function 當成一個黑盒子,有些輸入 input 跟輸出 output。
為什麼說他是黑盒子呢?因為有些常用的 function 並不是自己寫的,像是常用的 printf,引用來自 <stdio.h>,我們並不了解裡頭是怎麼實現的,但知道如何使用它。
所以一個清楚的命名、及完整的文件說明是很重要的。

內容:output type function name (argument-list);
int add_two_int(int a, int b);
int add_two_int(int a, int b)
{
int sum = a + b;
return sum;
}
int c = sum(a, b);
條件:
影片連結:Algorithms Summary

影片連結:Linear Search
影片連結:Binary Search
二分搜尋 (Binary Search) 是取 已排序資料的中間索引的值,來確認是否為要搜尋的數,若不是,則將資料以中間索引分為兩半。此時便比較待搜尋的值與中間索引的值的大小,若比較小,則選擇較小的那一半資料,反之亦然。接著再繼續從一半的資料中取中間索引的值做比較,重複以上的步驟,直到找到為止。
記得進行 Binary Search 之前,目標資料一定是已經排序好的。
當起始點大於終點時,一直被分化的陣列數量直到變成 0,代表目標物不在資料裡。

參考資料:
影片連結:Insertion Sort
可以很直覺的想像成玩撲克牌時,整理牌的方法。

影片連結:Merge Sort


參考資料:
影片連結:Selection Sort


課程連結:Command Line
不管是使用 PC(cmd 命令提示字元) 或 Mac ( Terminal 終端機),如果我們要對電腦下命令,除了一般常用的圖形化介面 GUI,也可以用輸入指令對電腦說明要做什麼動作。
例如說要進入桌面上的資料夾,我們習慣的操作是 對著該資料夾,使用滑鼠 double click。
但也可以開啟 Terminal,輸入 cd 該資料夾名稱,登愣!也可以辦到相同效果,是不是很酷呢?
以下是比較常用的指令:
ls 查看此位置的所有檔案cd 跳到指定的檔案夾
cd folder_1(只能往下查找目標資料夾)cd .. 跳到上一層資料夾cd 後面不輸入資料夾名稱,可以直接跳到根目錄pwd 查看當前的檔案夾位置mkdir 新增資料夾
mkdir newfoldercp 複製檔案
exist_file new_filecp file_1 file_2cp -r dir_1 dir_2rm 刪除檔案
rm fileyes or y,也可以強制刪除
rm -f filerm -r 刪除整個檔案夾,跟 cp 很像
rm -r dirrm -rf dirmv 重新命名
old_name new_namemv old_name new_name還有更多常用的 指令,有興趣可以自己去搜尋。

餐考資料:
課程連結:Debugging
在發生邏輯上的衝突、導致編譯發生錯誤時使用。
在下任何指令前,前面加上 help50 能夠幫助你找出錯誤的位置,或提供一些頭緒除錯。
比起 printf,eprintf 會提供是哪一行的資訊,更方便除錯。
在編譯沒問題但結果不如預期,試圖找出設計上錯誤時使用。
注意,debug50 並無法直接幫你找出錯誤,畢竟電腦不知道你想要到結果是什麼,但可以幫助你更暸解程式運行的步驟,監控變數的變化,找出在哪一個環節出錯。

function name filevariable name value type