CS50 筆記:第一講 C
筆記前言
本章主要在講 c 的 syntax ,最基本的資料型別、if、迴圈等等。 有趣的是他拿 scratch 的元件來跟 c 對比。 如果已經有程式相關的基礎知識,這章其實可以跳過w
Lecture 1
英文講義:https://cs50.harvard.edu/college/2020/fall/notes/1
寫程式需要注意的三個面向:
- correctness: 執行結果正確如預期
- well-designed: 效率好,沒有多做不該做的 work
- well-styled: 好的 style 才能增加可讀性
hello world in C
CS50 IDE
https://ide.cs50.io/
- 看起來是被 AWS 買走的 cloud 9 (這是 AWS 贊助嗎,有錢真好w)
- 相當於在操作一台遠端的機器
- 視窗畫面主要包含 text editor 跟 terminal window 兩個部分
source code / machine code
第一隻 C 小程式:
#include <stdio.h>
int main(void) {
printf("hello, world");
}
像這樣人類還可以理解閱讀的 code 叫做 source code。然而電腦只看得懂 0 跟 1,所以我們需要另一個程式來把 source code 轉換成 machine code。
Scratch to C
function
printf 相當於 scratch 的 say block,這裡的 f 代表 formatted(使用像是 %s
這樣的 format code)。像這樣一小段可以運作的小程式就叫 function
argument -> function -> output
function 的 output 通常有兩種:
(1) side effects
像 say block 跟 printf 會印出東西來的行為算是 side effect。
(2) return values / variables
給你一個回傳值,讓你可以接起來繼續運用。例如 scratch 的 ask block,接住使用者輸入的內容之後把值傳回去給你。
assignment
=
非數學裡面的相等之意,在這裡叫 assignment
semicolon
syntax 的一部分,一開始忘記打常常會 debug 找半天,別讓他挫折你w
main 函式
總之先把它當成 scratch 的 start block
header files
副檔名為 h 的檔案,像範例中的 cs50 library 用 scratch 的 extension 相當於在 c 裡加 header file
CS50 工具
- help50:編譯錯誤解釋小工具,給你比 compiler 還要人性化一點的說明
$ help50 make hello
- style50:調整 coding style 的工具
- check50:跑測資的工具
data types
資料型別可以讓電腦知道怎麼解析這些 data
中文名稱 | Data Type | 說明 |
---|---|---|
布林值 | bool | true 或 false |
字元 | char | 單個 ASCII 字元,例如 a 或 2 |
雙精度浮點數 | double | 浮點數,比 float 更精確,小數點後面更多位 |
單精度浮點數 | float | 浮點數 |
整數 | int | 可以儲存特定大小以內的整數數字 |
長整數 | long | 用了更多 bits,比 int 可以放更大的數字 |
字串 | string | 一串字元 |
operators
+
: 加法-
: 減法*
: 乘法/
: 除法%
: 求餘數
選擇結構(if)
if (x < y)
{
printf("x is less than y\n");
}
else if (x > y)
{
printf("x is greater than y\n");
}
else if (x == y)
{
printf("x is equal to y\n");
}
重複結構
-
while 迴圈
int i = 0; while (i < 50) { printf("hello, world\n"); i++; }
-
for 迴圈
for (int i = 0; i < 50; i++) { printf("hello, world\n"); }
float limitation, integer overflow
舉例來說 三個燈泡(相當於3個 bits)可以表示大的數字為 7 (111),當他再進味的時候會變成 (1000),但因為只有 3 個 bits,所以等於回到 0 (000)。
當試圖放入 int 的數字大於他可以表示的最大範圍時也會發生這種現象,這就叫 overflow