C語言,邏輯運算的例題,答案到底是B還是D,麻煩分析一下

2021-03-08 18:04:30 字數 3697 閱讀 6337

1樓:gta小雞

運算子來的優先順序和表示式的求值順源序是兩個不同的概念bai,兩者沒du有直接關係。zhi「圓括號的優先順序最高,先dao算」解析從這一句話開始就是錯誤的,故之後的內容可以無視。

&&運算子是一個順序點,在程式經過順序點時,之前的所有表示式必須已經求值完畢,它們的***必須已經發生。因此一定是先對&&之前的表示式i++==1求值。這個表示式求值結果為真,求值完畢後i變為2。

由於&&左邊的表示式為真,還需要進一步對右邊的表示式求值,接下來就是求子表示式++j==3||k++==3的值。

||運算子同樣是一個順序點,因此一定是先對++j==3求值。這個表示式的求值結果同樣為真,求值完畢後j變為3。由於運算子||左邊的表示式為真,整個或運算結果一定為真,發生短路運算,不再計算右邊的表示式k++==3。

因此k的值不會發生變化,為初始值3。

因此,最終i=2,j=3,k=3。教材答案正確,但解析錯誤。

2樓:荌繎丶誑嘢菰漃

邏輯運算子是順序求值節點,c語言要求它的左表示式被優先求值,其次再根據短路效應決定是回否對右表答達式求值

邏輯與:當左表示式為真,對右表示式求值,當左表示式為假,結束邏輯表示式

邏輯或:當左表示式為假,對右表示式求值,當左表示式為真,結束邏輯表示式

根據兩個規則換算:

a=i++==1&&(++j==3||k++==3);

首先對i++ == 1求值:其結果為真,a=1&&(++j==3||k++==3)

其次對(++j==3||k++==3)求值,對++j == 3求值,結果為真,a=1&&(1 || k++==3)

根據短路效應,不對邏輯或右表示式求值,也就是不執行,邏輯與表示式右值為真

根據上述求值,實際上也就是對i和j進行了計算,而對k沒有計算,k值不變

當語句結束,i == 2, j == 3, k == 3

3樓:

d)正確,選d)。教材上的分析正確——k++沒有執行的原因是||前面的++j==3已經成「真」,||後面就沒有必要執行了,俗稱||的短路現象。

4樓:匿名使用者

--你直接用程式寫出來執行一下就知道誰對誰錯了

幾個關於邏輯運算的c語言題目

5樓:核蛋小子

哦,bai這個我知道,書上du和老師都會提到zhi這個問題的,在邏輯dao運算中會出現「短路」內的現象

容,例如「&&」並列語句當中如果第一個為假的話就結果直接為零,不執行後面的運算;「||」或語句中如果第一為真結果直接為1,不執行後面的語句。這樣你就明白為什麼第一道題中的n不是0而是原來的值2,第二道題仲的y是3而不是4,第三道題仲的b是0而不是1啦

6樓:匿名使用者

5>6是假,所以&&的結果肯定是假,右邊的n=c>d就沒有運算了,所以n仍為2

同理++x=4,為真,所以||結果肯定是真,右邊的++y沒有運算

還是同理,++a=1>0為真,所以++b沒有運算,++c算了

7樓:匿名使用者

(m=a>b)&&(n=c>d) 結果該是0 因a不大於b m=就為假 後面的c++就不運算了

第二個是對的

++a 所以a=1

後面++b不執行

然後++c;

8樓:匿名使用者

應該沒錯,典型bai的短路du求值。

分析zhi

一個吧:

(m=a>b)&&(n=c>d)

a > b false

m = a >b m = 0

(m = a>b) 整個表達dao

式結內果也容

是0因為左邊表示式結果為假,根據短路求值規則,右邊不用求解,所以n不變

結果是: 2

9樓:匿名使用者

(m = a > b)結果為0

(n = c > d)結果為1

(m = a > b) && (n = c > d)結果為1n = 2

10樓:匿名使用者

2樓的回答很好,給他加分

11樓:匿名使用者

你確定你給的答案沒有錯?

12樓:餘同書由君

||包括:1。&&邏輯與

2。||邏輯或

3。!邏輯非

對於使用邏輯運算子的表示式,返回0表示「假」,返回1表示「真」。關於邏輯運算子的解釋

請注意:任何使用兩個字元做符號的運算子,兩字元之間不應有空格,即將==寫成=

=是錯誤的。

假設一個程式在同時滿足條件a<10和b==7時,必須執行某些操作。應使用關係運算子和邏輯運算子「與」來寫這個

條件的**。用&&表示「與」運算子,該條件**如下:

(a<10)

&&(b==7);

類似地,「或」是用於檢查兩個條件中是否有一個為真的運算子。它由兩個連續的管道符號(||)表示。如果上例

改為:如果任一語句為真,則程式需執行某些操作,則條件**如下:

(a<10)

||(b==7);

第三個邏輯運算子「非」用一個感嘆號(!)表示。這個運算子對表示式的真值取反。例如,如果變數s小於10,程式

程式需執行某些操作,則條件**如下:

(s<10)

或(!(s>=10))

//s不大於等於10

關係運算子和邏輯運算子的優先順序一般都低於算術運算子。例如,5>4+3的計算與5>(4+3)運算子是一樣的,即

先計算4+3,再執行關係運算。此表達示的結果為「假」,即,將返回0。

下面的語句

printf("%d",5>4+3);

將輸出0

可以總結為:&&的結果是真真為真。||的結果是假假為假。

c語言 關於邏輯運算且 b=(-1)&&(-1) b是多少,怎麼算的?

13樓:匿名使用者

c語言使用非0代表邏輯真(返回邏輯真時使用1),0代表邏輯真。

而&&是邏輯與運算子,當兩邊同時為真時,結果才為真。

-1非0,代表邏輯真。因此(-1)&&(-1) 就是真&&真,結果仍然為真。

即上面的運算變成了b=真,即b=1

14樓:it孤鶩

-1 為真 ,

那麼 -1 && -1 就是真 就是1

那麼b=1

15樓:匿名使用者

非 0 就為真 所以-1為真

在以下一組運算子中,優先順序最高的運算子是( ).a)<= b) = c)% d)!

16樓:匿名使用者

應該選c。

優先順序從高到低依次是 算術運算子、關係運算子、邏輯運算子、條件運算子、賦值運算子和逗號運算子。

17樓:掉個隕石砸茅坑

正確答案是:d,

邏輯非是單目運算子,而%是雙目運算子。

18樓:煙花

答案選d。理由:a中<=優先順序是6級,b中=優先順序是14級,c中%優先順序是3級,d中!優先順序是2級。

19樓:匿名使用者

一題邏輯運算的c語言題目跪求,一題邏輯運算的C語言題目。。。跪求

這個簡單,你知道c語言是有上向下一次執行的是把,你的程式可是簡單的分析成以下的 形式 main int x,y,z 定義變數 x,y,z x y z 0 你給x,y,z 賦了個初始值0 x y z 這是你的邏輯表示式 其中 x 等同於x x 1 賦值運算 之後的 y和 z 同理,和 是邏輯運算子,這...

C語言算數與邏輯運算子的優先順序?

a b c 1 b c 2 這個題目考察的是運算子優先順序,這個題目中只涉及算數運算子和邏輯運算子,只需記住算術運算子的優先順序高於邏輯運算子即可。先算括號,再取反,然後算術運算,最後邏輯。如果前邊還有個d 這一串,那麼最後邏輯完成之後是0還是1,最後再賦給d,即賦值優先順序還要低於邏輯。至於為什麼...

c語言中邏輯運算子的優先順序高於算術運算子

邏輯非 即 操作符 優先順序高於算術運算子。所有的單目操作符優先順序都高於雙目和三目操作符。括號運算子是最高階的運算子。三個邏輯運算子與或非。非的運算子優先順序高於算術運算子。c語言的操作符共有15個優先順序,如下 left toright type sizeof right toleft left...