c語言問題

2022-12-20 15:30:17 字數 1084 閱讀 1796

1樓:匿名使用者

當執行++a時候a的值2,表示式中的||和&&,前者優先順序更高,所以既然前面的值已經為2了,下面計算機就判定沒有計算的必要了,所以就會跳過,不執行後面兩個式子,所以b和c的值沒發生改變,所以都為1,這種情況叫做「短路」現象。

如不明白,請再參看2023年版c語言教程37頁,有詳細的解釋。

還有啊,正確的形式應該是printf("%d\n",++a||++b&&++c);,樓主貌似少寫一個分號。

這個這麼寫就是考這種現象的,其實完全沒必要這麼寫。

2樓:匿名使用者

因為或運算(||)規則有1出1,全0出0

當++a時候a=2,即結果為真(1)之後下面的就不再執行比較了,一般都叫短路。

3樓:匿名使用者

++a 是先使用a的值 就是a=1先或 下個指令再加1

4樓:匿名使用者

其實解答已經說的很清楚了,再重複一下吧:

首先,你好像漏了一個引號,%d左右應該都有引號其次,該題是考察自增運算和邏輯運算子

自增運算就不說了。

關於邏輯運算子,表示式中的||和&&,後者優先順序更高,所以整個表示式可以看作(++a)||(++b&&++c),這時關注||運算子,這是「或」的關係,也就是說運算子兩邊只要有一個為1(不為0即可),整體結果就為1。所以如果左邊的值為1(不為0即可),就沒有必要再計算右邊的值了,整個表示式的結果已經是1了。所以||後面的表示式沒有被執行,自增運算也沒有執行,b、c的值沒有改變。

5樓:

解答:因為++a的值為2,可以得出整個表示式的值為1無須計算後面的運算物件,所以b=c=1.

6樓:

都很強啊··· 題目都沒寫好還能回答上來·· 牛人·· 能夠確定列印函式後面的引數只有「++a||++b&&++c」???

7樓:魔尊

因為++a||++b&&++c這一句先是++a,那麼a=2不為0,是真,所以結果為1,輸出表示式的值為1.而判斷或(||)時如果前面的為真後面的就不再進行判斷,沒必要了,所以後面的不會執行,b、c仍為原值。

C語言問題C語言問題,C語言問題C語言問題

include include int main b k p b k 0 puts b return 0 c語言問題c語言問題 include int main int h,m scanf d d h,m printf s num h if m 0 else printf o clock print...

C語言問題,C語言問題C語言問題

這題考的是自動型別轉換,由編譯系統自動完成,轉換是 向上 靠的 舉個例子 include stdio.h void main 你編譯一下就會有警告 conversion from double to float possible loss of data 也就是說系統預設轉化了a,b的資料型別為do...

c語言問題,C語言問題

1 c2 a 3 d4 a 5 d6 b 7 a8 a9 d c語言問題 include define n 30 typedef struct student student r n int main void num 1 for i 0 ir max score max j if max i if...