【CS50x(2022)】 Week1 - C
第一次接觸 C,發現不同程式語言的寫作邏輯其實還是差不多的,差別在於較古老的語言在「便利性」上比較沒有那麼人性化。
課程內容
- C
- IDEs, compilers, interfaces
- Functions, arguments, return values, variables
- main, header files, commands
- Types, format codes, operators
- Variables, syntactic sugar
- Calculations
- Conditionals, Boolean expressions
- Loops, functions
- Mario
- Imprecision, overflow
用 C 學習程式寫作基礎
本週開始接觸到新的語言 C。
上週用圖像化的 Scratch 來講解程式運作原理,這週承襲上週範例使用同樣的運作流程,只是改用 C 把它寫出來。
C 是一個相對古老的語言,所以他在寫作方式上並不像較新的語言那樣簡潔。比如:
- 請使用者輸入名字
- 在螢幕上印出
Hello, 名字
1 |
|
JavaScript 只用一個變數儲存使用者的輸入值,然後輸出時套用即可。
1 |
|
用 C 寫就比較辛苦了,因為 C 必須要把每件事都寫得很清楚:
- 因為需要在螢幕上輸出內容,所以需要
#include <stdio.h>
。 - 要用到向使用者拿輸入內容的函式
get_string
,所以需要#include <cs50.h>
。(這還是 CS50 的員工寫出來的 library ,不然可能更麻煩 😅) - 主程式內容需用
int main(void){}
包覆。 - 每個變數要在宣告時就定義好它的 data type。
- 用
%
引用變數值,並要清楚定義這個值的 data type。
因為先學了 JavaScript 才接觸到 C,所以寫作的過程相當不習慣、覺得很麻煩。但是在練習中不斷的除錯、除錯、再除錯,漸漸地發現這樣嚴謹的寫法練習很重要!因為在寫作過程中,必須每時每刻都很清楚自己正在用什麼、需要用什麼,一旦漏掉某個部分,可能就會炸出一堆錯誤訊息。
作業練習 (Problem Set 1)
CS50x 課程提供了一個完整的線上 codespace,依照教學做完初次設定,之後就可以打開即寫了,成果測試和作業提交也相當方便。
第一次接觸 C 語言就一口氣來了5個作業練習(其實應該算3個,其中2題是難易二選一就好,但我龜毛,想達成100%成就!)
- Hello.c
就是上面提到的範例。練習輸入、輸出、 header files、comments - Mario-less.c
do while 迴圈、nesting for loop - Mario-more.c
do while.c 迴圈、nesting for loop,比上一題再複雜一點。 - Cash.c
do while 迴圈、function。C 的 function 很特別,要在最開頭決定 return type(或 void),引入的參數 type 也要定好。 - Credit.c
do while 迴圈、if/else、while loop,是上一題的進階。
寫了差不多整整一天,雖然不是用最有效率的做法答題,但主要就是想用這週課堂學到的方式解題。練習量大的成果就是能「體會」上課內容到底在說什麼東西,但寫完之後覺得還需要重新把課程補充資料看過一遍做個複習。
提升 Coding 品質
除了 C 的教學外,講師也有一再探討怎麼樣才是好的 code design。Coding 分三個階段:
- correctness: 要能正確的解決問題。
- design: 包含變數的設計、減少重複的程式碼、提高程式碼再使用率、維護便利性…等。
- style: 整體規格要有一致性、並提高閱讀便利性,盡可能整齊、簡潔明瞭。
小結
上了兩週的進度了,覺得課程的講解方式還算容易吸收,練習量也多。作業是需要在懂得前提下認真思考才能寫出來,對訓練思考邏輯很有幫助!
相關文章: CS50x(2022)
文章內容如有錯誤,歡迎留言討論!
本 Blog 上的所有文章除特别聲明外,均採用 CC BY-SA 4.0 協議 ,轉載請註明出處!