---
# System prepended metadata

title: 第三堂社課

---

# 第三堂社課

---

## 複習

----

## C++的架構
```cpp=
#include<iostream>
using namespace std;

int main(){
    //你的主程式寫在這裡
    
    
}
```

----

## 資料型別
| 名稱 | 儲存值 | 例子 |
| -------- | -------- | -------- |
| int | 整數 | 1 |
| float | 浮點數(小數) | 1.1 |
| bool | 布林值(1或0) | true |
| char | 字母 | a |
| string | 字串 | XiaoChengYi |

----

## 變數的宣告與定義
```cpp=
#include<iostream>
using namespace std;
int main(){
    int a;
    int b=2;
    int c=3,d=4;
    double e=3.1415926;
    char f='f';
    bool g=true;
}
```

----

## 算術運算子
| 運算子 | 用途 | 範例 |
|:------:| :----: | :----: |
| + | 將左值加上右值 | ```a=3+2``` |
| - | 將左值減去右值 | ```a=3-2``` |
| * | 將左值乘上右值 | ```a=3*2``` |
| / | 將左值除以右值 | ```a=3/2``` |
| % | 取左值除以右值的餘數 | ```a=3%2``` |

----

## 算術運算子的範例
```cpp=
#include<iostream>
using namespace std;
int main(){
    int a=10;
    int b=a+2;//b=12
    int c=a-2;//c=8
    int d=a*2;//d=20
    int e=a/2;//e=5
    int f=a%2;//f=0
}
```

----

## 指定運算子
| 運算子 | 用途 |
|:------:| :----: |
| += | 將變數值加上右值再賦予於變數 |
| -= | 將變數值減去右值再賦予於變數 |
| ＊= | 將變數值乘上右值再賦予於變數 |
| /= | 將變數值除以右值再賦予於變數 |
| %= | 取變數值除以右值的餘數賦予於變數 | 

----

## 指定運算子的範例
```cpp=
#include<iostream>
using namespace std;
int main(){
    int a=10,b=10,c=10,d=10,e=10;
    a+=2;//a=12;
    b-=2;//b=8
    c*=2;//c=20
    d/=2;//d=5
    e%=2;//e=0
}
```

----

## 輸入輸出
```cpp=
#include<iostream>
using namespace std;
int main(){
    int a,b;
    cin>>a>>b;
    //使用萃取運算子>>連結cin與各個要輸入的變數名稱
    cout<<a<<'+'<<b<<'='<<a+b;
    //使用插入運算子連結cout與各個要輸出的值
}
```

----

## 關係運算子
| 符號 | 意義 | 例子 |
| :--------: | :--------: | :--------: |
| > | 大於 | 2>1(true) |
| < | 小於 | 2<1(false) |
| >= | 大於等於 | 2>=1(true) |
| <= | 小於等於 | 2<=1(false) |
| == | 等於 | 2==1(false) |
| != | 不等於 | 2!=1(true) |

----

## 邏輯運算子
| 符號 | 意義 | 例子 |
| :--------: | :--------: | :--------: |
| && | 且 | 2>1&&2<1(false) |
| \|\| | 或 | 2>1\|\|2<1(true) |
| ! | 相反 | !(2<1)(true)|

----

## if...else...判斷式
```cpp=
if(條件1){
    //陳述 
}
else if(條件2){
    //陳述
}
else{
    //陳述
}
```

----

## switch...case...判斷式
```cpp=
switch (變數/運算式) {
    case 值1:
        //陳述
        break;
    case 值2:
        //陳述
        break;
    default:
        //陳述
        break;//可省略 
}
```

---

## 複習小測驗

請登入zerojudge，在進入我們社課的課程就可以看到一個複習小測驗，前三名有獎勵喔!

---

## 迴圈

----

## 迴圈的意義
當相同效果的程式重複很多遍時，將他濃縮成一個可以一直重複的邏輯，便於更好的去撰寫與理解程式

----

## 從1輸出到100(不用迴圈)
```cpp=
#include<iostream>
using namespace std;
int main(){
    cout<<1<<2<<3<<4<<5<<6<<7<<8<<9<<10<<11<<12<<13<<14<<15<<16<<17<<18<<19<<20<<21<<22<<23<<24<<25<<26<<27<<28<<29<<30<<31<<32<<33<<34<<35<<36<<37<<38<<39<<40<<41<<42<<43<<44<<45<<46<<47<<48<<49<<50<<51<<52<<53<<54<<55<<56<<57<<58<<59<<60<<61<<62<<63<<64<<65<<66<<67<<68<<69<<70<<71<<72<<73<<74<<75<<76<<77<<78<<79<<80<<81<<82<<83<<84<<85<<86<<87<<88<<89<<90<<91<<92<<93<<94<<95<<96<<97<<98<<99<<100;
}
```

實測用手打，真的很麻煩

----

## 從1輸出到100(用迴圈)
```cpp=
#include<iostream>
using namespace std;
int main(){
    for(int i=1;i<=100;i++)cout<<i;
}
```
簡潔 有力 好懂

---

## 遞增(```++```)和遞減(```--```)運算子

----

## 遞增(```++```)和遞減(```--```)運算子
當我們想要使某個整數變數遞增或遞減時，我們可以用a=a+1或a=a-1，更簡潔的，也可以用a+=1以及a-=1，但遞增與遞減運算子更為簡潔明瞭:a++、++a和a- -、- -a。

----

## 遞增(```++```)與遞減(```--```)運算子的範例

```cpp=
#include<iostream>
using namespace std;
int main(){
    int a=1;//a=1
    a++;
    cout<<a;//a=2
    ++a;
    cout<<a;//a=3
    a--;
    cout<<a;//a=2
    --a;
    cout<<a;//a=1
}
```

----

## 前置(```++a```)與後置(```a++```)的區別
其實沒啥區別。
但在運算上會有些許的不同:
```cpp=
int a,count=5;
a=count+++5;//a=10
/*
a+=count+5;//count=5,a=5+5=10
++count;//count=5+1=6
*/
```
```cpp=
int a,count=5;
a=++count+5;//a=11
/*
++count;//count=5+1=6
a+=count+5//count=6,a=6+5=11
*/
```

----

## 前置(```++a```)與後置(```a++```)的區別
但如果加上了括號就又不一樣了:
```cpp=
int a,count=5;
a=(count++)+5;//a=11
/*
先執行括號內的內容
++count;//count=5+1=6
a+=count+5//count=6,a=6+5=11
*/
```

----

## 遞增與遞減運算子的應用

遞增與遞減運算子最常出現的地方莫過於迴圈了，而很少使用在運算裡面，所以剛剛的部分其實不太理解也不太需要去理解，只要避免這樣寫就可以了(我寫題目到現在從來沒遇到過一定要這樣寫的題目)

---

## for 迴圈

----

## 基本語法
```cpp=
for (初始;判斷;運算) {
    陳述句;
}
```
初始:只在進入迴圈時執行
判斷:判斷是否繼續迴圈
運算:每次一個迴圈循環後執行

----

## 範例
```cpp=
#include<iostream>
using namespace std;
int main(){
    for(int i=0;i<10;i++){
        cout<<i<<endl;
    }
}
```

----

## 範例(更簡潔)
```cpp=
#include<iostream>
using namespace std;
int main(){
    for(int i=0;i<10;i++)cout<<i<<endl;
}
```
**請注意:只有陳述句為一行時，大括號{}才可以省略**

---

## while 迴圈

----

## 基本語法
```cpp=
while(判斷) {
    陳述句;
}
```
判斷:判斷是否繼續迴圈

----

## 範例
```cpp=
#include<iostream>
using namespace std;
int main(){
    int i=0;
    while(i<10){
        cout<<i++<<endl;
    }
}
```

----

## 範例(更簡潔)
```cpp=
#include<iostream>
using namespace std;
int main(){
    int i=0;
    while(i<10)cout<<i++<<endl;
}
```
**請注意:只有陳述句為一行時，大括號{}才可以省略**

---

## do...while 迴圈

----

## 基本語法
```cpp=
do{
    陳述句;
}while(判斷);
```
判斷:判斷是否繼續迴圈

----

## 範例
```cpp=
#include<iostream>
using namespace std;
int main(){
    int i=0;
    do{
        cout<<i++<<endl;
    }while(i<10);
}
```

---

## 略過迴圈迭代

----

## 略過迴圈迭代
當有一個迴圈你不想要執行時
你可以使用```continue```來跳過

----

## 範例
```cpp=
#include<iostream>
using namespace std;
int main(){
    for(int i=0;i<10;i++){
        if(i==4)continue;//不會輸出 4
        cout<<i<<endl;
    }
}
```

---

## 中斷迴圈

----

## 略過迴圈迭代
當有一個迴圈之後的迴圈你都想要跳過時
你可以使用```break```來跳過

----

## 範例
```cpp=
#include<iostream>
using namespace std;
int main(){
    for(int i=0;i<10;i++){
        if(i==4)break;//4(含)以後的數字都不會輸出
        cout<<i<<endl;
    }
}
```

---

## 巢狀敘述

----

## 巢狀敘述
當你將多個條件判斷式或迴圈一層一層組合在一起
即稱之為**巢狀敘述**

----

## 巢狀if...else...敘述範例

```cpp=
#include<iostream>
using namespace std;
int main(){
    int a;
    cin>>a;
    if(a<=1000){
        if(a<=500){
            if(a<=200){
                if(a<=100){
                    if(a<=50){
                        if(a<=20){
                            if(a<=10){
                                if(a<=5){
                                    if(a<=1){
                                        cout<<1;
                                    }
                                    else{
                                        cout<<5;
                                    }
                                }
                                else{
                                    cout<<10;
                                }
                            }
                            else{
                                cout<<20;
                            }
                        }
                        else{
                            cout<<50;
                        }
                    }
                    else{
                        cout<<100;
                    }
                }
                else{
                    cout<<200;
                }
            }
            else cout<<500;
        }
        else{
            cout<<1000;
        }
    }
    else{
        cout<<2000;
    }
}
```

----

## 巢狀迴圈敘述範例

```cpp=
#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=i;j++){
            cout<<'*';
        }
        cout<<'\n';
    }
}
```

---