### 遞增/減運算子 ---- <style> .reveal .slides { text-align: left; } </style> 簡而言之,他們就是讓運算子能夠「+1或-1」,舉例來說 : ---- ```cpp= int a_1 = 1, a_2 = 1; a_1++; a_2--; printf("%d %d", a_1, a_2); //cout << a_1 << " " << a_2; /*輸出: 2 0 */ ``` ---- 會發現結果是 a_1+1, a_2-1 ,所以我們可以大概分析成 : ```cpp= a_1++ = a_1 + 1; a_2-- = a_2 - 1; ``` ---- 不過**遞增/遞減運算子**只能放在變數後面嗎? 不!其實也是可以放在前面的。 ---- 舉例說明 : ```cpp= int a_1 = 1, a_2 = 1; ++a_1; --a_2; printf("%d %d", a_1, a_2); //cout << a_1 << " " << a_2; /*輸出: 2 0 ``` ---- 其實你會發現 **遞增/遞減運算子** 放在後面與放在前面的結果一模一樣。 那,他們相同嗎? ---- No!,我們來比較一下: ```c= int a = 7, b = 7; printf("%d\n", ++a); //cout << ++a; printf("%d", b++); //cout << b++; /*輸出: 8 7 */ ``` ---- 為何不一樣了,不是應該要輸出8和8嗎? ---- 其實不同的點在於「先後」順序。 ```cpp= int a = 7, b = 7; printf("%d\n", ++a); //cout << ++a << "\n"; printf("%d", b++); //cout << b++; ``` * 第二行的執行順序是:(1)a=a+1 (2)printf。 * 第三行的執行順序是:(1)printf (2)b=b+1。 ---- 所以我們能利用拆解順序的方式來了解。 白話一點的講法就是: * a++ -> 會先執行整行的敘述後再將a的值加1。 * ++a -> 先把a的值加1,再執行整行敘述。 ---- ### 兩數交換 ---- 假設我們目前有兩個數 a 和 b,並想要它們兩個之間的數值交換,那我們應該要怎麼做呢? ---- 直觀的做法 : ```cpp= int a = 2, b = 3; a = b; b = a; printf("%d %d", a, b); //cout << a << " " << b; /*輸出 3 3 /* ``` ---- 正確的做法 : ```cpp= int a = 2, b = 3, tmp; //tmp也就是另外一個變數 tmp = a; //tmp先儲存a的值 a = b; //a被指派b的值 b = tmp; //b被指派tmp的值(也就是a的值) printf("%d %d", a, b); /*輸出 3 2 */ ``` ----
{"metaMigratedAt":"2023-06-17T04:16:09.299Z","metaMigratedFrom":"YAML","title":"程式設計培訓 - (2)","breaks":true,"slideOptions":"{\"theme\":\"solarized\",\"transition\":\"fade\"}","contributors":"[{\"id\":\"1dfd0d36-665c-414c-a3ba-995f194a8cb9\",\"add\":1716,\"del\":1}]"}
    171 views
   Owned this note