2017哈佛CS50第一堂

  • 268
  • 0

CS50 2017 - Lecture 1 - C 的重點

  • C是所有程式語言的基礎
  • CS50的課程主要是學習計算機科學的基礎知識

觀眾提問:為甚麼for迴圈的第三個參數會是(i++)會使用兩個加號。

答:因為這一個參數的輸入並沒有要做兩個數字的加減乘除,而只是要數字單純加一而已。而人們決定以++來表示是因為剛好++這個詞沒有其他意思所以就拿來用。

原始碼(Source code):當我們在寫一般的程式碼如C語言等等。

機器碼(Machine code):二進制,CPU看得懂的語言。

單是在寫程式的過程中如何把原始碼轉換成機器碼,這個時候我們就要編譯器(compiler)

CS50 IDE 使用

  • C語言的副檔名都是c

CS50 IDE的使用流程

  • 檔案打完後要存檔,到下方workspace下打入clang 檔名。clang是C語言的編譯器名稱。
  • 編譯完後會出現a.out這個檔案就是機器碼,電腦看得懂的二進制檔案。
  • 在workspace下打入./a.out 就可以執行了 。.代表當前資料夾位置 

IDE的使用小技巧

clang -o hello hello.c 以hello.c檔案輸出hello的機器碼。
ls 列出資料夾的所有檔案(如果檔案有*表示可以執行)
rmdir pset1 刪除pset1資料夾

要得到使用者輸入時可以打get_int() get_string() get_float() 等方法,但必須引入 #includ  <cs50.h>

  • 如果兩個int 的數經過計算答案介在0到1之間,那麼輸出就會是0。因為是int只顯示整數,小數部分都刪除。例如 1/2為0.5 但輸出會是0。
  • 兩個單引號用來裝單個字節 如'a',兩個雙引號用來裝長一點的字串 如"abc"。

如果方法放在main方法之後且在main方法呼叫方法的話會產生錯誤,因為編譯器沒有先編譯到方法就呼叫了。

解決方法

  1. 把方法寫在main方法前面,但這樣排列會很混亂。main方法是我們會一直關心的排在後面會很麻煩。
  2. 在main方法之前打上方法的第一行,這樣編譯器就會知道等等會用到這個了
#include <cs50.h>
#include <stdio.h>

int square(int n)

int main(void)
{
    int x = get_int("x: ")
    printf("%i\n",square(x));
}

int square(int n)
{
    return n * n;
}
  • 記憶體:當你在執行程序的時候用來暫存機器碼0跟1的東西
  • 整數溢位:所有的位數都滿的時候就會全部變成0。如 有一個四位元的數 1111 再加上1時應該變成10000 但只有四位元。結果變成0000。