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方法呼叫方法的話會產生錯誤,因為編譯器沒有先編譯到方法就呼叫了。
解決方法
- 把方法寫在main方法前面,但這樣排列會很混亂。main方法是我們會一直關心的排在後面會很麻煩。
- 在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。