## C語言程式設計導論
### 基本運算子
---
<!-- .slide: data-transition="fade" -->
<h3 class="text-left">
Table of Content
</h3>
- 認識運算子
- 等於 $=$
- 加、減、乘、除、取餘數 $+ - * / %$
- 賦值運算子
- 比較運算子
- 運算子的優先權
- 例題練習
<!-- .element: class="fragment" data-fragment-index="1" -->
----
<!-- .slide: data-transition="fade" -->
### 本章節有大量的例題
### 請小心服用
----
<!-- .slide: data-transition="fade" -->
### 為了節省講義空間
### 從這裡開始會習慣性省略以下幾行程式
```cpp
#include<stdio.h>
int main(){
return 0;
}
```
<!-- .element: class="fragment" data-fragment-index="1" -->
---
<!-- .slide: data-transition="fade" -->
### 認識運算子
----
<!-- .slide: data-transition="fade" -->
**運算子(operator)可能是初學者第一次聽到的名詞**
**但事實上這個詞已經從小學數學課陪伴我們至今**
**其實$+ - × ÷$等等的符號就被稱作運算子**
<!-- .element: class="fragment" data-fragment-index="1" -->
----
<!-- .slide: data-transition="fade" -->
**在數學上還有其他的運算子像是:**
**開根號$\sqrt{}$、等於$=$、小於$<$、括號$()$、絕對值$| |$**
----
<!-- .slide: data-transition="fade" -->
**在C語言裡面**
**也有非常多種運算子可以使用**
<!-- .element: class="fragment" data-fragment-index="1" -->
----
<!-- .slide: data-transition="fade" -->
<h3 class="text-left">
C語言的運算子類型
</h3>
- 算術運算子
- 比較運算子
- 邏輯運算子
- 位元運算子
- 其他運算子
----
<!-- .slide: data-transition="fade" -->
**本講義主要是
講算術運算子、比較運算子、賦值運算子**
---
<!-- .slide: data-transition="fade" -->
### 等於 $=$
----
<!-- .slide: data-transition="fade" -->
**這個運算子不是等於**
**而是給某某記憶體位置一筆資料**
----
<!-- .slide: data-transition="fade" -->
**給個範例**
```cpp
int num;
num = 100;
printf("%d", num);
```
**這段程式就是
(1)宣告一個變數num
(2)指派$100$進num裡面
(3)輸出num裡的數字**
----
<!-- .slide: data-transition="fade" -->
### 注意
### 程式中的「=」並不是數學的等於
<!-- .element: class="fragment" data-fragment-index="1" -->
### 程式中「=」是把資料「存入」記憶體
<!-- .element: class="fragment" data-fragment-index="2" -->
---
<!-- .slide: data-transition="fade" -->
### 加、減、乘、除、取餘數 $+ - * / %$
----
<!-- .slide: data-transition="fade" -->
**加減乘除沒什麼好講的**
**舉幾個例子就懂了**
<!-- .element: class="fragment" data-fragment-index="1" -->
----
<!-- .slide: data-transition="fade" -->
<h3 class="text-left">
範例1
</h3>
**輸入一個數字n**
**計算$1+2+...+n$的和並輸出**
```cpp
int n;
scanf("%d", &n);
n = n * (n + 1) / 2;
printf("%d", n);
```
**也可以這樣寫**
```cpp
int n;
scanf("%d", &n);
printf("%d", n * (n + 1) / 2);
```
----
<!-- .slide: data-transition="fade" -->
<h3 class="text-left">
範例2
</h3>
**輸入兩個數字a, b**
**輸出a - b的結果**
```cpp
int a, b;
scanf("%d %d", &a, &b);
printf("%d", a - b);
```
----
<!-- .slide: data-transition="fade" -->
**%這個符號比較特別**
**他不是百分比的意思**
<!-- .element: class="fragment" data-fragment-index="1" -->
**而是取某某數字後取餘數的意思**
<!-- .element: class="fragment" data-fragment-index="2" -->
----
<!-- .slide: data-transition="fade" -->
**在數學的話會寫mod**
**但是這個大學才會深入討論**
----
<!-- .slide: data-transition="fade" -->
<h3 class="text-left">
範例3
</h3>
**輸入兩數$a, b$**
**輸出$a+b$的個位數字是多少**
```cpp
int a, b;
scanf("%d %d", &a, &b);
printf("%d", (a + b) % 10);
```
---
<!-- .slide: data-transition="fade" -->
### 賦值運算子
----
<!-- .slide: data-transition="fade" -->
**在上一個部分我們知道了「=」的含意**
**此符號是賦予一變數一個資料**
----
<!-- .slide: data-transition="fade" -->
**在許多語言中**
**賦予一變數資料的不只有「=」而已**
<!-- .element: class="fragment" data-fragment-index="1" -->
----
<!-- .slide: data-transition="fade" -->
**在寫程式時**
**我們常會去修改一個變數的值**
**然後再存回去**
<!-- .element: class="fragment" data-fragment-index="1" -->
**比如說 $a = a + 5$**
**那我們就可以把它寫成 $a+=5$**
<!-- .element: class="fragment" data-fragment-index="2" -->
----
<!-- .slide: data-transition="fade" -->
**當然其他符號也有相對應的運算子**
----
<!-- .slide: data-transition="fade" -->
<h3 class="text-left">
賦值運算子
</h3>
|運算子|範例|說明|
|:-:|:-:|:-:|
|$+=$|$a+=4$| 先加再賦值
|$-=$|$a-=10$| 先減再賦值
|$*=$|$a*=b$| 先乘再賦值
|$/=$|$a/=6$| 先除再賦值
|$\%=$|$a\%=5$| 先取餘數再賦值
|$=$|$a=5$| 賦值
---
<!-- .slide: data-transition="fade" -->
### 比較運算子
**建議搭配[if條件敘述](https://hackmd.io/@ShanC/BkmfZLn8A#/)食用**
<!-- .element: class="fragment" data-fragment-index="1" -->
----
<!-- .slide: data-transition="fade" -->
**其實就是在數學裡面不等式會用的符號**
**大於>、小於<......等等的符號**
<!-- .element: class="fragment" data-fragment-index="1" -->
----
<!-- .slide: data-transition="fade" -->
**比較特別的是 在C語言中**
**如果比較運算為真就會得到 $1$**
**如果比較運算為真就會得到 $0$**
<!-- .element: class="fragment" data-fragment-index="1" -->
----
<!-- .slide: data-transition="fade" -->
<h3 class="text-left">
比較運算子
</h3>
|運算子|範例|說明|
|:-:|:-:|:-:|
|$>$|$a > b$| 大於
|$<$|$a < b$| 小於
|$>=$|$a >= b$| 大於等於
|$<=$|$a <= b$| 小於等於
|$==$|$a == b$| 等於
|$!=$|$a != b$| 不等於
----
<!-- .slide: data-transition="fade" -->
**我們可以看看以下例子**
```cpp
int a = 3, b = 6;
printf("%d %d %d", (a > b), (a < b), (a == b));
```
**輸出如下**
```txt
0 1 0
```
---
<!-- .slide: data-transition="fade" -->
### 運算子的優先權
----
<!-- .slide: data-transition="fade" -->
**跟數學一樣不同的符號之間也是有優先權的**
**比如說:括號內的內容先算、先乘除後加減等等**
<!-- .element: class="fragment" data-fragment-index="1" -->
----
<!-- .slide: data-transition="fade" -->
<h3 class="text-left">
運算子的優先權
</h3>
**大致上可以這樣分類**
**括號 $>$ 算術運算子 $>$ 比較運算子 $>$ 賦值運算子**
**詳細者以參考**[維基百科](https://zh.wikipedia.org/zh-tw/C%E5%92%8CC%2B%2B%E9%81%8B%E7%AE%97%E5%AD%90)
<!-- .element: class="fragment" data-fragment-index="1" -->
----
<!-- .slide: data-transition="fade" -->
### 注意
### 如果不想遇到運算子相關的問題的話
### 括號要括好
---
<!-- .slide: data-transition="fade" -->
### 例題練習
----
<!-- .slide: data-transition="fade" -->
[Zerojudge a002. 簡易加法](https://zerojudge.tw/ShowProblem?problemid=a002)
[Zerojudge b877. 我是電視迷](https://zerojudge.tw/ShowProblem?problemid=b877)
[Zerojudge d049. 中華民國萬歲!](https://zerojudge.tw/ShowProblem?problemid=d049)
[Zerojudge d050. 妳那裡現在幾點了?](https://zerojudge.tw/ShowProblem?problemid=d050)
[Zerojudge e156. 良心題: 求和](https://zerojudge.tw/ShowProblem?problemid=e156)
---
<!-- .slide: data-transition="fade" -->
### 以上就是本章節的內容
{"description":"認識運算子","title":"C程式設計導論-基本運算子","contributors":"[{\"id\":\"4f67a8cd-06ae-45dc-a8e3-62c6a41e5a37\",\"add\":6086,\"del\":205}]"}