---
# System prepended metadata

title: 承上章：for迴圈、比較跟邏輯運算子

---

# 承上章：for迴圈、比較跟邏輯運算子
- 設計程式的步驟
    - 以小遊戲為例
        - 先訂出目標跟功能
- const常數
    ```C=
    const int anwser=6;
    ```
    - 相對於變數
    - 優點
        - 保險，不會被動到
        - 固定住節省CPU資源
            - 這個好習慣
            - 延伸閱讀：前置處理器？
- 多重條件（巢狀）新手不要常用
- 我如何同時有兩個條件
```c=
else if (guess <=9 && guess >= 7){
    ...
}
```
- 正確製作迴圈程式
    - 先做好外圍最後才輸入{}內的內容
- 迴圈式：loop 重複執行一段程式的語法
    - C語言中又有兩種迴圈（JAVA三種）
        - **計次型**
            - 可以明顯算出重複次數的迴圈
```c=
for(計次的起點;繼續重複的條件;計次變化的方式){
    要重複的程式碼
}
```
使用場合：假設我要印ABC 10次
**初學者寫法**
```C=
puts("ABC");
puts("ABC");
puts("ABC");
puts("ABC");
puts("ABC");
puts("ABC");
puts("ABC");
puts("ABC");
puts("ABC");
puts("ABC");
```
**記次寫法**
做一個+1計數器吧
```c=
int counter;
for( counter = 1 ; counter <= 10 ; counter = counter + 1 ){
/*code here*/
}
```
- `=`是賦值
- 改`counter <= 數字`就能指定次數
- 要小心死亡迴圈 如`count - 1`
    - 電腦會當機嗎
    - int的範圍：-2,147,483,648 至2,147,483,647
    - PS：小算盤現在有給程式設計師的功能
    - 溢位
- 不要做不會開始的迴圈例如`counter=11`
- 還能印出次數 在code here寫入：
```c=
printf("我印了%d次", counter);
```
- `gcc -c *.c -std=c99`可以跟換標準
    - 有些小差異，例如在上方`for(`後方加上`int`的可行性
- `windows.h`中`Sleep()`語法可以指定停止秒數
    - 注意單位為毫秒，填入1000為1秒
    - Mac的標頭檔用`unistd.h`Unix標準標頭檔，單位為秒數
        - 由於gcc移植自Unix，所以Windows也能用
- 一種寫法
```c=
int anwser=0;...
```
```c=
for(...){
    answer = answer + counter;
    }
printf("%d",answer);
```
老師的範例
```c=
#include <stdio.h>
#include <windows.h>

int main(){

    int counter;
    int answer = 0;
    for(counter = 1 ; counter <= 10 ; counter = counter + 1){
        printf("----現在進行第%d圈----\n", counter);
        printf("計算前:answer=%d\n", answer);
        answer = answer + counter;
        printf("計算後:answer=%d\n", answer);
        printf("----第%d圈執行結束----\n\n", counter);
        Sleep(5000);
    }
    printf("1+2+3+.....+10=%d\n", answer);
    puts("--------OVER--------");
    return 0;
}
```
題目：改幾個地方變成0~100中3的倍數相加
解答：改成`count+3` （這題答案是1683）
```C=
#include <stdio.h>

int main(){

    int counter;
    int answer = 0;
    for(counter = 0 ; counter < 100 ; counter = counter + 3){
        answer = answer + counter;
    }
    printf("3+6+9.....+99=%d\n", answer);
    return 0;
}
```
更好的寫法(正統)
```c=
  for(counter = 0 ; counter < 100 ; ++counter){  //counter = counter + 1 ===> counter++(跟++counter功能一樣)
       
        if(counter % 3 == 0){
            answer += counter; // answer = answer + counter
        }
```
- 疑惑
    - counter++意思是同counter+1吧
    - 但是被下方if迴圈作用掉了
        - 當counter是3的倍數時才會加，反之會被忽略