運算子 | 功能 | 範例 |
---|---|---|
++ | 前遞增 | ++a |
++ | 後遞增 | a++ |
-- | 前遞減 | --a |
-- | 後遞減 | a-- |
遞增運算子為連續兩個加號,遞減運算子則是連續兩個減號,兩者都是單元運算子,直接施用在連接的運算元上。所謂的遞增運算就是對施用變數加 1 ,遞減就是減 1 ,這裡須注意,為了避免語意上的歧義或語法錯誤,通常我們會把遞增運算子及遞減運算子與施用變數直接連起來,然後與其他運算單位以空格分開。
前遞增就是先將運算元遞增,然後才加入運算式計算,後遞增則是運算式先行計算,運算式計算完後才進行遞增,而前後遞減亦同,就是將遞增改成遞減。如下例
#include <stdio.h> int main(void) { int a, b, c; a = 0; b = 0; c = a++ - ++b + ++a; printf("a = %d\n", a); printf("b = %d\n", b); printf("c = %d\n", c); return 0; } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:idtest.c 功能:示範遞增運算子及遞減運算子的使用 作者:張凱慶 時間:西元2010年7月 */
編譯後執行,如下
計算集中在第 9 行
c = a++ - ++b + ++a;
變數 a 與變數 b 最初的值為 0 , a 後遞增加上 b 前遞增再加上 a 前遞增,因此變數 c 等同下面的等式
c = 0 - 1 + 1;
所以 c 等於 0 。 a 總共遞增了兩次, b 遞增了一次,因此 a 等於 2 , b 等於 1 。
我們提供另一個使用遞增運算子與遞減運算子的範例,執行過程中會跟使用者互動,詢問所施用變數目前的值,另外用一個變數累計答對次數,程式如下
#include <stdio.h> int main(void) { int target = 0; int counter = 0; int guess; printf("target = %d\n", target); printf("target++\n", target++); printf("--target\n", --target); printf("target++\n", target++); printf("請輸入target現在是? "); scanf("%d", &guess); if (target == guess) { printf("答對囉!\n"); counter++; } else { printf("答錯了!\n"); counter--; } printf("target--\n", target--); printf("++target\n", ++target); printf("--target\n", --target); printf("++target\n", ++target); printf("請輸入target現在是? "); scanf("%d", &guess); if (target == guess) { printf("答對囉!\n"); counter++; } else { printf("答錯了!\n"); counter--; } printf("target++\n", target++); printf("--target\n", --target); printf("++target\n", ++target); printf("--target\n", --target); printf("請輸入target最後是? "); scanf("%d", &guess); if (target == guess) { printf("答對囉!\n"); counter++; } else { printf("答錯了!\n"); counter--; } if (counter > 0) { printf("\n共答對 %d 次....\n", counter); } else { printf("\n都沒有答對耶!再加油喔!\n"); } return 0; } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:gid.c 功能:示範遞增及遞減運算子的使用 作者:張凱慶 時間:西元2010年7月 */
請自行編譯執行這個範例,測試看看自己是否已經了解遞增、遞減的觀念。
問題與討論
- 遞增跟遞減有什麼不同?
- 前遞增跟後遞增的差別在哪裡?
- 為什麼要用遞增或遞減,對寫程式寫什麼幫助?
- 編譯執行 gid.c ,你答對了幾次呢?
- 網友 Dkky 測試 gid.c 後,發現答對一題的情況下,程式卻顯示都沒有答對,這是為什麼呢?
4 則留言:
您好,最近在學習C,感謝貴站提供如此有用的資訊可供自習。
本範例中的23,40和57這三行是否多餘,因為它們似乎會造成count的值出錯誤。
count 的計算在全答錯與全答對是正確的,這裡的設計是保留一些趣味性囉! ^_^
printf("--target\n", --target);
造成data argument not used by format string
是我哪裡有漏掉嗎?
printf("--target\n", --target);
造成data argument not used by format string
printf()函數中缺少了轉換符號
少了%d去顯示參數--target
他也顯示出缺少format string(轉換符號)
如果我講的有錯請大力的糾正 謝謝
張貼留言