/ 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 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

fumitsuki

文月

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

Read More