【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 是一個相對古老的語言,所以他在寫作方式上並不像較新的語言那樣簡潔。比如:

  1. 請使用者輸入名字
  2. 在螢幕上印出 Hello, 名字
1
2
3
//  用 JavaScript 寫
name = prompt("Enter your name: ")
console.log(`Hello, ${name}`)

JavaScript 只用一個變數儲存使用者的輸入值,然後輸出時套用即可。

1
2
3
4
5
6
7
8
9
// 用 C 寫
#include <stdio.h>
#include <cs50.h>

int main(void)
{
string name = get_string("Enter your name: ");
printf("hello, %s\n", name);
}

用 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 協議 ,轉載請註明出處!