/ CS50

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 truefalse
字元 char 單個 ASCII 字元,例如 a2
雙精度浮點數 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

fumitsuki

文月

擅長耍雷的フレンズ,在茫茫海海探索人生中