---
# System prepended metadata

title: 程式期末考大抄 Part 1

---

# 程式期末考大抄 Part 1 
---
本站網址：https://reurl.cc/6DpOmr
:point_right:[筆試專區](/ukFE3unlRdKS-V5mDLdpmQ)
:point_right:[課堂作業解答](https://hackmd.io/@YuXin/資訊課)
~~記得寄本站網址到自己學校email嘿~~~

---

## 程式起手式
1. 程式碼
``` cpp= 
#include<iostream>
using namespace std;
int main(){
    
    return 0;
}
```
2. 檔名

    如果你的程式沒有變色，請記得更改副檔名
    
   -  Code::Block
    
        File :arrow_right: New :arrow_right: Empty file :arrow_right:
    
        File :arrow_right: Save file as... :arrow_right: 檔名.cpp
    
    
    - Moddle
    
        點開題目 :arrow_right: 看描述(有趣der題目) :arrow_right:
    
        ==檔名.cpp== :arrow_right: 把程式貼上來 :arrow_right: 按儲存 :arrow_right: 送出(點打勾那邊)

## 型態&符號

### 常見符號

| 符號 |  =   |  ==  |   !=   |     &&      |     \|\|     |   %    |
|:----:|:----:|:----:|:------:|:-----------:|:------------:|:------:|
| 舉例 | a=5  | a==5 |  a!=1  | a>0 && a<10 | a>5 \|\|a<-3 |  a%10  |
| 意思 | 賦值 | 判斷 | 不等於 |   且(and)   |    或(or)    | 取餘數 |

### 常見型態

| 型態 | int  | float  |    double    | string  | char | bool   |
|:----:|:----:|:------:|:------------:|:-------:|:----:| ------ |
| 舉例 |  5   |  5.5   | 5.5555555555 | "Hello" | 'H'  | true   |
| 意思 | 整數 | 浮點數 |    長小數    |  字串   | 字元 | 布林值 |

### bool值
(看不懂可略)
- 解釋：布林值是一種型態，只能表示true(1)或false(0)
- 常見應用
1. 表示判斷結果
    - 範例
    a==5：若a的值等於5則回傳true(1)，a的值不等於5則回傳false(0)
    a!=5：若a的值不等於5則回傳true(1)，a的值等於5則回傳false(0)
2. 非0即為true(1)
++數字的布林型態：非0的數字轉為bool型態皆為1++
    - 範例
        >2 -> true
        10 -> true  
        -4 -> true
         0 -> false
### %
- 意義：取餘數
- 範例
    > 26%10=6
    - 解釋：26除以10等於2餘6，故取餘數的結果為6
- 常見應用
1. 任何數%10可得個位數
    - 範例
    >123%10=3
    - 解釋：123的個位數為3
2. 任何數%2為0，即為偶數
    -  範例
    >48%2==0
    - 解釋：48為偶數
5. 若a%b為0，則a為b的倍數，b為a的因數
### /
- 解釋：除(只取整數部分) 
- 範例
>5/2=2
>40/3=13
>30/7=4
## 判斷式(if)
1. 語法
``` cpp=
if(條件1){
    //條件1成立時做的事情
}
else if(條件2){
    //條件2成立時做的事情
}
else{
   //條件皆不成立時做的事情 
}
```

- 流程圖
    
     ``` flow
        st=>start: 開始
        e=>end: 結束
        cond=>condition: if(條件一)
        op2=>operation: {事件一...}
        cond1=>condition: else if(條件二)
        op3=>operation: {事件二...}
        op4=>operation: else {事件三...}
        st->cond
        cond(yes)->op2->e
        cond(no)->cond1
        cond1(yes)->op3->e
        cond1(no)->op4->e
    ```
:::info
++注意++
1. else裡面不可以有條件
~~else(條件)~~
3. else if前一定要有if
 else不可單獨存在
 
    :O: if->else if->else

    :O:if->else

    :X:else if -> else
    
    :X:else

:::

##  迴圈

### for迴圈
1. 語法

概念
```cpp=
for(初始設定;繼續條件;遞增或遞減動作){
    
}
```
範例
```cpp=
for(int i=0; i<2; i=i+1){
    //i<2條件成立時做的事情
}
```
說明
++初始設定++變數i的值為0 ==(i=0)==

接著判斷 ++繼續條件++ ++i<2++成立，因此執行迴圈中的動作，並執行++遞增動作++(i=1+1)，此時==i=1==(0+1=1)

重複判斷 ++繼續條件++ ++i<2++成立，因此執行迴圈中的動作，並執行++遞增動作++(i=i+1)，此時==i=2==(1+1=2)

重複判斷++繼續條件++ ++i<2++不成立(2<2不成立)，故離開迴圈，迴圈總共執行二次
### while迴圈
1. 語法

概念
```cpp=
while(條件成立 或 bool值為true){
    //條件成立時做的事情
}
```
while迴圈的進入條件是小括號內回傳布林值true，因此若判斷條件成立即可進入；另一種應用則是在小括號中丟入變數判斷其布林型態是否為true以進入迴圈。


:::info
while迴圈最需要注意的是如何離開迴圈，應避免寫成無窮迴圈(永遠無法離開)
:::
範例
```cpp=
i=2
while(i>0){
    //i>0條件成立時要做的事情
    i=i-1;
}
```
解釋
一開始設立變數i並將值設為2(==i=2==)
接著進入while迴圈：
  判斷(2>0)條件成立 -> 執行迴圈內重複動作 -> 改變i值，讓迴圈有離開的可能性或條件==i=1==(2-1=1) 
重複判斷(1>0)條件成立->執行迴圈內重複動作->改變i值，讓迴圈有離開的可能性或條件==i=0==(1-1=0) 
重複判斷(0>0)條件不成立->離開迴圈
迴圈總共執行了兩次
:exclamation:一定要確定迴圈有可能離開喔，不然電腦會當掉:exclamation:

2. 應用
從上面的範例來看while迴圈跟for迴圈是可以互相替代的。下面就介紹一些只能用while迴圈寫的例子

- 特意設計的無窮迴圈
    - e.g.老師的作業5-2、5-3
    - 大概的題目敘述：直到輸入0結束、不知道有幾筆輸入、猜數字
    寫法一
    ```cpp=
    int input;
    while(cin>>input){
        if(input==0) break;
        else{
            //該做的事情
        }
    }
    ```
    寫法二
    ```cpp=
    int input;
    while(1){
        cin>>input;
        if(input==0) break;
        //該做的事情
        
    }
    ```
    解釋
    1. while(1)就是永遠成立的意思，也可以寫成while(true)
    2. if裡面放跳出迴圈的條件(上述是值到輸入0的範例寫法)

## 其他小技巧

### 判斷因倍數
- 因數判斷
判斷a是否為2的倍數
```cpp=
if(a%2==0){
    //a是2的倍數
}
else{
    //a非2的倍數
}
```
說明：
若a為2的倍數，則a/2的餘數必為0，故可由此判斷倍數關係

- 因數判斷
判斷a是否為100的因數
```cpp=
if(100%a==0){
    //a是100的因數
}
else{
    //a不是100的因數
}
```
說明
若a為100的因數，則100/a的餘數必為0，故可由此判斷因數關係
### 拆解個位數
- 拆解26的個位數
```cpp=
a=26;
ans=a%10;
cout<<ans<<'\n';
```
輸出
> 6
- 若要將123456789拆解成1+2+3+4+5+6+7+8+9可以醬寫
```cpp=  
  int a=123456789;
  int ans=0;
  while(a>0){
    ans+=(a%10);
    a=a/10;
  }
  cout<<ans<<'\n';
```
輸出
> 45

說明：我們在不知道有幾位數的情況下通常會從個位數開始拆。前面講過%10可以取出個位數，因此不斷取個位數再除10(捨去餘數)就可以得到答案

### debug

- 找不到bug可以試著把變數印出來看看他在幹嘛
- 檢查迴圈跟仔細看題目
- 就醬

----
本站網址：https://reurl.cc/6DpOmr ![](https://i.imgur.com/49x9Y3h.png)

----

