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...