## 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}]"}
    163 views