| 運算子 | 功能 | 範例 |
|---|---|---|
| ++ | 前遞增 | ++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(轉換符號)
如果我講的有錯請大力的糾正 謝謝
張貼留言