CS50-week01-note

CS50-week01-note

Week 1 C

主要補充與彙整課程筆記
官方筆記:https://cs50.harvard.edu/x/2023/notes/1/
補充資訊來源::Chat GPT

C語言

1. 聲明式相關

1.1. 函數聲明的重要性

在C語言中,使用任何函數之前需要先聲明它,因過往年代電腦效率不佳,不能直接訪問所有函數

1.2. Type Declaration/類型聲明式

告訴編譯器變量或函數的數據類型

int x;
# 類型聲明式

1.3. 聲明變量為不可變

當下文嘗試改變此變量,會報錯無法更改

1.4. 類型聲明後下文不用再次類型聲明

  1. 當上文已經聲名過變量

     int n = 1
    
  2. 則下文之後使用都不用再次聲明數據類型

     n = 3
    

2. 養成書寫好習慣

2.1. 函數團隊協作

  • 事先溝通好每個函數模塊的輸入與輸出

2.2. 避免隱式聲明函數

聲明函數:函數沒有在頭文件內、沒有在同文件下定義的函數名稱。

  • 隱式聲明函數的例子:

    有個函數 addNumbers 來歷不明

      #include <stdio.h>
    
      int main() {
          int result = addNumbers(5, 3); // 隱式聲明 addNumbers
          printf("Result is %d\n", result);
          return 0;
      }
    
      // addNumbers 函數的定義
      int addNumbers(int a, int b) {
          return a + b;
      }
    
  • 在不包含相應頭文件的情況下,某些函數可能會被隱式聲明,但這是不安全的,因為它可能導致類型不匹配和其他錯誤。因此,使用顯式聲明包含必要的頭文件是一個好習慣。

    • Header files/頭文件:在程式的開頭的第一行中使用#include指令來包含頭文件,通常是擁有 .h 擴展名的文件,例如,#include <stdio.h>

2.3. 顯示聲明函數

有頭文件、有同文件的函數調用

  • 顯式聲明函數的例子:

      #include <stdio.h>
    
      // 顯式聲明 addNumbers
      int addNumbers(int a, int b);
    
      int main() {
          int result = addNumbers(5, 3);
          printf("Result is %d\n", result);
          return 0;
      }
    
      // addNumbers 函數的定義
      int addNumbers(int a, int b) {
          return a + b;
      }
    

3. C語言語法特性

3.1. Do-while

  • c語言特有的

  • 適用情況:

    • 至少執行一次的循環:當你需要確保循環體至少執行一次時,do-while 循環是理想的選擇。這是因為條件檢查是在循環體執行後進行的。

    • 用戶輸入驗證:在需要從用戶那裡獲取並驗證輸入直到滿足特定條件為止的情況下,do-while 循環非常有用。例如,提示用戶輸入一個有效的數字或選項。

    • 遊戲或應用程序的主循環:在某些類型的遊戲或應用程序中,do-while 循環可以用於實現主循環,直到滿足退出條件(如用戶選擇退出)。

3.2. 範例

  • 原本:

      int n = get_int("Size: ");
          while(n < 1)
          {
              n = get_int("Size: ");
          }
    
  • 使用do-while:

    先聲明變量->創建變量->檢查變量

      int n;
          do
          {
              n = get_int("Size: ");
          }
          while(n<1);
    

4. 📝Integer overflow/整數溢出

Interger 通常為32位元/bit,當超出時就會發生截斷。

  • 截斷:非預期結果可能是負數或其他

  • 原因:RAM內存量不足

  • 有限數量的位/bit:在一定範圍表示某個數,總會有到一個點把所有位用光

4.1. 🔎解決

使用 long 通常為64位元(bit)

  • 改成long類型聲明式

      long n = 400000000
    
  • 佔位符

      %li
    

5. 浮點數

  • 佔位符

      %.20f
    

5.1. Type casting/類型轉換

  • 適用於當運算結果需要小數點

      float n = (float)x / (float)y
    

5.2. 📝浮點數不精準性

  • RAM不足

5.3. 🔎解決

  • 使用 double 類型

6. 佔位符

  • %s:在這裡插入某個str值

  • %%:輸出%的語法

  • %.2f:浮點數(小數點)的佔位符