C語言基本算數運算符如下表:
【例3-14】除法運算符
#include<stdio.h>
int main(void){
printf("\n\n%d,%d\n",20/7,-20/7);
printf("%f,%f\n",20.0/7,-20.0/7);
return 0;
}
本例中,20/7,-20/7的結果均為整型,小數全部捨去。而20.0/7和-20.0/7由於有實數參與運算,因此結果也為實型。
【例3-15】取余運算符
#include<stdio.h>
int main(void){
printf("%d\n",100%3);
return 0;
}
本例輸出100除以3所得的余數1。
自增、自減運算符
自增1運算符記為“++”,其功能是使變量的值自增1;自減1運算符記為“--”,其功能是使變量值自減1。
自增1,自減1運算符均為單目運算,都具有右結合性。可有以下幾種形式:
++i:i自增1後再參與其它運算。
--i:i自減1後再參與其它運算。
i++:i參與運算後,i的值再自增1。
i--:i參與運算後,i的值再自減1。
在理解和使用上容易出錯的是i++和i--。 特別是當它們出在較復雜的表達式或語句中時,常常難於弄清,因此應仔細分析。
【例3-16】
#include<stdio.h>
int main(void){
int i=8;
printf("%d\n",++i);
printf("%d\n",--i);
printf("%d\n",i++);
printf("%d\n",i--);
printf("%d\n",-i++);
printf("%d\n",-i--);
return 0;
}
i的初值為8,第4行i加1後輸出故為9;第5行減1後輸出故為8;第6行輸出i為8之後再加1(為9);第7行輸出i為9之後再減1(為8) ;第8行輸出-8之後再加1(為9),第9行輸出-9之後再減1(為8)。
【例3-17】
#include<stdio.h>
int main(void){
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("p=%d,q=%d,i=%d,j=%d",p,q,i,j);
return 0;
}
這個程序中,對P=(i++)+(i++)+(i++)應理解為三個i相加,故P值為15。然後i再自增1三次相當於加3故i的最後值為8。而對於q 的值則不然,q=(++j)+(++j)+(++j)應理解為j先自增1,再參與運算,由於j自增1三次後值為8,三個8相加的和為24,j 的最後值仍為8。
注意:經過讀者反饋,我們意識到上面的解釋是錯誤的,筆者親測,在VC6.0和MinGW下的輸出結果是:
p=15, q=22, i=8, j=8
對於 p=(i++)+(i++)+(i++),先計算 (i++)+(i++),因為是“後自加”,等價於 5+5,結果為10;然後計算 10+(i++),等價於 10+5,結果為 15。
對於 q=(++j)+(++j)+(++j),先計算 (++j)+(++j),因為是“前自加”,要先計算兩次 ++j,此時 j=7,然後相加,相當於 7+7,結果為14;然後計算 14+(++j),相當於 14+8,結果為22。