1. 程式人生 > >有關C語言運算子的幾個問題及解答

有關C語言運算子的幾個問題及解答

1.int i = 0;

int  j = 0;

if( (++i>0)||(++j>0) )

{

printf("i = %d   j = %d \n",i,j);

}

輸出多少呢?

i = 1  j = 0  ,由於 或|| 運算子的左面為真則不再判斷右面是否為真,其結果即為真;如果||左面為假則還要繼續判斷右面,來決定最終結果。

對於 與&& 運算子,左面為假則不再判斷右面,結果即為假,左面為真還要繼續判斷右面。

2..int i = 0;

int  j = 0;

j = (i++,i++,i++);

printf("i = %d   j = %d \n",i,j);

輸出多少呢?

i = 3  j = 2  ,++作為字尾時先不改變i的值,運算結束後再進行加一;“i++,”為一個計算單位,運算結束後i值為1,最後個i++後沒有逗號不算做一個計算單位,因此j的值為2,此時i的值也為2,但是j = (i++,i++,i++);執行結束後,還有一個分號結尾的計算單位,所以i還要加一,最終i = 3.(逗號","算作一個計算單位)

3.int i = 0;

int  j = 0;

j = (i++) + (i++) + (i++);

printf("i = %d   j = %d \n",i,j);

輸出結果如何?

i  =  3  j = 0  ,j = (i++) + (i++) + (i++);中只有一個計算單位,所以i 的值先不變,最後執行3次加一操作。(分號";"算作一個計算單位)

4.int i = 0;

int  j = 0;

j = (++i)+ (i++) + (i++);

printf("i = %d   j = %d \n",i,j);

輸出結果如何?

i  =  3   j = 3  ,執行(++i)後i值為1,之後的i值不變,所以j為3,j = (++i)+ (i++) + (i++);語句結束後一個計算單位結束,執行2次i加一。

5.int i = 0;

int  j = 0;

j = (i++) +(++i) +(i++);

printf("i = %d   j = %d \n",i,j);

輸出結果是 i = 3    j = 2 ?

實際上i = 3  j = 3 ,由於  +  雙目運算子 (左右兩面相加) ,所以(i++)的結果為0,(++i)的結果為1,那麼i = 0和i = 1 就矛盾了,系統會取加號右面的i = 1,j = 1+1+1;結果為3.(這種單個變數連續加的問題很少遇到)

6.上面介紹了兩類計算單位,實際上還有一種:for(;;)

for(表示式1;表示式2;表示式3)

{

語句

}

a.執行表示式1

b.執行表示式2,如果為真則執行語句,否則跳出迴圈

c.執行表示式3   然後跳轉到b

這裡的   執行表示式3 就相當於一個計算單位,因此表示式3中常用的i++  與  ++i 效果是一樣的。