流程控制敘述


  1. 請參考 randwalk.c.
  2. 作業: 作最少的修改, 讓 randwalk.c 可在 DOS 及 Windows 底下執行.
  3. C 中的「是非」: 0, 0.0, \0 為非, 其他皆為是.
  4. 數字比較: <= < > >= == !=
  5. 複合條件 (and or not): && || !
  6. 指令語法
    1. if ( ... ) { ... }
    2. if ( ... ) { ... } else { ... }
      縮格非常重要! 尤其是疊在一起的 if
    3. while ( ... ) { ... }
    4. for (初始設定; 繼續條件; 每次更新) { ... }
      相當於
                    初始設定;
                      while (繼續條件) {
                          ...         /* 可以是空敘述, 要小心! */
                          每次更新;
                      }
        
      

      C/C++ 的計數習慣: 0, 1, 2, ... n-1
    5. do { ... } while ( ... );
    6. switch (...) { ... }
      只有 char, int, enum 及類似簡單型別可以作為 switch 的運算式/標籤. 標籤不可重複. 好習慣: 每個 case 子句最後不是 break 就是一串提醒讀者 "fall through" 的註解. ("繼續執行下一個 case 的指令!")
    7. break;
      跳出最內層的 for, while, do, 或 switch.
    8. continue;
      跳最內層的 for, while, do 的右括弧之前, 所以不論是在 那一種迴圈中執行到 continue, 都會跳到條件測試處.
    9. return;
  7. 只有一個指令時可以不要有 { }, 但寫出來永遠不會有錯
  8. 留意 strcmp 的語意 -- if (strcmp(...)) "如果 _不_ 相等"
  9. 特別注意不要把「比較是否相等」寫成「指定值」, 例如: if (x=3) { ... } 語法正確, 語意可疑
  10. 作業:
    1. 計算 x 的 n 次方, 例如 "a.out 3 4" 印出 81, "a.out 5 -2" 印出 0.04, "a.out 1.2 3" 印出 1.728 (使用到 atof() 函數). 用 if 及兩個迴圈可以分別處理指數是正數及負數的狀況. 可以只用一個迴圈嗎?
    2. 印出 n 的 二進位值, 例如 "a.out 13" 印出 1101, "a.out 37" 印出 100101. 用到整數的除法 / 及餘數的計算 %. 用到陣列變數.
    3. 以 n 的二進位值快速計算 x 的 n 次方. 例: x^34 = x^32 * x^2, 而 x^32 = x^16 * x^16, ...