Oh! You closed up the window, so you cannot see raining

[CS50] Lec 1 - C

C 當我們要去評價程式碼的品質時,我們會考慮以下元素: 正確性(correctness): 程式碼是否有正確的解決我們的問題 設計(design): 程式碼的好壞決定於它的效率與可讀性 風格(style): 程式碼在視覺上是否有良好的format 我們的第一個 C 語言程式: #include <stdio.h> int main(void) { printf("hello, world\n"); } 整合開發環境、編譯器、介面 IDEs, compilers, interfaces 在執行程式前,我們必須將程式碼轉變成電腦可讀的 binary codes,也就是 0 與 1。 IDE(integrated development environments) 可以協助我們開發、編譯程式碼。如Visual Studio Code 我們撰寫的程式碼為開源碼(source code),我們必須將他轉變成機器碼(machine code),才能被電腦執行。 編譯器(compiler)是將一種語言轉變成另一種語言的程式,例如將開源碼編譯成機器碼。 在 IDE 中,我們可以在一個叫作 terminal 的視窗中輸入指令。 terminal 提供了 command-line interface(CLI) 當我們輸入 make hello,會產生一個叫作 hello 的檔案,我們可以透過輸入 ./hello 執行它。 . 代表當下的目錄,上面的指令代表我們要執行當下目錄中叫作 hello 的檔案。 hello 即是內含機器碼的檔案。 欲刪除檔案可以用 rm 指令。 輸入 ls 列出當下目錄所包含的檔案。 若源碼檔經過修過,則必須重新編譯,才能對執行檔進行修改。 函式、引數、傳回值、變數 Functions, Arguments, Return Values, Variables printf("Hello, world"); 此處,介紹一個叫作 printf 的函數 f 代表 formatted 的字串。字串是多個字元(characters)組成的字詞,在 C 中,我們需要用雙引號("")來包住它。 括號 () 使我們可以輸入引數,也就是 printf 函數的 input。 最後,我們需要分號 ;,來宣告述句的結束。 其中,函式的一種產物叫作 side effect,也就是我們可以觀察到的變化,如螢幕印出字樣,或是發出聲響。 相比與 **side effects,我們也可以將函式的回傳值用於程式中,回傳值通被儲存於變數中。 string answer = get_string("What's your name? "); 此處,示範 CS50 IDE 中的一個函數。 這裡的 get_string為函式,而What's your name? 為引數。 然後,我們可以將回傳值存入到變數中,以上例,我們可利用賦值運算子(=)將右值(r_value)傳給左值(l_value)的answer。 最後,我們宣告變數的變數型別(type)。 如果我們嘗試將上述的變數改為其他變數型別,編譯器會顯示錯誤。 printf("Hello, world\n"); 我們此處為了換行,而使用了 escape sequence \n。

<span title='2022-03-10 02:39:12 +0800 +0800'>March 10, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Rain Hu
Oh! You closed up the window, so you cannot see raining

[CS50] Lec 0 - Introduction to Computer Science

什麼是 Computer Science(CS)? CS 意在解決問題,更精準地說,是將問題 (input) 轉換成答案 (output) 的過程。 在計算機的世界,為了表達 inputs 和 outputs,我們必須將資訊標準化來儲存與操作它們,因為計算機只讀得懂 0 與 1 (開路/通路)。 如何表達數字? 在人類的世界,人們使用十進制(Decimal)。 在計算機的世界,用的是二進制(Binary),也就是 0 與 1。 \(1+1=10\) \((1,2,3,4,5,6,7,…)_{10}=(001,010,011,100,101,110,111,…)_2\) 每個二進制的位元(digit)稱為 bit。 在現代計算機結構中,是由數以億計的電晶體(transistors)所組成的。 電晶體是一種具有開關(switch)性質的邏輯元件。 大部分的計算機一次用 8 個 bits,或稱 1 bytes,來表達數字。 \(8 \text{bits}=1 \text{bytes}\) 如何表達文字? 要表達文字,只需將不同的字元定義到對應的數字即可。 ASCII,American Standard Code for Information Interchange,即是一種基於拉丁字母的編碼系統,可應用顯示現代英語。 A->65, B->66, …etc a->97, b->98, …etc H->72, I->73, !->33, so HI!=72, 73, 33 在不同語言,有不同的字符,就必須定義新的編碼系統,來容納更多的字符。 如 Unicode。 如 emojo 顏文字也是一種字符。 如何表達顏色? 同理,可以把不同的數字定義給不同的顏色,其中最常見的就是 RGB 系統。 由紅綠藍色塊所組成。 紅、綠、藍又個別以 8 bits 儲存的 256 種不同層度的顏色強度表示。 一共由 24 bits 來表達,超過1百萬種顏色。 那圖案、影片、音樂呢? 圖案是由數以萬計的色塊(dots)所組成,在螢幕顯示器上我們稱作畫素(pixels)。 影片則是由連續的圖案經由連續播放所建構而成的。 音樂同樣可以用 bits 來表達,其中 MIDI 是一種用數字來表達音符的形式。 All are composed by 0 and 1 in the computer world. ...

<span title='2022-02-23 00:43:18 +0800 +0800'>February 23, 2022</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Rain Hu